[Android Studio] 关于*.SO压缩问题
来源:互联网 发布:section软件 编辑:程序博客网 时间:2024/05/20 00:39
原文地址:
http://www.jianshu.com/p/d784f4596420
http://blog.csdn.net/qq_24889075/article/details/70183861
记录一天的苦逼,谨防再犯
方法一
由于项目需要使用到一个so库,于是开始加载so库,很普通的很常见的方式:
就是在Module的build.gradle中的android{}中添加如下代码,然后将so文件放在libs目录 即可
sourceSets { main { jniLibs.srcDirs = ['libs'] }}
加的很完美,因为jniLibs已经出现了,证明已经加进去了~ (在刚开始用AS的时候,网上有很多加so库的方式,有真有假 很多人连测都没测就发文章。记得看jniLibs是比较有效的方式,一直用到现在)
美美的运行下程序,报了一些错。大概意思就是没有找到static的Native方法,苦苦想了好久也没想明白,于是试着换so名字,结果告诉我没有找到so库! 那么也就是说so库被加载了,但是运行不了里面的方法。这个问题在一年前其实也遇到过,后来规避过去了,没想到人算不如天算啊。
方法二
此时’恰巧’CTO看见了我的问题,告诉我AndroidStudio是会将SO库进行压缩的。于是又换了另一个方法,大概思路是将so先打包成一个jar,然后加载jar。示例代码如下:
同样是在android{}下
task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') { destinationDir file("$projectDir/gen") baseName 'native-libs' extension 'jar' from fileTree(dir: 'libs', include: '**/*.so') into "lib"}sourceSets.main { jni.srcDirs = ['asjni'] jniLibs.srcDir 'jnilibs'}tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar)}
可以按照自己心情改的:
destinationDir 是生成目录,baseName 是文件的名字,extension 是文件后缀,nativeLibsToJar是方法名。
最后在去依赖jar即可,我是这样依赖的:
compile fileTree(dir: "$projectDir/gen", include: 'native-libs.jar')
也可生成jar后手动放到libs下,按照个人喜好即可。
有一点要注意的是,一定要记得清除上次build的文件,也就是clean一下,不然如果按照常规方式加so库然后在换成第二种方式再加载可能加载的还是第一次build中的文件。这个问题耽误了我很长时间,导致我认为第二种方式失效了。
注意!!!
并不是所有版本的AS都会自动压缩,在公司电脑中第一种方式无法运行,但是在家里的电脑 第一种方式完美运行,并没有被压缩。
怀疑1:是AS的设置里有个开关,设置是否压缩之类的
怀疑2:AS版本导致
总之,多掌握个技巧也是好的。这种错不要再犯第二次了~
- [Android Studio] 关于*.SO压缩问题
- Android Studio关于百度地图so库的配置问题
- Android Studio关于百度地图so库的配置问题
- 关于Android Studio加载.so文件问题,亲测有效
- 关于Android Studio加载so文件的问题
- 关于Android Studio导入第三方.so库,找不到so库以及找不到so库中方法的问题
- Android studio 加载so库异常问题
- Android studio so文件 配置问题
- Android studio so库找不到问题
- android studio 导入.so文件问题
- 关于Android Studio主Module与依赖Module同时引入so库的问题
- java.lang.UnsatisfiedLinkError 关于Studio so路径问题
- 关于Android的.so文件导入问题
- Android Studio 关于so文件导入的若干方案
- 关于Android studio导入so库文件失败
- 关于Android Studio .so文件打包不到APK中的原因
- 关于libmsc.so文件加载到Android Studio中
- 关于android studio进行NDK编译生成.so文件
- 为回答网友问题,而造此博文
- Android DDMS
- 计算机中补码一些认识
- 题目1075:斐波那契数列
- 练习2.1-4 (字符串实现任意长度的数之和)
- [Android Studio] 关于*.SO压缩问题
- 客户端区域坐标转换为 Canvas 坐标
- 微信资源混淆AndResGuard原理
- LeetCode 11-14
- Ugly Number
- Git使用
- 题目1076:N的阶乘
- 潮汕“木塞”(“木虱”)概率计算
- mysql命令行,多行命令时如何取消/返回修改前边的命令