proguard主要是个代码优化和混淆工具;
使用可以项目的build里面配置release正式版 和debug版 ,minifyEnabled是否开启混淆
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
//在项目中,有些类或者方法可能 希望不混淆(比如这类需被要反射,混淆就不能反射了)
在proguard-rules.pro文件配置
》1类和类里面都不被混淆 有两种方法1 在proguard-rules.pro文件配置
-keep class com.example.administrator.lsn_8_demo.User{ *; }注释-keep+类包名+类名 其他固定写法
2:在需要不被混淆的类使用@keep 注解
》2类名不被混淆,类里面可以混淆
-keep class com.dongnao.proxy.guard.test.Bug
》3类名不被混淆,类里面指定类型方法不混淆 ; *表示所有public static void类型的方法都不混淆,如果*改成指定方法名,就指定这个方法不混淆,其他类型方法还是混淆。
-keep class com.dongnao.proxy.guard.test.Bug{ public static void *(); }
》4指定类里面的变量不混淆,类名不混淆(*表示所有String类型的变量都不混淆。也可以指定某个变量)
-keep class com.example.administrator.lsn_8_demo.User{
java.lang.String * ;
}
》5 保留所有的本地native方法不被混淆 ;如果想指定某个类的navtive方法就把*替换成类包名+类名
-keepclasseswithmembernames class * {
native <methods>;
}
》6类名混淆和类里面都混淆
-keepclassmembers class com.example.administrator.lsn_8_demo.User
》7类名混淆,指定类里面变量不混淆
-keepclassmembers class com.example.administrator.lsn_8_demo.User{ java.lang.String name ; }
//注意如果你类里面的方法没有使用 proguard是不会打包到dex文件里面的,
变量在构造方法没有初始化,或者使用也不会打包dex文件里面。
判断是否混淆 一般以这个类或者方法变量 混淆了后 对使用是否有影响,如果有就不混淆,没有就混淆