Android 多渠道打包

为什么要有多渠道打包?

答:由于现在应用市场繁多,为了统计各个应用市场用户的下载量、活跃量,还可以分析用户操作习惯,优化我们的APP。


以友盟为例(因为我用的就是它),需要在AndroidManifest.xml里面添加:

<meta-data
            android:name="UMENG_CHANNEL"
            android:value="Channel_ID" />

我们的原理就是用各个渠道的标识来替换“Channel_ID”值。

1、对AndroidManifest.xml中的“Channel_ID”使用placeHolder

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


2、在模块下的build.gradle文件中的defaultConfig中添加下面代码

 manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]

 注意:在Plugin 3.0.0之后有一种自动匹配消耗库的机制,便于debug variant 自动消耗一个库,然后就是必须要所有的flavor 都属于同一个维度。需要多添加一句:flavorDimensions "versionCode"

android {
    ...

    defaultConfig {
        ...
    flavorDimensions "versionCode"
        manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"_default" ]
    }   
}

 其中,“_default”是指默认值。

3、在build.gradle中的android{}中添加ProductFlavors配置
 
注意:渠道名不能以数字开头

productFlavors {
        _default{}
        wandoujia{}
        _360{}
        yingyongbao{}
        xiaomi{}
        huawei{}
    }
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
    }
4、这样我们就可以通过图形界面或Terminal进行多渠道打包了

 
1、使用图形界面的话,按住ctrl点中你想要打的渠道,然后点击Finish开始打包


 
2、使用Terminal的话,输入 gradlew assembleRelease ,打出所有正式版的包;
 
如果想单独打某一个渠道的,输入 gradlew assemble_360Release 即可


 
如果你还没有生成密钥库,打出来的包名中会有“unsigned”的标识,也就是未签名。

不知道如何给应用签名的话,可以看我的上一遍博客:Android项目签名、打包(使用图形界面和Terminal)


 3、通过Gradle tasks面板进行打包

  打开Android Studio的Gradle tasks面板(右边侧边栏),会发现模块多了很多任务,想打哪个包,就双击哪个。

 

 

 Gradle常用命令

 gradlew代表 gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper。

 下面列举了几个常见的命令:

 gradlew -v:版本号

 gradlew clean:把之前打包所产生的所有文件全部清除

 gradlew build:检查依赖并编译打包

 这里注意的是 gradlew build 命令把debug、release环境的包都打出来

 gradlew assembleDebug 编译并打Debug包

 gradlew assembleRelease 编译并打Release的包


参考:

http://www.cnblogs.com/shanpow/p/4097320.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章