Variant的定义
Variant
是构造类型和不同的定制类型(product flavor)的组合。构造类型在Android studio
中默认有debug
和release
;而定制类型(product flavor)在国内一般用于不同的分发渠道,例如小米、华为等,或者免费和付费版。
下面我们来构建免费的预览版、发布版和付费的预览版、发布版应用。
构建类型
在Android studio
中构造类型默认有debug
和release
。如果不够,我们可以自定义其他构造类型,这里我们创建一个preview
的预览构造类型,代码如下:
buildTypes {
release {
//是否移除未引用的资源
minifyEnabled false
//用于混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
preview{
//这里是我们自定义的预览版
}
注:这里的构造类型和下面的定制类型的代码都是放在app
模块下的android
代码块中
定制类型
创建免费版和定制版的类型,代码如下
flavorDimensions("type")//维度
productFlavors{
free{
applicationId "com.easy.free"
versionCode 1
}
pro{
applicationId "com.easy.pro"
minSdkVersion 19
versionCode 1
}
}
如上所示,可以为不同的定制类型设置不同的属性
源集
源集是Gradle
用来构建apk的资源位置。构造类型、定制类型、Variant都有源集,如下图所示:
上图中preview
、release
是构造类型的源集,free
是定制类型的源集,而proPreview
、proRelease
、freePreview
是Variant类型的源集。
创建源集
创建源集就是创建存放资源的文件夹,构造类型和定制类型的源集文件名就是定义的文件名,如preview
和free
。创建源集有两种方式:
- 手动创建,就是手动创建所需文件夹
- 通过
Android studio
创建
通过Android studio
创建源集的步骤如下:
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