混淆AAR及其依赖项

时间:2015-05-22 07:29:05

标签: android android-studio dependencies obfuscation aar

我正在使用gradle和Android Studio创建一个库,我们称之为库 A 。我项目中的库模块A依赖于不同的库模块 B 。 A和B分开的原因是此项目中的应用程序还依赖于库A B,但不是两者都有。简而言之,我不想在我的代码库中将这些库模块分开。

我想提供两个AAR:

  • A.aar
  • B.aar

我想混淆A.aar和B.aar中的类。目前,如果我在A的发布版本上打开混淆,它可以工作。但是一旦我在B上打开混淆,A的构建过程就会失败,因为找不到B中引用的符号。

显然,这两个库的混淆是不同步的。这是我想要的。

或者我想生成一个包含所有依赖项的单个混淆AAR,但据我所知,gradle / Andorid Studio无法实现这一点。

编辑: 我正在使用proguard进行混淆。

1 个答案:

答案 0 :(得分:0)

根据您的问题,库A似乎依赖于库B.如果依赖于公共API,您只需要确保B.aar的公共API没有被混淆。

如果您依赖内部代码,则可以:

  • 将该课程作为公开API
  • 的一部分
  • 如果是单个班级,则在库A OR
  • 中复制它
  • 如果有很多课程,那么你可以创建一个新模块并制作图书馆A& B取决于新模块

如果要将A.aar库与A.aar一起作为依赖项发布,则可以将其作为本地或中央maven存储库发布。可以找到更多详细信息here

如果您决定将其设为本地存储库,则需要压缩存储库并将其提供给您的用户。所有依赖项都将得到适当处理

您可以按如下方式对B.aar中的类进行模糊处理:

  1. 构建和发布库B
  2. 在同一个存储库中发布库A并导航生成的存储库以找到B.aar。复制B.aar和解压缩aar副本,方法是将.aar扩展名更改为.zip并使用zip / unzip软件或直接使用7-Zip软件
  3. 从包中复制classes.jar并将其粘贴到库A的libs /目录下。记住重命名jar文件
  4. 在build.gradle中加入以下行

    依赖项{

    实现fileTree(dir:'libs',包括:['* .jar'])
      ......

    }

  5. 从原始aar中删除classes.jar而不解压缩它。 7-Zip软件能够做到这一点

  6. 模糊库A. B.aar的类也将被混淆。