Android混淆

967 阅读1分钟

##一、环境配置

buildTypes {
    
        release {
            // 混淆
            minifyEnabled true
            // Zipalign优化
            zipAlignEnabled true
            // 移除无用的resource文件
            shrinkResources true
            // 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
productFlavors {
        dev {
            minSdkVersion 16
        }
        prod {
            minSdkVersion 16
        }
    }

####2 生成proguard-rules.pro混淆文件

混淆配置可以用混淆的插件生成,记得加上一句:

-ignorewarnings 

##二、混淆调试
混淆之后,会给我们输出一些文件,android studio 在目录app/build/outputs/mapping下有以下文件:

1 dump.txt 描述apk文件中所有类文件间的内部结构。

2 mapping.txt 列出了原始的类,方法,和字段名与混淆后代码之间的映射,常用。

3 seeds.txt 列出了未被混淆的类和成员

4 usage.txt 列出了从apk中删除的代码

可以通过mapping.txt,通过映射关系找到对应的类,方法,字段来修复bug。这里需要利用sdk给我们提供的retrace脚本,可以将一个被混淆过的堆栈跟踪信息还原成一个可读的信息,window下时retrace.bat,linux和mac是retrace.sh,该脚本的位置在*/sdk/tools/proguard/bin/下。语法为:

例如:

./retrace.sh -verbose mapping.txt a.txt

##三、注意事项
1 使用gson,fastjsoon时,bean类不需要混淆,否则会出错,为此还特意请教了大神,哈哈。

2 如果混淆的时候会失败,检查下是否加入了freeline,这个库好像会影响到混淆

3 -ignorewarnings ,这句话是去除apk运行时产生的警告导致程序异常终止,这是代码混淆造成的。