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


不混淆某个类和成员变量:

  1. -keep class com.clock.**{*;}//不混淆所有com.clock包下的类和类中的所有成员变量,**可以换成具体类名,*可以换成具体的字段,可参照Serialzable的混淆  

不混淆某个类:

  1. -keep class com.czy.**//不混淆所有com.czy包下的类,** 换成具体的类名则表示不混淆某个具体的类  

有用到WEBView的JS调用接口,需加入如下规则: 



  1. -keepclassmembers class fqcn.of.javascript.interface.for.webview {  
  2.    public *;  
  3. }  
  4. -keep class com.xxx.xxx.** { *; }//保持WEB接口不被混淆 此处xxx.xxx是自己接口的包名  



如果用到了反射需要加入 :


  1. -keepattributes Signature  
  2. -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 其实自己加入的规则 一般都是说,某某类 不混淆等等


  1. -keepclassmembers class fqcn.of.javascript.interface.for.webview {  
  2.    public *;  
  3. }  
  4. -keep class com.xxx.xxx.** { *; }//保持WEB接口不被混淆 此处xxx.xxx是自己接口的包名  
  1. -keepattributes Signature  
  2. -keepattributes EnclosingMethod  

更多相关文章

  1. Android支付设计——集成支付宝接口
  2. Android中Fragment通过接口回调传递数据到Activity中
  3. Android用Proguard混淆代码遇到的问题
  4. android 安全设置相关at流程分析
  5. Android快速搞定代码混淆
  6. Android(安卓)开发游戏中的SurfaceView,Callback,SurfaceHolder
  7. setonClickListener()的解释
  8. Renderer (专门用于渲染3D 的接口 Renderer )()
  9. Kotlin Parameter specified as non-null is null

随机推荐

  1. 如何使用一个锚标记打开多个链接
  2. 我正在尝试使用带有post方法的AJAX将用户
  3. 如何只用HTML和CSS构建一个特殊的多边形(
  4. 【HTML】让标签文本自动换行
  5. 在Makefile.am中添加make install 的安装
  6. 如何在网站中找到未使用的图像和CSS样式?
  7. 180225-第一百零七天【html链接,头部】
  8. HTML5之canvas标签(上)
  9. HTML5新特性之文件和二进制数据的…
  10. 在c#中获取html元素的实际边距