【问题标题】:How to include a proguard configuration in my Android library (AAR)如何在我的 Android 库 (AAR) 中包含 proguard 配置
【发布时间】:2015-07-23 22:47:30
【问题描述】:

根据AAR file spec,Android 库包含一个“proguard.txt”文件。 我的理解是这个文件声明了如何正确地混淆和缩小库。就我而言,我需要保留一些 API 类。

如何在库的 build.gradle 中声明库的 proguard.txt 文件?创建使用我的库的应用程序 (APK) 时会自动读取此文件吗?

我没有在 Android 的 Gradle 插件用户指南中找到此信息。

【问题讨论】:

  • @kevinpelgrims 这是关于为外部库用户分发带有嵌入式 proguard 配置的 AAR 文件,我不希望答案是相同的,即库类不会在多模块构建。不过问题是相似的。

标签: android gradle proguard aar


【解决方案1】:

在 Gradle 文件的默认配置闭包中,使用 consumerProguardFiles 而不是 proguardFiles 指定 Proguard 文件。例如:

defaultConfig {
    consumerProguardFiles 'proguard.txt'
}

【讨论】:

  • consumerProguardFiles 应该在defaultConfig 而不是buildTypes/release 中指定,以便在使用应用程序在调试和发布模式下进行保护时它可以工作(例如,避免65k dex 方法限制)。
  • 如果您使用的是 gradle 实验插件(0.7.2),则会导致此错误:原因:org.gradle.api.internal.ExtensibleDynamicObject。
  • build.gradle 的好例子在这个链接中:github.com/artem-zinnatullin/RxJavaProGuardRules/blob/master/…
【解决方案2】:

ProGuard 人工制品

[ProGuard workflow]

人工制品未缩小,消费者自行解决

库是开源的,但作为库开发人员,您可以提供一个 ProGuard 文件,消费者(应用程序)将根据需求(消费者中的minifyEnabled true)考虑该文件。 consumerProguardFiles 在您的库中build.gradle。它在人工制品中添加proguard.txt 文件(与.pro 相同)

例如,您的库是开源的,应用程序开发人员希望缩小所有内容

android {
    defaultConfig {
        //consumerProguardFiles '<file_path>'
        consumerProguardFiles 'proguard-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }
    //...
}

人工制品被缩小

库是封闭源代码 - 您可以使用下一种可能性:

android {

    buildTypes {
        release {
            minifyEnabled true
            //proguardFiles project(':<project_name>').file('<file_path>')
            proguardFiles 'proguard-rules.pro'
        }
    }
    //...
}

*请注意:

  • minifyEnabled trueproguardFiles project 都应该设置。
  • 如果您使用单个 minifyEnabled true&lt;file_path&gt; 是错误的 - classes.jar 是空的。
  • 如果单个proguardFiles project - 无效

关于library - application 示例的构建过程 - 所有.class 文件将合并到具有.dex 扩展名的单个存档中

【讨论】:

  • “创建库”和“将库作为存档分发”是什么意思?我想在创建库时,它打算用作其他库或应用程序中的依赖项。在那种情况下,它不应该总是 minifyEnabled false,因为这里的“库”模块不知道其他库/应用程序将引用什么函数,并且很难确定要缩小/混淆什么?
猜你喜欢
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2015-02-24
相关资源
最近更新 更多