AndroidGradle --多渠道打包配置(转发)

需求

国内Android app发布一般会有多个渠道,为了跟踪发展情况,通常会为每一个渠道定制一个特别的apk。

一般友盟之类第三方统计的渠道ID定义如下,以wandoujia为例

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

如果不使用第三方统计,自己也可以在AndroidManifest.xml中定义类似meta-data

如果每个渠道都手工修改,打包,10几个渠道下来😂

咱还是自动化来得方便

解决方案

Gradle Android Plugin 0.10 新增了Manifest Merger

For custom placeholders replacements, use the following DSL to configure the placeholders values :

android {

    defaultConfig { 

        manifestPlaceholders = [ activityLabel:"defaultName"] 

    } 

    productFlavors {

        free { 
        } 

        pro { manifestPlaceholders = [ activityLabel:"proName" ] 

        } 
    }
} 

Manifest Merger 可以替换Manifest中对应key的值

所以,可以利用Product flavor + manifestPlaceholder 来替换对应渠道的key

假如我们有wandoujia, Google Play, 两个渠道,可以这么写

AndroidManifest.xml

        <meta-data android:name="UMENG_CHANNEL" android:value="$[CHANNEL_KET]" />

build.gradle

        productFlavors {
            wandoujia{
                manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name]
            }
            google_play{
                manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name]
            }
        }

ok, 搞定,几行代码自动生成对应渠道的apk。 其实是将Manifest中的 UMENG_CHANNEL_VALUE替换成了flavorbuild的name 

可以看到每个flavor里面的代码一样,比较啰嗦,还能在简化下,

        productFlavors {
            wandoujia{
            }
            google_play{
            }
        }

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

一个循环搞定~

-------------------------------------------------------------------------------------------------------------------------------

原文章地址:http://devyang.com/blog/2014/11/03/android-gradle-duo-qu-dao-da-bao-pei-zhi/

posted @ 2015-02-04 22:48  西北野狼  阅读(383)  评论(0编辑  收藏  举报