proguar在Android混淆中的用法
程序员文章站
2022-05-26 22:46:14
混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比較小的.apk文件,该文件比較难进行逆向project。因此,当你的...
混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比較小的.apk文件,该文件比較难进行逆向project。因此,当你的应用程序对安全敏感(要求高),比如当你授权应用程序的时候,混淆器是一种重要的保护手段。
proguard 基本语法
// 保留native方法的方法的方法名和包含native方法的类的类名不变 -keepclasseswithmembernames class { native<methods>; } // 保留继承与view的类中的set*和get*方法 -keepclassmembers public class * extends android.view.view { void set*(***); *** get*(); } // 保留继承与activity的类中以view为参数的方法 -keepclassmembers class * extends android.app.activity { public void *(android.view.view); } // 保留实现了parcelable 接口的类的类名以及实现了 parcelanle$creator 的内部类 -keep class * implemenets android.os.parcelable { public static final android.os.parcelanle$creator *; } // 保留 r$*类中静态字段的字段名 -keep class **.r$* { public static <fields>; }
也就是
类名不混淆 用keep
方法名不混淆 用keepclassmembers 或者 keepclasseswithmembernames(后者用于native不混淆)
不混淆的情况:
1 jni 调用java方法
2 四大组件
3 r文件
4 某些通过反射调用的类或方法
5 第三jar包(一般情况下不要混淆)
混淆去掉log
-assumenosideeffects class android.util.log { public static boolean isloggable(java.lang.string,int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); }
assumenosideeffects,proguard 配置文件里的参数。assume no side effects;假定无效;该属性也就是标识无效代码。我们就是通过这个参数来让proguard删除日志代码。
推荐阅读
-
在Android中访问WebService接口的方法
-
Android笔记之:在ScrollView中嵌套ListView的方法
-
android如何获取view在布局中的高度与宽度详解
-
Android学习之Intent中显示意图和隐式意图的用法实例分析
-
Android开发中的重力传感器用法实例详解
-
Android 在viewPager中双指缩放图片双击缩放图片单指拖拽图片的实现思路
-
Android在高jar包版本的工程中修改方法
-
Android 在子线程中更新UI的几种方法示例
-
java,Android:在eclipse中的快捷键(经典收藏)
-
详解Android TableLayout中stretchColumns、shrinkColumns的用法