Android ProGuard打包混淆代码
2016-07-04 02:38
477 查看
buildTypes { debug { versionNameSuffix ".dev" } release { debuggable false minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } }
proguardFiles getDefaultProguardFile 就是制定 混淆规则的文件, AndroidStudio默认生成了proguard-rules.pro 文件
-libraryjars class_path 应用的依赖包,如android-support-v4
-keep [,modifier,...] class_specification 不混淆某些类
-keepclassmembers [,modifier,...] class_specification 不混淆类的成员
-keepclasseswithmembers [,modifier,...] class_specification 不混淆类及其成员
-keepnames class_specification 不混淆类及其成员名
-keepclassmembernames class_specification 不混淆类的成员名
-keepclasseswithmembernames class_specification 不混淆类及其成员名
-assumenosideeffects class_specification 假设调用不产生任何影响,在proguard代码优化时会将该调用remove掉。如system.out.println和Log.v等等
-dontwarn [class_filter] 不提示warnning
不混淆某个类和成员变量:
-keep class com.clock.**{*;}//不混淆所有com.clock包下的类和类中的所有成员变量,**可以换成具体类名,*可以换成具体的字段,可参照Serialzable的混淆
不混淆某个类:
-keep class com.czy.**//不混淆所有com.czy包下的类,** 换成具体的类名则表示不混淆某个具体的类
有用到WEBView的JS调用接口,需加入如下规则:
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
-keep class com.xxx.xxx.** { *; }//保持WEB接口不被混淆 此处xxx.xxx是自己接口的包名
如果用到了反射需要加入 :
-keepattributes Signature
-keepattributes EnclosingMethod
如果加入一些自己的混淆规则 只需要在 proguard-rules.pro 中文件加入自己的混淆规则即可,
其实google以及给我提供很好的打包规则, 即proguard-rules.pro 啥也不写, 我打出来的release包也是混淆好的
但是我们会遇到一些情况, 不得不 添加自己的混淆规则:
1. 代码中使用了反射,如一些ORM框架的使用
需要保证类名 方法不变, 不然混淆后, 就反射不了
2. 使用GSON、fastjson等JSON解析框架所生成的对象类
生成的bean实体对象,内部大多是通过反射来生成, 不能混淆
3. 引用了第三方开源框架或继承第三方SDK,如开源的okhttp网络访问框架,百度定位SDK等
在这些第三库的文档中 一班会给出 相应的 混淆规则, 复制过来即可
4. 有用到WEBView的JS调用接口
没真么用过这块, 不是很熟, 网上那个看到的
5. 继承了Serializable接口的类
在反序列画的时候, 需要正确的类名等, 在Android 中大多是实现 Parcelable来序列化的
ok 其实自己加入的规则 一般都是说,某某类 不混淆等等
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
-keep class com.xxx.xxx.** { *; }//保持WEB接口不被混淆 此处xxx.xxx是自己接口的包名
-keepattributes Signature
-keepattributes EnclosingMethod
相关文章推荐
- Android---Volley请求 Json解析 xUtils数据存储
- 对线程池的理解
- Android开发笔记之Jni编程第二弹
- Exception raised during rendering: com/android/util/PropertiesMap问题解决
- 【Android死丢丢】Cannot run program "git.exe":CreateProcess error=2
- 在Android 中使用KSOAP2调用WebService
- Android 开发者选项详述
- Android内存泄漏的8种可能
- Android 添加提醒事件
- Android消息机制中ThreadLocal的使用
- Android Scroller实现View弹性滑动完全解析
- 自己动手调试Android源码
- 手把手教你搞懂 Android 反编译
- Xamarin Android布局文件没有智能提示
- Android:资源 id 及资源 id 的动态获取
- Android 手电筒功能实现
- Android MediaRecorder视频录制
- 安卓事件分发机制
- Android Studio官方文档之Android Studio更新IDE和工具篇
- Android项目中常用的工具类集(史上最全整理)