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配置。这里需要自定义构建系统,除非有任何已知的解决方案吗?
这里需要的是:
每个模块的正常构建过程在哪里: - 编译 - >做所有事情。混淆 - >封装
直接向前设置在Core之后编译第一个子模块时失败。如果只能将Proguard mapping.txt作为Java编译器的输入传递...但我找不到这样的选项。有什么想法吗?
感谢!!!
答案 0 :(得分:2)
我遇到了同样的问题,我写了this post on my personal website。
从本质上讲,您正在寻找的是maven-publish
Gradle插件,它允许您将库模块打包到AAR并方便地管理和分发它们,同时保留有关其依赖关系的信息。
您可以配置此插件以打包要为其启用proguard模糊处理的特定buildType
。
答案 1 :(得分:1)
问题:我没有看到如何使用简单的gradle 组态。这里需要自定义构建系统,除非有 任何已知的解决方案?
所以,你正在寻找一个“自定义构建系统”,因为你不知道如何在gradle中做到这一点。但如果这可以在gradle中解决,你想使用它,对吗?
要使用gradle编写库,您有两个选择:
minifyEnabled true
,然后使用proguardFiles
功能设置 proguard.txt 文件minifyEnabled false
,然后使用consumerProguardFiles
功能传递 proguard.txt 文件从每个库到主模块。以下是代码示例的详细解释,因此我不打算复制答案:https://stackoverflow.com/a/42758629/1516973