有两种方法,
1 是在Android.mk文件里增加
LOCAL_JNI_SHARED_LIBRARIES := libxxx
这样在编译的时候,NDK自动会把这个libxxx打包进apk;
放在youapk/lib/目录下。
2 是在应用的目录下手工建
libs/armeabi
目录,然后把libxxx.so拷贝到这个目录下,
这样NDK就会自动把这个libxxx.so打包进apk,位置还是在
放在youapk/lib/目录下。
在代码里,使用
System.loadLibrary("xxx")
就可以加载这个动态库了。
这里要注意,参数只写xxx就可以了,不需要写libxxx,也不需要写libxxx.so。
还有一点要说明,System.loadLibrary这个函数会在如下路径搜索libxxx.so文件:
/system/lib
/data/data/you apk package/lib
但,如果libxxx.so还依赖其它.so文件,比如libyyy.so,则System.loadLibrary只会
在/system/lib目录下去找,如果没找到,它不会自动到/data/data/you apk package/lib
下去找,这个时候就会报动态库没找到的错;
解决方法是在load libxxx.so之前,先load libyyy.so,如下:
System.loadLibrary("yyy")
System.loadLibrary("xxx")
将文件Hello.c编译成一个动态库:libHello.so,执行命令如下:
$ gcc Hello.c -fPIC -shared -o libHello.so
使用以上两种方法都有一个问题,
gcc生成的so文件并不知道是哪个cup架构下的
cmake在mac上生成的动态链接库,是dyilb文件,不是so文件
所以
使用add_library指定
点击assebleDebug或者assebleRelease,在build/cmake文件夹下生成相应的so文件
通常我们的会编写相应的java文件去调用so库,java文件最好也写成java包的形式
jar的位置在(android studio 版本 3.6.1)build/compile_library_classes
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)