您的位置:首页 > 移动开发 > Android开发

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

2016-04-01 10:36 525 查看
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~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android android studio