天天看点

Android Studio -使用 Gradle打包多版本APK——buildTypes和productFlavors打包

在项目开发过程中,经常会有需要打包不同版本的 APK 的需求。 比如 debug版,release版,dev版等等。 有时候不同的版本中使用到的不同的服务端api域名也不相同。 比如 debug_api.com,release_api.com,dev_api.com等等。

不同的版本对应了不同的 api 域名,还可能对应不同的 icon 等。如果每次都在打包前修改我们都手动来修改,这样实在是不够方便。

我们使用 Android Studio 和 Gradle,这个麻烦就可以轻松省去。

具体方式如下: 在 Android Studio 中打开 build.gradle(Module中)的 android 节点下添加如下代码

buildTypes {    //这里的名字自定义,不要求大小写    release{        // 这里是在 applicationId 中添加了一个后缀。所以『.』要加上        applicationIdSuffix ".release"         // 这里的作用是选择是否混淆代码        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }    dev{        applicationIdSuffix ".dev"        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }}// 这里是为了不同过的版本设置一些特殊的参数,并不直接和 buildType 关联。例如:使用 buildType 中的 dev 版本,也可以使用 flavors_release 里面设置的自定义参数。这需要自己按照需求制定。productFlavors{//自定义名字不过不能和上面buildType中相同,不然Gradle编译会不通过。在这里使用了『flavors_』前缀以便区分。    flavors_release{    // manifestPlaceholders中写到的『str』,『package_name』不支持用大写,否则Gradle编译会不通过。    // 这里所设置的变量可以直接使用在『AndroidManifest.xml』中,使用方式为:${package_name}    // android:label="${package_name}"         manifestPlaceholders = [str:"releaseStr",package_name:"com.sunhz.mvptest.release"]      // 这里的参数是为了在 java 代码中使用,具体的使用方式为:context.getResources().getString(R.string.strKey);        resValue("string" , "strKey","releaseStrValue")    }    flavors_dev{        manifestPlaceholders = [str:"devStr",package_name:"com.sunhz.mvptest.dev"]        resValue("string" , "strKey","devStrValue")    }}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

打包

上面设置完成后,打包有两种方法:

  1. 使用方式如下: 在 Android Studio 的工具栏中,找到『Build』项,找到『Generate SignedAPK…』,如下图。
    Android Studio -使用 Gradle打包多版本APK——buildTypes和productFlavors打包
    选择 Module -> 创建 APK key,或者输入 APK key密码 -> 关键来了!如下图。
    Android Studio -使用 Gradle打包多版本APK——buildTypes和productFlavors打包

    在『BuildType』处,有三个选项,分别是releas,dev,debug。其中debug为 Android Studio 自带的。

    在『Flavors』处,选择我们在 build.gradle 中设置的两个Flavors,以方便直接使用定义在 build.gradle 中自定义的参数。

    buildType 和 Flavors 并没有直接的联系。 他们可以根据用户需求互相配合使用。如上图,BuildType 选择了 release,但 Flavors 选择的却是 flavors_dev。

  2. 直接执行

    ./gradlew assembleRelease

      assemble结合Build Variants来创建apk,Build  Variants = Build Type + Product Flavor
    • assemble 结合 Build Type 创建apk,如:

      ./gradlew assembleDebug

        或

      ./gradlew assembleRelease

    • assemble 结合 Product Flavor 创建apk,

举例

其实 assemble 是和 Build Variants 一起结合使用的, 举个例子大家就明白了,以友盟多渠道打包为例:

打包全部Release版本:

  • ./gradlew assembleRelease

    这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

打包wandoujia渠道版本:

  • ./gradlew assembleWandoujia

    此命令会生成wandoujia渠道的Release和Debug版本

打包wandoujia渠道的release版本,执行如下命令就好了:

  • ./gradlew assembleWandoujiaRelease

总之,assemble 命令创建apk有如下用法:

assemble: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。

assemble: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。

assemble: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。

打出来的不同版本的包,全部都能够在同一部手机上安装,且能够将两个包全都发布到 Google 市场上,详情请看

关注我的公众号,轻松了解和学习更多技术
Android Studio -使用 Gradle打包多版本APK——buildTypes和productFlavors打包

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

在项目开发过程中,经常会有需要打包不同版本的 APK 的需求。 比如 debug版,release版,dev版等等。 有时候不同的版本中使用到的不同的服务端api域名也不相同。 比如 debug_api.com,release_api.com,dev_api.com等等。

不同的版本对应了不同的 api 域名,还可能对应不同的 icon 等。如果每次都在打包前修改我们都手动来修改,这样实在是不够方便。

我们使用 Android Studio 和 Gradle,这个麻烦就可以轻松省去。

具体方式如下: 在 Android Studio 中打开 build.gradle(Module中)的 android 节点下添加如下代码

buildTypes {    //这里的名字自定义,不要求大小写    release{        // 这里是在 applicationId 中添加了一个后缀。所以『.』要加上        applicationIdSuffix ".release"         // 这里的作用是选择是否混淆代码        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }    dev{        applicationIdSuffix ".dev"        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }}// 这里是为了不同过的版本设置一些特殊的参数,并不直接和 buildType 关联。例如:使用 buildType 中的 dev 版本,也可以使用 flavors_release 里面设置的自定义参数。这需要自己按照需求制定。productFlavors{//自定义名字不过不能和上面buildType中相同,不然Gradle编译会不通过。在这里使用了『flavors_』前缀以便区分。    flavors_release{    // manifestPlaceholders中写到的『str』,『package_name』不支持用大写,否则Gradle编译会不通过。    // 这里所设置的变量可以直接使用在『AndroidManifest.xml』中,使用方式为:${package_name}    // android:label="${package_name}"         manifestPlaceholders = [str:"releaseStr",package_name:"com.sunhz.mvptest.release"]      // 这里的参数是为了在 java 代码中使用,具体的使用方式为:context.getResources().getString(R.string.strKey);        resValue("string" , "strKey","releaseStrValue")    }    flavors_dev{        manifestPlaceholders = [str:"devStr",package_name:"com.sunhz.mvptest.dev"]        resValue("string" , "strKey","devStrValue")    }}           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

打包

上面设置完成后,打包有两种方法:

  1. 使用方式如下: 在 Android Studio 的工具栏中,找到『Build』项,找到『Generate SignedAPK…』,如下图。
    Android Studio -使用 Gradle打包多版本APK——buildTypes和productFlavors打包
    选择 Module -> 创建 APK key,或者输入 APK key密码 -> 关键来了!如下图。
    Android Studio -使用 Gradle打包多版本APK——buildTypes和productFlavors打包

    在『BuildType』处,有三个选项,分别是releas,dev,debug。其中debug为 Android Studio 自带的。

    在『Flavors』处,选择我们在 build.gradle 中设置的两个Flavors,以方便直接使用定义在 build.gradle 中自定义的参数。

    buildType 和 Flavors 并没有直接的联系。 他们可以根据用户需求互相配合使用。如上图,BuildType 选择了 release,但 Flavors 选择的却是 flavors_dev。

  2. 直接执行

    ./gradlew assembleRelease

      assemble结合Build Variants来创建apk,Build  Variants = Build Type + Product Flavor
    • assemble 结合 Build Type 创建apk,如:

      ./gradlew assembleDebug

        或

      ./gradlew assembleRelease

    • assemble 结合 Product Flavor 创建apk,

举例

其实 assemble 是和 Build Variants 一起结合使用的, 举个例子大家就明白了,以友盟多渠道打包为例:

打包全部Release版本:

  • ./gradlew assembleRelease

    这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

打包wandoujia渠道版本:

  • ./gradlew assembleWandoujia

    此命令会生成wandoujia渠道的Release和Debug版本

打包wandoujia渠道的release版本,执行如下命令就好了:

  • ./gradlew assembleWandoujiaRelease

总之,assemble 命令创建apk有如下用法:

assemble: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。

assemble: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。

assemble: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。

打出来的不同版本的包,全部都能够在同一部手机上安装,且能够将两个包全都发布到 Google 市场上,详情请看

关注我的公众号,轻松了解和学习更多技术
Android Studio -使用 Gradle打包多版本APK——buildTypes和productFlavors打包