Android混淆代码,作个小记录!
2016-04-01 10:36
525 查看
Android Studio下混淆代码:
主要设置以下2个地方:一、build.gradle文件下
这里debug中的设置是为了混淆代码后本地调试用的(可以查看logcat日志观察错误信息),release中设置minifyEnabled为true这样可以导出混淆后APK
二、在proguard-rules.pro中添加代码(在你的SDK-tools-proguard目录下有个proguard-android.txt,这是默认的混淆配置,但是如果项目需要一些额外的处理就可以在proguard-rules.pro中添加配置)
我主要是设置不混淆实体类、第三方jar包、自定义的View:
1、实体类,最好单独建一个包,把实体类都放在这个包下
语句就是 -keep class 包名.* * { * ; } 表示不混淆这个包下所有文件;
我的实体类一般都实现了serializable,所以还要加点配置
说到实体类,还有个注意的地方,就是配置不混淆gson(请求到的网络数据,经过gson解析转换成实体对象,所以必须配置不混淆gson,不然就会运行报错了)
这个“-keepattributes Signature”我开始没配置,然后程序就报错,加上这句就OK了,但这个配置我不懂啥意思,希望高手告知下;
2、第三方jar包的话配置很简单(有些第三方框架官网上的帮助文档就有说明),
![](https://img-blog.csdn.net/20160401101824702)
如图中所示支付宝的jar,对于alipaysecsdk.jar,就可以写
有些比较特别的第三方,比如share SDK的:
3、自定义View的话,其实和实体类的做法一样,把自定义的View放到单独的一个包下;
其实studio混淆代码很简单方便的,这篇文章就作为一个开发记录吧!O(∩_∩)O~
主要设置以下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~
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories