Android打包之配置構建變體

weixin_34378969發表於2018-03-20

宣告依賴項

下面的示例可以在 app/ 模組的 build.gradle 檔案中宣告三種不同型別的直接依賴項:

android {...}
...
dependencies {
    // The 'compile' configuration tells Gradle to add the dependency to the
    // compilation classpath and include it in the final package.

    // Dependency on the "mylibrary" module from this project
    compile project(":mylibrary")

    // Remote binary dependency
    compile 'com.android.support:appcompat-v7:27.1.0'

    // Local binary dependency
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

下面逐一介紹了每種直接依賴項。

  • 模組依賴項

    compile project(':mylibrary') 行宣告瞭一個名為“mylibrary”的本地 Android 庫模組作為依賴項,並要求構建系統在構建應用時編譯幷包含該本地模組。

  • 遠端二進位制依賴項

    compile 'com.android.support:appcompat-v7:27.1.0' 行會通過指定其 JCenter 座標,針對 Android 支援庫的 27.1.0 版本宣告一個依賴項。預設情況下,Android Studio 會將專案配置為使用頂級構建檔案中的 JCenter 儲存區。當您將專案與構建配置檔案同步時,Gradle 會自動從 JCenter 中抽取依賴項。或者,您也可以通過使用 SDK 管理器下載和安裝特定的依賴項。

  • 本地二進位制依賴項

    compile fileTree(dir: 'libs', include: ['*.jar']) 行告訴構建系統在編譯類路徑和最終的應用軟體包中包含 app/libs/ 目錄內的任何 JAR 檔案。如果您有模組需要本地二進位制依賴項,請將這些依賴項的 JAR 檔案複製到專案內部的 /libs 中。

配置依賴項

您可以使用特定的配置關鍵字告訴 Gradle 如何以及何時使用某個依賴項,例如前述示例中的 compile 關鍵字。下面介紹了您可以用來配置依賴項的一些關鍵字:

  • compile

    指定編譯時依賴項。Gradle 將此配置的依賴項新增到類路徑和應用的 APK。這是預設配置。

  • apk

    指定 Gradle 需要將其與應用的 APK 一起打包的僅執行時依賴項。您可以將此配置與 JAR 二進位制依賴項一起使用,而不能與其他庫模組依賴項或 AAR 二進位制依賴項一起使用。

  • provided

    指定 Gradle 與應用的 APK 一起打包的編譯時依賴項。如果執行時無需此依賴項,這將有助於縮減 APK 的大小。您可以將此配置與 JAR 二進位制依賴項一起使用,而不能與其他庫模組依賴項或 AAR 二進位制依賴項一起使用。

此外,您可以通過將構建變體或測試源集的名稱應用於配置關鍵字,為特定的構建變體或測試源集配置依賴項,如下例所示。

dependencies {
    ...
    // Adds specific library module dependencies as compile time dependencies
    // to the fullRelease and fullDebug build variants.
    fullReleaseCompile project(path: ':library', configuration: 'release')
    fullDebugCompile project(path: ':library', configuration: 'debug')

    // Adds a compile time dependency for local tests.
    testCompile 'junit:junit:4.12'

    // Adds a compile time dependency for the test APK.
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}

配置簽署設定


除非您為釋出構建顯式定義簽署配置,否則,Gradle 不會簽署釋出構建的 APK。您可以輕鬆建立釋出金鑰並使用 Android Studio 簽署釋出構建型別

要使用 Gradle 構建配置為您的釋出構建型別手動配置簽署配置:

  1. 建立金鑰庫。金鑰庫是一個二進位制檔案,它包含一組私鑰。您必須將金鑰庫存放在安全可靠的地方。

  2. 建立私鑰。私鑰代表將通過應用識別的實體,如某個人或某家公司。

  3. 將簽署配置新增到模組級 build.gradle 檔案中:

    ...
    android {
        ...
        defaultConfig {...}
        signingConfigs {
            release {
                storeFile file("myreleasekey.keystore")
                storePassword "password"
                keyAlias "MyReleaseKey"
                keyPassword "password"
            }
        }
        buildTypes {
            release {
                ...
                signingConfig signingConfigs.release
            }
        }
    }
    

要生成簽署的 APK,請從選單欄中選擇 Build > Generate Signed APK。現在,app/build/apk/app-release.apk 中的軟體包已使用您的釋出金鑰進行簽署。

:將釋出金鑰和金鑰庫的密碼放在構建檔案中並不安全。作為替代方案,您可以將此構建檔案配置為通過環境變數獲取這些密碼,或讓構建流程提示您輸入這些密碼。

要通過環境變數獲取這些密碼:

storePassword System.getenv("KSTOREPWD")
keyPassword System.getenv("KEYPWD")

要讓構建流程在您要從命令列呼叫此構建時提示您輸入這些密碼:

storePassword System.console().readLine("\nKeystore password: ")
keyPassword System.console().readLine("\nKey password: ")

在完成此流程後,您可以分發您的應用並在 Google Play 上釋出它。

警告:將金鑰庫和私鑰存放在安全可靠的地方,並確保您為其建立了安全的備份。如果您將應用釋出到 Google Play,隨後丟失了您用於簽署應用的金鑰,那麼,您將無法向您的應用釋出任何更新,因為您必須始終使用相同的金鑰簽署應用的所有版本。

參考文件:配置構建變體

相關文章