AS打包apk无法加载so文件的问题

AS打包apk无法加载so文件的问题,第1张

so文件加载不出来,或者调用出错,一般有两个问题:

一:路径不对,可能我们改变了原有类的路径造成的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的文件中,这样的话程序的代码就可以进行调用其中方法。


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

原文地址:https://54852.com/tougao/12295083.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存