Idea打包混淆时注意
1、对于已加入的jar,使用
-libraryjars libs/youjarname.jar ,会报错(Eclipse上不会):Error:ProGuard: [H5Project] Note: there were 282 duplicate class definitions.(提示类定义冲突了)
注意:idea有的时候错清除了,注意清理一下缓存
2、(1)*是一层,**是多层
(2)对于第三方包,如果第三方没有提供混淆说明,那就不要混淆,免得影响功能
-dontwarn 包名.**
-keep class 包名.**{*;}
(3)对于某些第三方包(记为包A),其也使用了第三方包(记为包B),但是我们使用到的A包中的功能与包B无关(既B包不影响我们使用A中的某些功能),因而我们无需把包B也导入,但是用idea时会报错,对于此种情形,解决方法如下:
a. 把包B也到入到工程(但是有一种情形下是多层引用,A引用了多个包或者B又引用了其它包)
b. 法二:
A包目录:A.A1.B1, A.A1.B2.C1, A.A1.B2.C2,A.A1.B3
B包目录:不用管,A.A1.B2中使用了B包,但是我们使用的是A.A1.B1或者A.A1.B3中的功能,没有使用A.A1.B2.**中的功能,但是A.A1.B2.**使用了B包,混淆时会报错找不到。
比如报错A.A1.B2.**中某类中的B.A.*某类找不到
错误类似:
Error:ProGuard: [项目名] Exception = [java.lang.IllegalArgumentException] (Can't find any super classes of [A/A1/B2/C1/Object] (not even immediate super class [B/A/C/AbstractObject]))
此时解决方法如下:
-dontwarn A.A1.**
-keep class A.A1.*{*;}#不能用**
-dontwarn A.A1.B2.**
#-keep class A.A1.B2.**{*;}#这行一定不能加,让其混淆掉(就能忽略检查,混淆通过)
注意-keep class与-keep public class的不同