Mess库的分析
作用
用法
在project的build.gradle文件里加上:
dependencies {
...
classpath 'me.ele:mess-plugin:version code'
}
在app模块的build.gradle文件里加上:
apply plugin: 'me.ele.mess'
同时,如果需要对某些文件,可以加上对用的ignore:
mess {
ignoreProguard 'com.android.support:recyclerview-v7'
}
实现原理
它的核心思想就是去掉aapt_rules.txt
里的keep,从而保证都被混淆。
1、hook transformClassesAndResourcesWithProguardFor${variant.name.capitalize()}
在这里完成gradle task的拦截,也是mess混淆的入口。
2、hook ProcessAndroidResources
这里只是清空掉aapt_rules.txt
文件的内容(aapt_rules.txt
保存的是需要keep住的对象)。这样才能保证文件可以被混淆掉。
3、处理依赖库的proguard.txt文件
这一步就是删除依赖库中所保护的内容,具体proguard.txt文件位于app目录下/build/intermediates/exploded-aar/依赖库maven名/proguard.txt。
Mess中直接将proguard.txt文件名最后加上~,如proguard.txt~,在linux中表示备份,以便之后文件的恢复。