《Gradle for Android》核心總結(二)構建Variant

Variant的定義

Variant是構造類型和不一樣的定製類型(product flavor)的組合。構造類型在Android studio中默認有debugrelease;而定製類型(product flavor)在國內通常用於不一樣的分發渠道,例如小米、華爲等,或者免費和付費版。php

下面咱們來構建免費的預覽版、發佈版和付費的預覽版、發佈版應用。java

構建類型

Android studio中構造類型默認有debugrelease。若是不夠,咱們能夠自定義其餘構造類型,這裏咱們建立一個preview的預覽構造類型,代碼以下:android

buildTypes {
        release {
            //是否移除未引用的資源
            minifyEnabled false
            //用於混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        preview{
           //這裏是咱們自定義的預覽版
        }
複製代碼

注:這裏的構造類型和下面的定製類型的代碼都是放在app模塊下的android代碼塊中安全

定製類型

建立免費版和定製版的類型,代碼以下app

flavorDimensions("type")//維度
productFlavors{
        free{
            applicationId "com.easy.free"
            versionCode 1
        }
        pro{
            applicationId "com.easy.pro"
            minSdkVersion 19
            versionCode 1
        }
    }
複製代碼

如上所示,能夠爲不一樣的定製類型設置不一樣的屬性ide

源集

源集是Gradle用來構建apk的資源位置。構造類型、定製類型、Variant都有源集,以下圖所示:gradle

源集

上圖中previewrelease是構造類型的源集,free是定製類型的源集,而proPreviewproReleasefreePreview是Variant類型的源集。ui

建立源集

建立源集就是建立存放資源的文件夾,構造類型和定製類型的源集文件名就是定義的文件名,如previewfree。建立源集有兩種方式:google

  • 手動建立,就是手動建立所需文件夾
  • 經過Android studio建立

經過Android studio建立源集的步驟以下:spa

  1. 打開 Project 窗格,並從窗格頂部的下拉菜單中選擇 Project 視圖
  2. 導航至 MyProject/app/src/
  3. 右鍵點擊 src 目錄並選擇 New > Folder ,在之中選擇要建立的文件
  4. 從 Target Source Set 旁邊的下拉菜單中,選擇構造類型
  5. 點擊 Finish

使用源集

經過源集,咱們能夠在特定的版本使用特定的資源文件,下面以構造類型的源集爲例,其餘的和這個相同:

preview版本中,string.xml中的內容爲:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="default_title">預覽版</string>
</resources>
複製代碼

release版本中,string.xml中的內容爲:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="default_title">發佈版</string>
</resources>
複製代碼

main中的MainActivity中顯示default_title的值:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.text);
        textView.setText(R.string.default_title);

    }
複製代碼

點擊Build Variants視圖,切換不一樣的build類型來構建apk

結果以下圖:

源集的優先級

若是在不一樣的源集中存在衝突的內容,例如在free源集中存在<string name="default_title">免費版</string>,那麼Gradle就會按照以下優先級來使用資源。

注意:源集的Java文件名不能和main中的衝突,不然會構建失敗。

配置簽名

直接在build文件中配置:

android {
    signingConfigs {
        release {//直接把密碼放在這裏是不安全的,這裏是爲了方便
            keyAlias 'test'
            storeFile file('D:/key/test.jks')
            keyPassword '123456789'
            storePassword '123456789'
        }
        preview {
            keyAlias 'test'
            keyPassword '123456'
            storeFile file('D:/key/test.jks')
            storePassword '123456'
        }
    }

     buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        preview{
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    flavorDimensions("type")
    productFlavors {
        free {
            applicationId "com.easy.free"
            signingConfig signingConfigs.preview
        }
        pro {
            applicationId "com.easy.pro"
            signingConfig signingConfigs.preview
        }
    }
...
}
複製代碼

經過Android studio配置:

打開Build->edit build type,如圖:

根據需求進行配置。

參考自:

google官方文檔
AndroidStudio打包全攻略---Gradle-Build Variants構建定製版App Gradle for Android

相關文章
相關標籤/搜索