男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述android 混淆基本知识相关的知识,希望能为你提供帮助。
官网介绍:https://www.guardsquare.com/en/proguard/manual/introduction
android 开发文档:https://developer.android.com/studio/build/shrink-code.html
1.混淆的基本原理
android平台的混淆原理简单来说就是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c….这样代码结构没有变化,还可以运行得到一样的结果,并且就算代码被反编译出来,别人很难弄懂代码的架构和具体意思。
2.混淆步骤
混淆过程:
文章图片
- 压缩(Shrink):侦测并移除代码中无用的类、字段、方法、和特性(Attribute)。
- 优化(OPtimize):对字节码进行优化,移除无用指令。
- 混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名。
- 预检(Preveirfy): 在java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。。
a.打开
minifyEnabled为true
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(\'proguard-android.txt\'), \'proguard-rules.pro\'
}
}
b.android studio 中自定义文件
sdk中tool里面proguard-android.txt
在文件 工程\\app\\proguard-rules.pro中自定义。
不混淆 ScrollView类中自定义的public print函数
-keepclassmembers class com.example.zcx.democoderjoy.ScrollViewActi {
public *;
}
效果:增加之前反编译:
文章图片
家之后效果:
文章图片
发现增加了print函数,并没有被混淆。
常见的参数:
-keep 指定类和类成员(变量和方法)不被混淆。
-keepclassmembers 指定类成员不被混淆(就是-keep的缩小版,不管类名了)。
-keepclasseswithmembers 指定类和类成员不被混淆,前提是指定的类成员存在
-keep
-keep public class * extends android.support.v4.**
-keepclassmembers
-keepclassmembers class * extends android.app.Activity{
public void *(android.view.View);
}
【android 混淆基本知识】
c.每次构建时 ProGuard 都会输出下列文件:
dump.txt
- 说明 APK 中所有类文件的内部结构。
mapping.txt
- 提供原始与混淆过的类、方法和字段名称之间的转换。
seeds.txt
- 列出未进行混淆的类和成员。
usage.txt
- 列出从 APK 移除的代码。
<
module-name>
/build/outputs/mapping/release/
中3.混淆优缺点
混淆的优点主要两个:1.优化删除无用代码,减少apk的体积。2.混淆代码让其反编译之后,无法理解具体内容。
缺点:调试不方便(可以使用mapping.txt),测试不充分可能导致部分功能不能使用。
4.通用使用下面这些通配符来匹配:
1) % :匹配任何原始类型,如 boolean 、 int 等,但不包括 void ;
2) ? :匹配一个任意字符,不包括句号;
3) * :匹配任意个任意字符,不包括句号;
4) ** :匹配任意个任意字符,包括句号;
5) *** :匹配任意类型,包括原始类型和非原始类型,数组类型和非数组类型;
6) … :匹配任何数目个任何类型的参数。
参考链接:http://www.chenglong.ren/2016/10/21/android%E4%B8%AD%E6%B7%B7%E6%B7%86%E6%8A%80%E6%9C%AF%E6%80%BB%E7%BB%93/
推荐阅读
- 在程序中用new ClassPathXmlApplicationContext()的注意事项
- Android更新带进度条的通知栏
- [LeetCode] 407. Trapping Rain Water II
- android中怎么将桌面较长的图标名称显示完整
- What happens when a SQL Query runs?
- Android学习笔记之ProgressBar案例分析
- Android之怎样设置文本改变监听
- 移动终端软件开发2017-2018秋学期教材《Android移动应用设计与开发(第2版)——基于Android Studio开发环境》
- android对话框(Dialog)的使用方法