混淆AAR及其依赖项

3
我正在使用gradle和Android Studio创建一个库,我们称之为库A。我的项目中的库模块A依赖于另一个库模块B。之所以将A和B分开是因为该项目中还有应用程序依赖于库A或B,但不依赖于两者都有。简而言之,在我的代码库中,我不想将这些库模块保持分离。
我想要发布两个AAR文件:
1. A.aar 2. B.aar 我想要混淆A.aar和B.aar中的类。目前,如果我在A的发布构建中开启混淆,它可以正常工作。但是当我在B上开启混淆时,A的构建过程失败了,因为B中的引用符号无法找到。
显然,这两个库的混淆没有同步。这正是我想要的。
或者,我想要生成一个包含所有依赖项的单个混淆AAR,但据我所知,这在gradle/Android Studio中不可能实现。
编辑: 我正在使用Proguard进行混淆。
1个回答

0

根据您的问题,似乎库A依赖于库B。如果依赖关系在公共API上,则只需确保B.aar的公共API未被混淆。

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

  • 将该类作为您的公共API的一部分或者
  • 如果它是单个类,则在库A中复制它或者
  • 如果有一堆类,则可以创建一个新模块,并使库A和B依赖于新模块

如果您想将库A.aar与B.aar一起发布,则可以将其发布为本地或中央Maven存储库。更多详细信息可以在这里找到。

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

您可以按以下方式混淆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中添加以下行:

    dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ...

    }

  5. 不需要解压缩原始aar即可删除classes.jar。7-Zip软件可实现此操作

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接