Android 混淆打包详解

经过混淆后的源码,原先的类名和方法名会被类似a,b,c。。。的字符所替换,混淆的原理其实也就是类名和方法名的映射。

但4大组件并没有混淆(所有在清单文件定义的组件不能被混淆),因为系统需要通过清单文件来查找和运行应用程序。


1.修改project.properties文件: 

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
去掉之前的#,即取消注释
2.proguard-project.txt文件解读
(1)引入的第三方库:

-optimizationpasses 5  ->设置混淆的压缩比率 0 ~ 7 

-dontusemixedcaseclassnames -> Aa aA 

-dontskipnonpubliclibraryclasses ->如果应用程序引入的有jar包,并且想混淆jar包里面的class 


-verbose ->混淆后生产映射文件 map 类名->转化后类名的映射


 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  ->混淆采用的算法.


 -keep public class * extends android.app.Activity   ->所有activity的子类不要去混淆 


 -keepclassmembers enum * {   -> 枚举类不能去混淆. 

    public static **[] values();

    public static ** valueOf(java.lang.String);

}


 -keep class * implements android.os.Parcelable {   -> aidl文件不能去混淆. 

  public static final android.os.Parcelable$Creator *;

}


 -keepclasseswithmembers class * {

    public <init>(android.content.Context, android.util.AttributeSet);

    -->某些构造方法不能去混淆

}


-keep com.amap.api.** {*;}           --> 忽略类

-libraryjars libs/AMap_2DMap_V2.2.1.jar   ->高德地图的第三方库,其他的库文件格式相同,库名修改。

-dontwarn com.amap.api.**        -->该类在项目中未用到,来屏蔽掉所有关于com.amap.api.**的警告

-ignorewarnings和dontwarn作用类似

其实找不到引用的这个类是第三方包里面的,而且很多时候我们只需要打乱自己的代码就行了,第三方包的代码就是否要打乱就不要管了。
-dontwarn和-keep 结合使用,意思是 保持com.xx.bbb.**这个包里面的所有类和所有方法而不混淆,接着还叫ProGuard不要警告找不到com.xx.bbb.**这个包里面的类的相关引用。

还有许多属性可以从api中找到答案。欢迎补充不足


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值