proguard 不混淆第三方jar包的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了proguard 不混淆第三方jar包的问题相关的知识,希望对你有一定的参考价值。
下图中左边是proguard混淆前的目录结构,右边是混淆后的目录结构,我已经在proguard.cfg里面设置了不要混淆log4j这个类,但为什么打包出来的结构PatternParse这个类的内部类都单独的出来了呢?proguard.cfg配置内容
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keep class org.apache.log4j.***;
-libraryjars libs/log4j.jar
-dontwarn org.apache.log4j.*
-keep class org.apache.log4j.** *;
将-dontwarn和-keep 结合使用,意思是保持包里面的所有类和所有方法而不混淆,接着还叫ProGuard不要警告找不到这个包里面的类的相关引用。 参考技术A 对第三发jar包做个声明,加上这条语句试试
-libraryjars /libs/org.apache.log4j.jar
android studio 代码混淆如何忽略第三方jar包
最近在打包混淆时,遇到一个问题,混淆编译都不出错,运行出错,一般遇到这种问题,肯定是在运行的地方有代码被混淆了,经过错误排查,发现是程序中用到第三方的jar包的方法出现问题了,原来android studio混淆打包时把第三方的jar包给混淆了。
于是想这个问题很简单,保持jar包不混淆就好,于是直接在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:myprojectapplibsXX.jar] is specifi 大专栏 android studio 代码混淆如何忽略第三方jar包ed twice.
也就是说混淆规则文件中,我们指定了2次
解决方法:
打开app目录下的libs文件夹,将各第三方jar下的包名在proguard-rules.pro 文件中过滤。
code:
-keep class audio.cutter.lib.{*;}
-keep class universal.initlibs.{*;}
上面的代码以-keep class audio.cutter.lib.*{;} 为例,意思是不混淆com.baidu包下的各个类及类里面的所以域和方法。把上面的包名换成自己想要忽略的jar下面暴露的包名即可。
以上是关于proguard 不混淆第三方jar包的问题的主要内容,如果未能解决你的问题,请参考以下文章