簡體   English   中英

如何在我的 Android 庫 (AAR) 中包含 proguard 配置

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

根據AAR 文件規范,Android 庫包含一個“proguard.txt”文件。 我的理解是這個文件聲明了如何正確地混淆和縮小庫。 就我而言,我需要保留一些 API 類。

如何在庫的 build.gradle 中聲明庫的 proguard.txt 文件? 創建使用我的庫的應用程序 (APK) 時會自動讀取此文件嗎?

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

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

defaultConfig {
    consumerProguardFiles 'proguard.txt'
}

ProGuard 人工制品

[ProGuard 工作流程]

人工制品沒有縮小,消費者解決它

庫是開源的,但作為庫開發人員,您可以提供一個 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<file_path>是錯誤的 - classes.jar為空。
  • 如果單個proguardFiles project - 沒有效果

至於以library - application為例的構建過程library - application - 所有.class文件將合並為具有.dex擴展名的單個存檔

作為@Eric Lafortune中提到的回答 -通常不應啟用ProGuard的[關於]在庫項目。 在這種情況下,您應該提供供consumerProguardFiles使用的consumerProguardFiles。

android {
    defaultConfig {
        consumerProguardFiles 'proguard-rules.pro'
    }

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

但是,如果由於例如要分發庫而應該啟用它,則可以啟用這種可能性:

android {

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles 'proguard-rules.pro'
        }
    }
    //...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM