📜  如何在 Android 中创建不同的构建变体?(1)

📅  最后修改于: 2023-12-03 14:52:12.667000             🧑  作者: Mango

如何在 Android 中创建不同的构建变体?

在 Android 应用程序中创建不同的构建变体是一种常见的需求。变体可以是不同的版本、不同的渠道、不同的语言或不同的主题。Android SDK 提供了多种生成变体的方式。下面是一些常用的方式:

1. 使用 productFlavors

productFlavors 允许您为您的应用程序创建不同的变体。例如,您可以创建不同的变体,如 development、production、staging 等,以区分不同的构建。productFlavors 允许您在一个项目中创建多个版本,每个版本都可以在编译期间进行更改和选择,从而使您能够同时构建多个版本。

创建 productFlavors

在 app/build.gradle 文件中添加以下代码:

android {
    ...

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    productFlavors {
        development {
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
        }

        production {
            applicationIdSuffix ""
        }
    }
}

在上面的代码中,我们创建了两个 flavors,一个是 development,另一个是 production。每个 flavor 都可以定义自己的 applicationId、versionName、以及其他构建属性。在这个例子中,development flavor 后缀的应用程序 ID 是 ".dev",versionName 是以 "-dev" 结尾。production flavor 什么都没有设置,即默认情况下。这个例子还定义了默认的应用程序 ID、版本名称等属性。

构建 productFlavors

在命令行使用以下命令来构建 productFlavors:

./gradlew assembleDevelopmentRelease
./gradlew assembleProductionRelease

在 Android Studio 中,您可以在 "Build Variants" 窗口中选择不同的变体,然后点击 "Run" 按钮来构建它们。

2. 使用 Build Type

buildTypes 与 productFlavors 有些类似,但是它们是用于区分不同的构建类型,例如 release、debug 等。buildTypes 允许您为不同的构建类型定义不同的构建选项,例如禁用调试选项、启用混淆等。

创建 buildTypes

在 app/build.gradle 文件中添加以下代码:

android {
    ...

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            signingConfig signingConfigs.debug
        }

        release {
            debuggable false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
}

在上面的代码中,我们创建了两个 buildTypes,一个是 debug,另一个是 release。每个 buildType 都可以定义自己的 debuggable、minifyEnabled、proguardFiles 以及其他选项。在这个例子中,debug buildType 启用了调试功能,禁用了混淆。release buildType 禁用了调试功能,启用了混淆。这个例子还定义了默认的应用程序 ID、版本名称等属性。

构建 buildTypes

要构建 buildTypes,请使用以下命令:

./gradlew assembleDebug
./gradlew assembleRelease

在 Android Studio 中,您可以在 "Build Variants" 窗口中选择不同的构建类型,然后点击 "Run" 按钮来构建它们。

3. 使用 Build Flavor 和 Type

productFlavors 和 buildTypes 可以组合起来创建更多的构建变体。例如,如果您想要为不同的构建类型和不同的渠道创建不同的版本,则可以结合使用它们。

创建 Build Flavor 和 Type

在 app/build.gradle 文件中添加以下代码:

android {
    ...

    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    productFlavors {
        free {
            applicationIdSuffix ".free"
        }

        paid {
            applicationIdSuffix ".paid"
        }
    }

    buildTypes {
        debug {
            debuggable true
            minifyEnabled false
            signingConfig signingConfigs.debug
        }

        release {
            debuggable false
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
}

在上面的代码中,我们创建了两个 flavors,一个是 free,另一个是 paid;又创建了两个 buildTypes,一个是 debug,另一个是 release。free flavor 和 paid flavor 根据应用程序 ID 后缀来定义,debug buildType 启用了调试功能,禁用了混淆,release buildType 禁用了调试功能,启用了混淆。

构建 Build Flavor 和 Type

要构建 Build Flavor 和 Type,请使用以下命令:

./gradlew assembleFreeDebug
./gradlew assemblePaidDebug
./gradlew assembleFreeRelease
./gradlew assemblePaidRelease

在 Android Studio 中,您可以在 "Build Variants" 窗口中选择不同的变体,然后点击 "Run" 按钮来构建它们。

总结

在 Android 中创建不同的构建变体是一种常见需求。productFlavors、buildTypes 以及它们的组合是实现这个目标的常用方式。开发人员可以使用这些功能为不同的版本、不同的渠道、不同的语言、不同的主题等创建不同的构建选项。