Variant
是構造類型和不一樣的定製類型(product flavor)的組合。構造類型在Android studio
中默認有debug
和release
;而定製類型(product flavor)在國內通常用於不一樣的分發渠道,例如小米、華爲等,或者免費和付費版。php
下面咱們來構建免費的預覽版、發佈版和付費的預覽版、發佈版應用。java
在Android studio
中構造類型默認有debug
和release
。若是不夠,咱們能夠自定義其餘構造類型,這裏咱們建立一個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
上圖中preview
、release
是構造類型的源集,free
是定製類型的源集,而proPreview
、proRelease
、freePreview
是Variant類型的源集。ui
建立源集就是建立存放資源的文件夾,構造類型和定製類型的源集文件名就是定義的文件名,如preview
和free
。建立源集有兩種方式:google
Android studio
建立經過Android studio
建立源集的步驟以下:spa
經過源集,咱們能夠在特定的版本使用特定的資源文件,下面以構造類型的源集爲例,其餘的和這個相同:
在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