概述

官方文档:
https://developer.android.com/studio/build/shrink-code?hl=zh-cn

不管是独立开发app还是开发aar,混淆都是必须了解的一个模块。

混淆作用

  1. 缩小包大小
  2. 使关键代码对外不可读

开启混淆

  • 将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包名路径下的内容都不会被混淆,因此你的整个项目都不会被混淆。

解决方式

  1. 更改第三方依赖的混淆规则
  2. 更改当前项目的包名

混淆规则的排查

一旦碰到混淆的结果与预期不符的情况,需要对项目中所有混淆内容汇总后的文件进行排查。
如果是release渠道下的混淆汇总文件,在这个路径下:

build/outputs/mapping/release/configuration.txt

如下图:

android maven 混淆 android aar混淆_混淆

混淆的映射文件

如果有数据收集平台的话,项目混淆后,收到的调用方法栈也会是混淆的,会难以排查问题。
通过映射文件可以找到混淆后的内容对应的实际内容。
“通过映射文件转化成真实调用栈”的过程一般不是人肉来做的,比如bugly平台就可以直接上传mapping文件来自动实现。

项目混淆的映射文件在这个路径下:

build/outputs/mapping/release/mapping.txt

如下图:

android maven 混淆 android aar混淆_android studio_02