《Gradle for Android》核心总结(二)构建Variant

415 阅读3分钟

Variant的定义

Variant是构造类型和不同的定制类型(product flavor)的组合。构造类型在Android studio中默认有debugrelease;而定制类型(product flavor)在国内一般用于不同的分发渠道,例如小米、华为等,或者免费和付费版。

下面我们来构建免费的预览版、发布版和付费的预览版、发布版应用。

构建类型

Android studio中构造类型默认有debugrelease。如果不够,我们可以自定义其他构造类型,这里我们创建一个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都有源集,如下图所示:

源集

上图中previewrelease是构造类型的源集,free是定制类型的源集,而proPreviewproReleasefreePreview是Variant类型的源集。

创建源集

创建源集就是创建存放资源的文件夹,构造类型和定制类型的源集文件名就是定义的文件名,如previewfree。创建源集有两种方式:

  • 手动创建,就是手动创建所需文件夹
  • 通过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