Android混淆代码,作个小记录!

来源:互联网 发布:king crimson 知乎 编辑:程序博客网 时间:2024/05/22 09:39

Android Studio下混淆代码:
主要设置以下2个地方:一、build.gradle文件下 buildTypes {
debug{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

这里debug中的设置是为了混淆代码后本地调试用的(可以查看logcat日志观察错误信息),release中设置minifyEnabled为true这样可以导出混淆后APK
二、在proguard-rules.pro中添加代码(在你的SDK-tools-proguard目录下有个proguard-android.txt,这是默认的混淆配置,但是如果项目需要一些额外的处理就可以在proguard-rules.pro中添加配置)
我主要是设置不混淆实体类、第三方jar包、自定义的View:
1、实体类,最好单独建一个包,把实体类都放在这个包下
语句就是 -keep class 包名.* * { * ; } 表示不混淆这个包下所有文件;
我的实体类一般都实现了serializable,所以还要加点配置-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

说到实体类,还有个注意的地方,就是配置不混淆gson(请求到的网络数据,经过gson解析转换成实体对象,所以必须配置不混淆gson,不然就会运行报错了)

-keepattributes Signature-keep class com.google.gson.** {*;}-keep class sun.misc.Unsafe { *; }-keep class com.google.gson.stream.** { *; }-keep class com.google.gson.examples.android.model.**{*;}-keep class com.google.** {    <fields>;    <methods>;}

这个“-keepattributes Signature”我开始没配置,然后程序就报错,加上这句就OK了,但这个配置我不懂啥意思,希望高手告知下;
2、第三方jar包的话配置很简单(有些第三方框架官网上的帮助文档就有说明), 如图中所示支付宝的jar,对于alipaysecsdk.jar,就可以写-keep class com.alipay.mobilesecuritysdk.**{*;}
-keep class HttpUtils.**{*;}
,对于alipayutdid.jar,要写成-keep class com.utdid2.**{*;}
-keep class com.ut.device.**{*;}

有些比较特别的第三方,比如share SDK的:-keep class cn.sharesdk.**{*;}
-keep class **.R$* {*;}
-keep class **.R{*;}
-dontwarn cn.sharesdk.**
-dontwarn **.R$*

3、自定义View的话,其实和实体类的做法一样,把自定义的View放到单独的一个包下;
其实studio混淆代码很简单方便的,这篇文章就作为一个开发记录吧!O(∩_∩)O~

0 0
原创粉丝点击