分享 Android gradle 打渠包的一种方式

2014-11-04 01:07:14 +08:00
 seathink

http://devyang.me/blog/2014/11/03/android-gradle-duo-qu-dao-da-bao-pei-zhi/

需求

国内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]
            }
        }

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

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

productFlavors {
            wandoujia{
            }
            google_play{
            }
        }

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

一个循环搞定~

16775 次点击
所在节点    Android
6 条回复
xcv58
2014-11-04 01:36:52 +08:00
挺好的。
ufo22940268
2014-11-04 05:55:38 +08:00
速度快吗,打包几十个渠道要多少时间
seathink
2014-11-04 09:24:49 +08:00
@ufo22940268 速度不错。比手工打速度快多了。你可以在现有工程上试下,添几行代码就可以了
holmesabc
2014-11-04 11:42:58 +08:00
自己用python写了个自动打包的, 以兼容公司的多种渠道需求.
原理用python改manifest,gradle打包。
seathink
2014-11-04 12:57:12 +08:00
@holmesabc 嗯,方法很多。简单方便实现需求就好😄
up76733
2014-11-07 09:02:52 +08:00
挺好用的,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/143752

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX