android studio 代码混淆如何忽略第三方jar包
2015-12-16 11:06
633 查看
日前在打包混淆包含第三方jar包的android studio项目时 报出了各种错误,但是debug版本却能正常运行,于是怀疑android studio 打包的时候把第三方jar包给混淆了,第三方jar包有些已经混淆过,再混淆一次,那肯定会出现蛋疼的问题。
Error:Execution failed for task ‘:app:proguardRelease’.
java.io.IOException: The same input jar [E:\myproject\app\libs\XX.jar] is specified twice.
也就是说混淆规则文件中,我们指定了2次
code:
上面的代码以 [-keep class com.baidu.* { ; }**] 为例,意思是不混淆com.baidu包下的各个类及类里面的所以域和方法。把上面的包名换成自己想要忽略的jar下面暴露的包名即可。assets等资源包不做处理~
参考:#(声明lib文件)-libraryjars **.jar
#(不提示警告)-dontwarn com.xx.bbb.**
#(不进行混淆)-keep class com.xx.bbb.** { *;}
具体使用
-libraryjars libs/gdx-backend-android.jar
-libraryjars libs/gdx-freetype.jar
-libraryjars libs/gdx.jar
-libraryjars libs/gson-2.2.4.jar
-libraryjars libs/httpcore-4.3.1.jar
-libraryjars libs/httpmime-4.3.2.jar
-libraryjars libs/mframework.jar
-libraryjars libs/ShareSDK-Core-2.3.4.jar
-libraryjars libs/ShareSDK-SinaWeibo-2.3.4.jar
-dontwarn com.badlogic.gdx.**
-dontwarn cn.sharesdk.**
-dontwarn org.apache.**
-dontwarn m.frameword.**
-dontwarn com.google.zxing.**
-keep class com.badlogic.gdx.** {*; }
-keep class cn.sharesdk.** {*; }
-keep class org.apache.** {*; }
-keep class m.frameword.** {*; }
-keep class com.google.zxing.** {*; }
from:http://blog.csdn.net/i374711088/article/details/46786189
另一个坑
遇到这个问题是本能的想到直接在app目录下的proguard-rules.pro(或者proguard-rules.txt)混淆规则文件直接-libraryjars libs/xx.jar避免混淆。但是却引出了另一个错误:Error:Execution failed for task ‘:app:proguardRelease’.
java.io.IOException: The same input jar [E:\myproject\app\libs\XX.jar] is specified twice.
也就是说混淆规则文件中,我们指定了2次
解决方法
打开app目录下的lib文件夹,将各第三方jar下的包名在proguard-rules.pro 文件中过滤。code:
<code class="hljs haml has-numbering">-<span class="ruby">keep <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">com</span>.<span class="hljs-title">baidu</span>.** { *;</span> } </span>-<span class="ruby">keep <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">vi</span>.<span class="hljs-title">com</span>.<span class="hljs-title">gdi</span>.<span class="hljs-title">bgl</span>.<span class="hljs-title">android</span>.**{*;</span>} </span>-<span class="ruby">keep <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">com</span>.<span class="hljs-title">google</span>.<span class="hljs-title">gson</span>.**{*;</span>} </span>-<span class="ruby">keep <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">com</span>.<span class="hljs-title">android</span>.<span class="hljs-title">volley</span>.**{*;</span>}</span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li></ul>
上面的代码以 [-keep class com.baidu.* { ; }**] 为例,意思是不混淆com.baidu包下的各个类及类里面的所以域和方法。把上面的包名换成自己想要忽略的jar下面暴露的包名即可。assets等资源包不做处理~
参考:#(声明lib文件)-libraryjars **.jar
#(不提示警告)-dontwarn com.xx.bbb.**
#(不进行混淆)-keep class com.xx.bbb.** { *;}
具体使用
-libraryjars libs/gdx-backend-android.jar
-libraryjars libs/gdx-freetype.jar
-libraryjars libs/gdx.jar
-libraryjars libs/gson-2.2.4.jar
-libraryjars libs/httpcore-4.3.1.jar
-libraryjars libs/httpmime-4.3.2.jar
-libraryjars libs/mframework.jar
-libraryjars libs/ShareSDK-Core-2.3.4.jar
-libraryjars libs/ShareSDK-SinaWeibo-2.3.4.jar
-dontwarn com.badlogic.gdx.**
-dontwarn cn.sharesdk.**
-dontwarn org.apache.**
-dontwarn m.frameword.**
-dontwarn com.google.zxing.**
-keep class com.badlogic.gdx.** {*; }
-keep class cn.sharesdk.** {*; }
-keep class org.apache.** {*; }
-keep class m.frameword.** {*; }
-keep class com.google.zxing.** {*; }
from:http://blog.csdn.net/i374711088/article/details/46786189
相关文章推荐
- zhu的工作日记:图片三级缓存的工具类(android)
- 关于常量,枚举和注解
- Android对齐属性大全
- Android 屏幕适配方案
- Android - 文件读写操作 总结
- 详解Android中IntentService的使用方法
- (Bitmap OOM) BitmapFactory.nativeDecodeStream
- Android项目使用support v7时遇到的问题
- Android编程之在SD卡上进行文件读写操作实例详解
- Android实战 - 音心播放器 (MusicActivity-音乐播放页面界面实现)
- Android学习之位图BitMap
- Android混淆、反编译基础教程
- Android音频系统之AudioFlinger(二)
- Android 权限设置大全
- android ScrollView嵌套RecyclerView
- android实现之高清音频录制编码
- Android音频系统之AudioFlinger(一)
- android流媒体之云视频播放-android视频播放器SDK-视频播放不在犯困
- android aidl浅析
- Android桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果