将APP做成AAR
一、APP打包成AAR,提供给其他应用使用:
二、我终于把AAR混淆完了
混淆AAR
- 将APP做成AAR
- 前言
- 一、干货,如何混淆AAR?
- 1.将混淆配置在主工程内部
- 2.将混淆配置在AAR内部
- 3.有一些坑注意
- 二、混淆关系
- 总结
- 参考地址
前言
在将App成功转换成AAR后,又有新需求,那就是将AAR混淆,而且最好是将混淆打包在AAR内部。
一、干货,如何混淆AAR?
通过混淆文件存在的位置,把混淆分为两种。我们称用AAR的工程为主工程。
1.将混淆配置在主工程内部
AAR内部,主Lib配置:
release {
minifyEnabled true
multiDexEnabled true
zipAlignEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
主工程内部配置:
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
这种混淆方式,如果AAR配置混淆,那么主工程必须混淆才可以运行,否则会有错误。
2.将混淆配置在AAR内部
AAR内部,主Lib配置:
release {
minifyEnabled true
multiDexEnabled true
zipAlignEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
defaultConfig {
// ...
consumerProguardFiles 'consumer-rules.pro'
}
这种混淆方式,AAR会将混淆文件打在包内。主工程是否开启混淆,都可以运行。
如果我们的代码有多个moudle,其他moudle也可以配置(并且不需要 proguardFiles …):
defaultConfig {
// ...
consumerProguardFiles 'consumer-rules.pro'
}
这样,主lib有自己的混淆文件,其他moudle也有自己的混淆文件,方便维护。
不论是把混淆都配置在主Lib还是分为主Lib和moudle配置混淆,最终混淆会合并都会被打进AAR中。
如果主工程开启混淆,AAR的混淆文件会再和主工程的混淆文件相合并,最终打成新的混淆文件。
注意:consumerProguardFiles 'consumer-rules.pro’
不能在主模块中单独使用,必须配合proguardFiles getDefaultProguardFile(‘proguard-android.txt’), 'proguard-rules.pro’
使用,否则混淆出错。
3.有一些坑注意
有一些混淆代码在你是App应用的时候使用,没有问题。但是这不能说明配置在AAR内部就好用。有一些混淆不能配置在AAR中,具体原因我也没有查证,这个问题真的是通过一行又一行混淆排查的。
异常:
AGPBI: {"kind":"error","text":"Cannot constrain type: @Nullable (@Nullable (
解决:
#-dontshrink
#-keep class org.bouncycastle.**{*;}
#-dontwarn org.bouncycastle.**
大家知道有这事就好了,遇见不要慌,慢慢排查,也很多就可以解决了。
二、混淆关系
- 主模块的混淆开关配置会直接影响到子模块
也就是说如果你的主模块开启的混淆,就算你的子模块关闭混淆开关,最终子模块还是会被混淆的;主模块关闭混淆,就算你的子模块开启混淆开关,也不会混淆。
这里的主模块包含App,也包含主Lib,子模块指的是moudle - 子模块配置混淆仅需
consumerProguardFiles
- 主模块不能仅配置
consumerProguardFiles
- 主模块是APP的时候,不需配置
consumerProguardFiles
,混淆也会打进包 - 主模块是AAR的时候,配置
consumerProguardFiles
,混淆才会打进包 - 如果主模块是APP,并且组入了AAR。AAR内部携带混淆文件,就无须APP帮助AAR配置混淆,最终做成APK包的时候,混淆文件会合一,APP和AAR的代码受最终混淆文件管控(最终混淆文件含APP和AAR两个混淆文件的内容)。
- 如果主模块是APP,并且组入了AAR。AAR不包含混淆文件,那么混淆文件需要APP配置。
总结
没了,持续更新
参考地址
Android aar中增加独立的混淆配置:https://www.jianshu.com/p/a8614ff60647