
一:路径不对,可能我们改变了原有类的路径造成的native方法映射不到,所以再使用第三方的库的时候,尽量不要去改变包名,以及相关类的路径。
二:配置不对,AS存放so文件有羡凯迟两种方式,一种是在/libs/armeabi/xxx.so ,另一种是/jniLibs/armeabi/xxx.so ,无论哪种方式,我们都需要在build.gradle里孙陆面进行相关的配置的。
defaultConfig {
ndk {
abiFilters"armeabi"//可以适当补兄李填其他
}
}
dependencies {
compile fileTree(include: [‘*.jar’], dir: ‘libs’) //记得添加依赖,一般默认的都会自动生成
}
sourceSets {
main { //这个配置是必须的,如果你的so文件放在了libs/armeabi/下,则下面srcDir = libs即可
jniLibs.srcDirs = [‘src/main/jniLibs’]
}
}
1
2
3
注意 jniLibs.srcDirs = [‘src/main/jniLibs’] 路径的拼写,之前参考网上的好多博客,都是直接srcDir=jniLibs,这里必须是src/main/jniLIbs,或者 srcDir=libs
好了,一般注意这两点,基本上就没有什么问题了。
一般 Android 项目从 Eclipse 导入至 Android Studio(以下简称AS) 后,会出现各种问题,最主要的就是 “gradle” 目前为止还不轿信镇支持 .so 库文件打包入 apk 。也就是说,如果你用的第三方库中包含 .so 文件 (一般是 libs\armeabi\ xxx.so ) , 那么只要在代码中出现 “System.loadLibrary( "xxx" ) 等代码出现,一定会在这里抛出异常 UnsatisfiedLinkError 。
解决方案如下: 根据我 Google 了2天的结果,一个比较满意且所有出现这个问题的人都闭粗可行的方案是:
1) 在硬盘任意位置建立空文件夹 "lib" (注意名字是 "lib" 而不是 "libs" )
2) 把原来的 libs 目录下的 armeabi 文件夹拷贝至 刚建立的 lib 目录下. (armeabi文件夹中的.so文件也会坦野被一并拷入)
3) 将刚建立的 "lib" 目录打包压缩成 .zip 文件, 同时改名为 “armeabi.jar"
4) 将 armeabi.jar 放入原来的 libs 目录下 (和其他第三方jar包放在一起)
经过这4步之后,只需要再重新更新下AS的第三方库,就OK了 .
Android studio方法:
1、先在Android studio导入一个项目,然后进入到项目中,依次进入到app>>src>>main下。
2、在main的文件下进行创建一个jnilibs,然后选中main的文件,进行右键,d出框中段逗点击茄燃笑“new”,移动下一级菜单中选择颤含“directory”。
3、对创建的文件夹进行昵称,在昵称中进行输入“jnilibs”,然后点击“ok”。
4、这样在main的文件中创建一个为jnilibs的文件夹。
5、然后在jinlibs中文件进行添加so的文件,进入到so文件存放的文件中,直接把so的文件拖动到jinlibs的文件中。
6、拖动完成之后,会提示一个确认款提示信息,直接点击“ok”即可。
7、在non-project file access中第一个我希望编辑文件,第二个为我想在当前会话中编辑任何非项目文件,根据的自己需要进行选择,可以默认即可,点击ok。
8、这样就把so文件添加到jnilibs的文件中,这样的话程序的代码就可以进行调用其中方法。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)