索引
在网络世界中,加密和破解也算是一个老生常谈的话题了,Android中也不例外,对于Android应用的加密,最首先也是最基础的就是代码混淆了
1 Proguard
1.1 Proguard介绍
对于,Google官方有一段话的解释
ProGuard 会检测和移除封装应用中未使用的类、字段、方法和属性,包括自带代码库中的未使用项。ProGuard 还可优化字节码,移除未使用的代码指令,以及用短名称混淆其余的类、字段和方法。混淆过的代码可令您的 APK 难以被逆向工程
简单来说,ProGuard对Java代码有压缩、优化、混淆,和预校验这四个方面的作用
- 压缩:用于检测和删除没有使用的类,字段,方法和属性。
- 优化:对字节码进行优化,并且移除无用指令
- 混淆:使用a,b,c等无意义的名称,对类,字段和方法进行重命名
- 预校验:主要是在Java平台上对处理后的代码进行预校验
1.2 Proguard常用配置
- -keep 指定类和类成员(变量和方法)不被混淆
例如:
//保护类名不被混淆
-keep class com.tianyl.DemoActivity
//保护public static void无参的函数不被混淆
-keep class com.tianyl.DemoActivity{
public static void *();
}
//保护所有
-keep class com.tianyl.DemoActivity{ *;
}
- -keepclassmembers 指定类成员不被混淆
例如:
-keepclassmembers class com.tianyl.DemoActivity
- -keepclasseswithmembers 指定类和类成员不被混淆
//保护类名,但是没指定成员,所以函数名被混淆
-keepclasseswithmembers class com.tianyl.DemoActivity
//全被混淆了,如果不存在native函数,则这条语句等于无效
-keepclasseswithmembers class com.tianyl.DemoActivity{ native <methods>;}
当然Proguard常用的配置还有很多,具体的可以根据官方文档(https://www.guardsquare.com/en/products/proguard/manual/usage#keepoptions)或者在需要时使用搜索引擎查找
1.3 Proguard使用时的一些注意事项
因为Proguard会混淆类名,所以如果我们在使用三方库的时候,需要特别注意是否能够被混淆,而且由于Proguard还会移除没有用到的类(如果开启了此功能),所以对于那些没有直接使用到的类,例如通过反射使用时,特别要注意不要在编译时被Proguard删除,不然的话在应用运行时就会发生异常甚至崩溃
网友评论