环境问题略过,请自行百度或谷歌安装ndk。
新建文件夹/cn/scnu
并在文件夹中创建java 文件:
该命令会编译java文件并在build目录下生成,然后我们打开build目录
然后我们使用javah命令:
然后会生成一个.h头文件,我们打开这个头文件看看:
可以看到这里面只有一个函数,这个函数返回一个整形,和前面的java头文件对应。
接下来我们另外创建一个Test文件夹,在Test文件夹下创建jni目录,然后将刚才生成的头文件拷贝进来。
然后我们创建JNITest.c文件,文件内容如图:
这个文件的主要内容就是调用头文件并实现头文件中的方法,我们返回了1024。
LOCAL_MODULE 就是我们要生成的so,LOCAL_SRC_FILES就是编译的文件
这里就表示我们要生成的so库的CPU架构。
使用命令行进入到Test目录下,即jni的根目录处,然后打命令:
结果如图,然后我们就可以在libs目录下发现生成的so库了。
java程序rk3288/frameworks/base/media/java/android/media/MediaScanner.java
文件中class 为public class MediaScanner
正常编译后会在rk3288/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes/android/media目录下生成MediaScanner.class文件。
我们进入rk3288/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes目录,使用如下命令生成jni头文件:
classes]$ javah -classpath . -jni android.media.MediaScanner
classes]$ ls android_media_MediaScanner.h
android_media_MediaScanner.h
Java中本地方法(native 修饰)可通过javah来生成头文件,你可以在这个头文件里实现java中定义的方法,然后你需要将生成的头文件编译,如DOS下编译得到动态连接库存XXX.dll,你在使用JAVA定义的那个本地方法时 需要加载这个dll库 然后你就可以像调其它JAVA一样调你定义的那个类的本地方法。对于已经编译过的头文件,你删除了也不会有什么影响的,只要你的dll文件还在就行!
纯手工,望采纳!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)