Android 混淆 小结
Posted 许佳佳233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 混淆 小结相关的知识,希望对你有一定的参考价值。
概述
官方文档:
https://developer.android.com/studio/build/shrink-code?hl=zh-cn
不管是独立开发app还是开发aar,混淆都是必须了解的一个模块。
混淆作用
- 缩小包大小
- 使关键代码对外不可读
开启混淆
- 将minifyEnabled设置为true,就可以打开混淆
- proguard-android-optimize.txt ,是android预设的混淆规则,包含了大多数常用的混淆规则,比如activity的名字不混淆。
- proguard-rules.pro ,是本地的混淆文件,可以在其中自定义项目的混淆规则
android
buildTypes
release
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'),
'proguard-rules.pro'
...
第三方库的混淆
混淆的规则是累加的,如果依赖的aar库拥有自己的混淆规则,那么你的整个项目都会引用这些规则。
注意
如果你项目的包名和第三方库规则中keep的包名一致,意味着即使你在自己的混淆规则中没有添加keep操作,那么这些内容也不会被混淆。
例子
比如在第三方依赖中有如下内容:
-keep class com.test.**
然后你的包名是 “coms.test.project”。
那么由于第三方库已经设置了com.test包名路径下的内容都不会被混淆,因此你的整个项目都不会被混淆。
解决方式
- 更改第三方依赖的混淆规则
- 更改当前项目的包名
混淆规则的排查
一旦碰到混淆的结果与预期不符的情况,需要对项目中所有混淆内容汇总后的文件进行排查。
如果是release渠道下的混淆汇总文件,在这个路径下:
build/outputs/mapping/release/configuration.txt
如下图:
混淆的映射文件
如果有数据收集平台的话,项目混淆后,收到的调用方法栈也会是混淆的,会难以排查问题。
通过映射文件可以找到混淆后的内容对应的实际内容。
“通过映射文件转化成真实调用栈”的过程一般不是人肉来做的,比如bugly平台就可以直接上传mapping文件来自动实现。
项目混淆的映射文件在这个路径下:
build/outputs/mapping/release/mapping.txt
如下图:
以上是关于Android 混淆 小结的主要内容,如果未能解决你的问题,请参考以下文章
计算机组成原理 王道考研2021 第二章:数据的表示和运算 -- 本章小结常见问题和易混淆知识点
计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 本章小结常见问题和易混淆知识点