如何在我的 Android 库中包含混淆器配置 (AAR)

How to include a proguard configuration in my Android library (AAR)

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

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

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

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

defaultConfig {
    consumerProguardFiles 'proguard.txt'
}

ProGuard 人工制品

[ProGuard workflow]

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

库是开源的,但作为库开发人员,您可以提供 ProGuard 文件,消费者(应用程序)将根据需求(minifyEnabled true 消费者)考虑该文件。 consumerProguardFiles 在你的图书馆 build.gradle。它在 artefact

中添加 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<file_path> 是错误的 - classes.jar 是空的。
  • 如果单个 proguardFiles project - 没有效果

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