Android 使用gradle的productFlavors实现多渠道打包

productFlavors用法

productFlavors ,就是用来分别定义产品不同的特性,使用它可以使用一套代码创建不同的产品。就是用于定义产品的特性,这是每个产品不同的地方,有了它我们就可以用同一套代码创建不同的产品,在module下的build.gradle中加入productFlavors结构

如下:

apply plugin: 'com.android.application'


android {

    .....
    //多渠道打包
    productFlavors {
//        这个就是产品名,点击build Variants可以看productADebug,点击可以进行选取
        productA {
            //这里定义产品A的特性
        }

        productB {
            //这里定义产品B的特性
        }
        //更多产品 ...
    }
}

可以看到我们在Android节点下建立了一个productFlavors节点,里面包含两个产品。productA和productB就是产品名。

在android studio 左下角的Build Variants菜单中可以看到productADebug

Android 使用gradle的productFlavors实现多渠道打包_第1张图片

平时,调试的时候可以在这里通过选择一个产品的Debug来进行调试。

productFlavors应用场景

不同包名的产品

通过为产品设置不同的application 就可以编译出不同包名的apk,

    productFlavors{
        productA{
            applicationId "com.gavinandre.product.a"
            versionName "version-a-1.0"
        }

        productB{
            applicationId "com.gavinandre.product.b"
            versionName "version-b-1.0"
        }
    }

这里我测试没有效果,不知道为什么?

不同渠道包的产品

由于国内应用市场较多,因此需要为不同市场打包相应的包,通常这种包就叫做渠道包,我们可以使用productFlavors配合mainfestPlaceHolder 属性的方法来替换渠道值。

一般用渠道的统计无非是用友盟或者其他的,以有盟为例

 productFlavors{
    wandoujia {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
    }

    baidu {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]       }

    c360 {
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
    }

    uc {
    manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
    }
  }

或者

productFlavors {

wandoujia {}
baidu {}
c360 {}
uc {}

productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}

}

然后在AndroidManifest中使用。如下:

data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" />

assemble 命令实现多渠道打包

上面介绍了productFlavors,下面来介绍如何一次性编译打包多个渠道或者产品

可以在android Studio底部的terminal 里输入命令

./gradlew assembleDebug

assemble 命令介绍

assemble是和Build Variants一起结合使用的。而Build Variants= Build Type(Debug/Release)+Product Flavor(如wandoujia)

使用实例

  • ./gradlew assembleDebug

    编译并生成Debug包,包含productFlavors下所有定义的产品或者渠道包
    
  • ./gradlew assembleRelease

    编译并生成Release包,包含productFlavors下所有定义的产品或者渠道包
    
  • ./gradlew assembleWandoujia

    编译并生成Release和Debug包,仅生成productFlavors下定义的wandoujia 渠道
    
  • ./gradlew assembleWandoujiaRelease

     编译并生成Release包,仅生成productFlavors下定义的wandoujia渠道
    

注:apk生成目录在rootProject/app/build/outputs/apk目录下。

在执行./gradlew assembleRelease时生成的apk显示未签名,这是应为我们没有为其指定ke store.jks

Android 使用gradle的productFlavors实现多渠道打包_第2张图片

图形操作实现多渠道打包

如果不想使用命令行方式也可以使用另外两种方式来统一打包apk

  • Generate Signed Apk方式

    点击Android Studio上方工具栏build->Generate Signed Apk
    然后多选要打包的渠道包,同时可以指定apk生成目录和指定buildType(Release/Debug)

Android 使用gradle的productFlavors实现多渠道打包_第3张图片

我通常使用的是图形生成,release和debug版本。。

  • Gradle工具方式

    在Android Studio中的右边有个Gradle,点开就是相关的命令

Android 使用gradle的productFlavors实现多渠道打包_第4张图片

参考:

http://blog.csdn.net/lj402159806/article/details/54947658(相当给力)
http://www.cnblogs.com/0616–ataozhijia/p/4203997.html
http://blog.csdn.net/crazyman2010/article/details/53471162
http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/

你可能感兴趣的:(Android)