在多模块项目上运行Proguard作为"单件"

Kir*_*l K 7 java android proguard android-proguard

TLDR:如何将proguard映射传递给javac以针对混淆的库进行编译?

这很长,但我不知道如何缩短它:

背景: 我有以下产品设置:

Android Studio项目 - 库模块 - (子)模块核心 - (子)模块A - (子)模块B - (子)模块C - 示例应用程序模块 - ...其他模块

每个库子模块A,B,C在Core中引用类,但A,B,C在它们之间独立.概念上类似于Play服务,其中用户只能拥有代码和所需的子模块.每个库子模块都有外部API,但也有许多内部类.目标是能够将Core,A,B,C作为独立的aar-s进行分发.

目标:将 所有子模块混淆在一起,只留下公开的API,但是以混淆/优化的形式单独打包和分发它们.

问题: 我没有看到如何使用直接的gradle配置.这里需要自定义构建系统,除非有任何已知的解决方案?

这里需要的是:

  • Java-将所有子模块编译在一起
  • Proguard - 将它们混淆在一起
  • 分别运行构建过程的所有其余部分

每个模块的正常构建过程在哪里: - 编译 - >执行所有操作.混淆 - >包

在Core之后编译第一个子模块时,直接设置失败.如果只能将Proguard mapping.txt作为Java编译器的输入传递......但我找不到这样的选项.有任何想法吗?

谢谢!!!

rol*_*lan 5

问题:我不知道如何通过简单的 gradle 配置来使用它。这里需要自定义构建系统,除非有任何已知的解决方案?

因此,您正在寻找“自定义构建系统”,因为您不知道如何在 gradle 中执行此操作。但如果这个问题可以在 gradle 中解决,你会想使用它,对吗?

要使用 gradle 保护库,您有 2 个选择:

  • 独立为每个库运行 Proguard:在每个模块中,设置minifyEnabled true并使用proguardFiles函数来设置您的proguard.txt文件。
  • 仅在您的应用程序模块中运行 Proguard:在每个模块中,设置minifyEnabled false并使用函数将proguard.txtconsumerProguardFiles文件从每个库传递到主模块。

这里用代码示例详细解释了,所以我不打算复制答案:/sf/answers/2993104061/


Ven*_*r85 2

我也遇到了同样的问题,我在我的个人网站上写了这篇文章

本质上,您正在寻找的是maven-publishGradle 插件,它允许您将库模块打包到 AAR 并方便地管理和分发它们,同时保留有关其依赖项的信息。

您可以配置此插件来打包buildType您将启用混淆器的特定插件。

  • 如果您希望混淆模块,则必须向每个模块添加一个 proguard 指令以保留所有公共类: -keep public class * { public protected *; } (4认同)