我就是按照有个论坛eoeandroid论坛上讲JNI的那篇文章,写了TestDel的例子,在VS2005里面New了一个工程选址VC建立win32 project,选中dll建立empty project,将javah生成的头文件添加到此工程。
代码里面就是
JNIEXPORT void JNICALL Java_TestDel_creFolder(JNIEnv*,jclass)
编译也没有错误,但是没有生成dll.但是有一个warning:
1>正在链接...
1>LINK : 没有找到 E:\test\Debug\test.dll 或上一个增量链接没有生成它;正在执行完全链接
1>test.def(1) : warning LNK4017: Java_TestDel_creFolder 语句不支持目标平台;已忽略
这个我还需要像做普通的DLL那样做一个DEF文件,然后写上导出那些函数吗?
那个破资料上也没有说啊。顺便,BS一下网上的资料。
我当时为了生成那个头文件,执行javah命令怎么都不对,不是提示非法的软件包名称就是说找不到类。那些资料就是没有说很重要的一句:要执行set classpath,或者设置环境变量。真是!!!!!!!!!!
代码里面就是
JNIEXPORT void JNICALL Java_TestDel_creFolder(JNIEnv*,jclass)
编译也没有错误,但是没有生成dll.但是有一个warning:
1>正在链接...
1>LINK : 没有找到 E:\test\Debug\test.dll 或上一个增量链接没有生成它;正在执行完全链接
1>test.def(1) : warning LNK4017: Java_TestDel_creFolder 语句不支持目标平台;已忽略
这个我还需要像做普通的DLL那样做一个DEF文件,然后写上导出那些函数吗?
那个破资料上也没有说啊。顺便,BS一下网上的资料。
我当时为了生成那个头文件,执行javah命令怎么都不对,不是提示非法的软件包名称就是说找不到类。那些资料就是没有说很重要的一句:要执行set classpath,或者设置环境变量。真是!!!!!!!!!!
解决方案 »
- 关于android内置activity的问题,求解
- Android2.3系统安全设置?
- 不同电脑上的Android模拟器可以互相通信吗?
- Android初学者报道2(Ftp 服务器)
- listView中带checkBox问题、
- 求救!android向servlet提交数据,然后提交给jsp,如何在android端显示生成的这个jsp?
- 问一个关于 socket 异常处理的问题。
- 请教一个关于库依赖的问题
- 对android中的surfaceview的困惑,双缓冲区该怎么理解?
- cordova inappbrowser 浏览器 中怎样导出excel
- YUV420数据可以直接在android的surface上显示吗?
- Android Frame buffer 18bit, 如何实现应用层到驱动depth转换的.
LIBRARY "test"
EXPORTS
Java_TestDel_creFolder @1;
这样就可以生成DLL,那个资料很多地方说的真是有问题,有些该说的不说,别人只好摸索
结果我按照它说的却出现错误:
D:\Program Files\Java\jdk1.6.0_21\bin>java E:\Project\jni-test\TestDel\src\TestD
el.class
Exception in thread "main" java.lang.NoClassDefFoundError: E:\Project\jni-test\T
estDel\src\TestDel/class
Caused by: java.lang.ClassNotFoundException: E:\Project\jni-test\TestDel\src\Tes
tDel.class
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: E:\Project\jni-test\TestDel\src\TestDel.class. P
rogram will exit.
public class TestDel {
static
{
System.loadLibrary("cjw");
}
public native static void creFolder();
public native static void delFolder1();
public native static void delFolder2();
public static void main(String[] args)
{
TestDel test = new TestDel();
System.out.println("start create Folder");
test.creFolder();
System.out.println("start create Folder");
long stime=System.currentTimeMillis();
test.delFolder1();
long etime=System.currentTimeMillis();
System.out.println(etime-stime);
}}
你说的"eoeandroid论坛上讲JNI的那篇文章" 给个链接看看
el.class
Exception in thread "main" java.lang.NoClassDefFoundError: E:\Project\jni-test\T
estDel\src\TestDel/class
Caused by: java.lang.ClassNotFoundException: E:\Project\jni-test\TestDel\src\Tes
tDel.class
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: E:\Project\jni-test\TestDel\src\TestDel.class. P
rogram will exit.
这有什么意义呢 DLL的功能还是受jni.h的限制,和HelloJni没有本质区别啊。
java E:\Project\jni-test\TestDel\src\TestD
el.class
就是JNI实现里面,最后一页
我是要把以前有源代码的DLL,改成so,然后在android里面的应用apk调用。所以我想先把应用通过jni调用dll走通,然后把dll改成so.通过ndk