将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中。

android给arr包添加混淆 aar 混淆_AGPBIkinderror


如果主工程开启混淆,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.**

大家知道有这事就好了,遇见不要慌,慢慢排查,也很多就可以解决了。

二、混淆关系

  1. 主模块的混淆开关配置会直接影响到子模块
    也就是说如果你的主模块开启的混淆,就算你的子模块关闭混淆开关,最终子模块还是会被混淆的;主模块关闭混淆,就算你的子模块开启混淆开关,也不会混淆。
    这里的主模块包含App,也包含主Lib,子模块指的是moudle
  2. 子模块配置混淆仅需consumerProguardFiles
  3. 主模块不能仅配置consumerProguardFiles
  4. 主模块是APP的时候,不需配置consumerProguardFiles,混淆也会打进包
  5. 主模块是AAR的时候,配置consumerProguardFiles,混淆才会打进包
  6. 如果主模块是APP,并且组入了AAR。AAR内部携带混淆文件,就无须APP帮助AAR配置混淆,最终做成APK包的时候,混淆文件会合一,APP和AAR的代码受最终混淆文件管控(最终混淆文件含APP和AAR两个混淆文件的内容)。
  7. 如果主模块是APP,并且组入了AAR。AAR不包含混淆文件,那么混淆文件需要APP配置。

总结

没了,持续更新

参考地址

Android aar中增加独立的混淆配置:https://www.jianshu.com/p/a8614ff60647