ndk编译生成so

ndk编译生成so,第1张

本文讲述使用Android 的ndk-build来编译生成so库,在命令行中编译。编译后的so库可以调用。

环境问题略过,请自行百度或谷歌安装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文件还在就行!

纯手工,望采纳!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7911910.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存