Android混淆是啥玩意儿?
- 游戏开发
- 2025-08-02 22:45:01

什么是混淆
Android混淆,是伴随着Android系统的流行而产生的一种Android APP保护技术,用于保护APP不被破解和逆向分析。简单的说,就是将原本正常的项目文件,对其类、方法、字段,重新命名a,b,c…之类的字母,达到混淆代码的目的,这样反编译出来,结构乱糟糟的。
混淆的优缺点 优点:代码混淆后阅读性降低,反编译后破译程序难度提高
混淆后字节数减少,减少了应用的体积
缺点:混淆后,测试不充分可能导致某些功能不能使用
混淆只能提高反编译的门槛,并不能完全做到代码安全
如何开启混淆Android自带一个混淆规则文件proguard-android.txt,这个文件在SDK目录下,里面有一些默认自带的规则。
混淆规则基本语法混淆文件采用白名单法,意思是不在白名单里面的都要混淆。
#代表行注释符 -表示一条规则的开始 keep 保留,例如keepattributes:表示保留属性 dont 不要,例如dontwarn:表示不要提示警告 ignore 忽略,例如ignorewarning:表示忽略警告 配置中开启混淆 android{ buildTypes { release { buildConfigField "boolean", "LOG_DEBUG", "false" //不显示log minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.config } } } 测试面对混淆如上文所说混淆的缺点,部分功能混淆后可能不正常
解决方法:一轮测试尽可能的使用混淆包测试;
与开发沟通有新的混淆规则时,重点测试;
回归测试必须使用混淆包测试;
混淆log:混淆应用产生崩溃时,崩溃log也是混淆的
java.lang.NullPointerException: at java.io.File.<init>(File.java:282) at atx.a(SogouSource:497) at awl.a(SogouSource:1117) at com.sogou.expression.getCommitExpressionResult(SogouSource:297) at com.sohu.inputmethod.sogou.MainImeServiceDel.a(SogouSource:3704) at com.sohu.inputmethod..commitExpression(SogouSource:750) at asz$11.a(SogouSource:505) at asz$11.a(SogouSource:484) at aqj$1.onClick(SogouSource:112) at android.view.View.performClick(View.java:6325) at android.view.View$PerformClick.run(View.java:25126) 如何解混淆log:Android SDK 默认提供了混淆解析工具,可分别使用命令行和GUI两种方式解析,工具位置:<SDK目录>\tools\proguard\bin
解析日志时,需要release打包同时生成的mapping.txt文件,此文件每次打包都不一样
retrace.bat: 命令行工具(windows版本是retrace.bat,Mac/Linux上是retrace.sh)
proguardgui.bat: GUI工具
命令行解析
retrace.bat -verbose mapping.txt obfuscated_trace.txtGUI工具
运行proguardgui.bat
从左边的菜单选择“ReTrace”
在上面的Mapping file中选择你的mapping文件,在下面输入框输入要还原的代码。
点击右下方的“ReTrace!”
如此,就可以给开发提供一份完整的崩溃log了
Android混淆是啥玩意儿?由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Android混淆是啥玩意儿?”
下一篇
C#的一些好用的语法糖介绍