Android 混淆 小结

Posted 许佳佳233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 混淆 小结相关的知识,希望对你有一定的参考价值。

概述

官方文档:
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

如下图:

混淆的映射文件

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

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

build/outputs/mapping/release/mapping.txt

如下图:

以上是关于Android 混淆 小结的主要内容,如果未能解决你的问题,请参考以下文章

Android 混淆 小结

计算机组成原理 王道考研2021 第二章:数据的表示和运算 -- 本章小结常见问题和易混淆知识点

计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 本章小结常见问题和易混淆知识点

AndroidStudio自带的混淆配置

Android-android 怎么实现只混淆自己的代码,而不混淆第3方jar包

求大佬解答android module下混淆的问题