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

时间:2017-06-04 12:26:38

标签: java android proguard android-proguard

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

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

背景 我有以下产品设置:

Android Studio项目   - 图书馆模块      - (子)模块核心      - (子)模块A.      - (子)模块B.      - (子)模块C. - Sample App模块 - ......其他模块

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

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

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

这里需要的是:

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

每个模块的正常构建过程在哪里: - 编译 - >做所有事情。混淆 - >封装

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

感谢!!!

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我写了this post on my personal website

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

您可以配置此插件以打包要为其启用proguard模糊处理的特定buildType

答案 1 :(得分:1)

  

问题:我没有看到如何使用简单的gradle   组态。这里需要自定义构建系统,除非有   任何已知的解决方案?

所以,你正在寻找一个“自定义构建系统”,因为你不知道如何在gradle中做到这一点。但如果这可以在gradle中解决,你想使用它,对吗?

要使用gradle编写库,您有两个选择:

  • 为每个库独立运行Proguard :在每个模块中,设置minifyEnabled true,然后使用proguardFiles功能设置 proguard.txt 文件
  • 在您的应用模块中运行Proguard :在每个模块中,设置minifyEnabled false,然后使用consumerProguardFiles功能传递 proguard.txt 文件从每个库到主模块。

以下是代码示例的详细解释,因此我不打算复制答案:https://stackoverflow.com/a/42758629/1516973