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/

时间: 2024-10-09 00:53:05

AndroidGradle --多渠道打包配置(转发)的相关文章

Gradle实战:Android多渠道打包方案汇总

查看原文:http://blog.csdn.net/u010818425/article/details/52319382 Gradle实战系列文章: <Gradle基本知识点与常用配置> <Gradle实战:不同编译类型的包同设备共存> <Gradle实战:发布aar包到maven仓库> <Gradle实战:执行sql操作hive数据库> 本文将延续之前几篇博客的风格,先从基本概念入手,这有助于我们对后文的理解: 在后续的代码中如果忘了某个概念的具体意义,

Gradle for Android(三)多渠道打包、配置签名信息

多渠道打包 国内有太多Android App市场,每次发版几十个渠道包.还好Android Gradle给我们提供了productFlavors,我们可以对生成的APK包进行定制. productFlavors {//多渠道打包        xiaomi {            applicationId 'com.wuxiaolong.gradle4android1'        }        googlepaly {            applicationId 'com.wu

Android 使用Gradle加Android Studio 多渠道打包

转载请注明出处: http://blog.csdn.net/jjwwmlp456/article/details/45057067  ----------------- 匆忙拥挤repeat Gradle,这个东西好复杂,不过在Android中,我们知道它大概怎么用,它的依据何来,就够了. Gradle的DSL,领域特定语言(domain-specific languages,简称DSL),地址:http://gradle.org/docs/2.3/dsl/ Gradle的用户指南,地址:htt

Android 新一代多渠道打包神器

关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫.企鹅电竞等项目的功能开发和技术优化.业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.ltlovezh.com . ApkChannelPackage是一种快速多渠道打包工具,同时支持基于V1和V2签名进行渠道打包.插件本身会自动检测Apk使用的签名方法,并选择合适的多渠道打包方式,对使用者来说完全透明. Github地址: https://github.com/ltlovezh/Apk

Android自动化构建之Ant多渠道打包实践(上)

前言 Ant是历史比较悠久的一个自动化构建工具,Android开发者可以通过它来实现自动化构建,也可以实现多渠道打包,关于apk打包的方式一般有Ant.Python.Gradle三种,这三种打包方式都各自有优点和缺点,本篇博文先给大家介绍如何使用Ant来实现自动构建和多渠道发布. 开发环境 Window7 Ant jdk android sdk mac系统下所需要的运行环境也是类似的,我们都需要配置Ant.jdk.sdk的环境变量,我们可以看一下window下是环境变量配了些什么: ANT_HO

美团多渠道打包

新旧打包方法原理对比: 传统方式 在AndroidManifest定义渠道的年代,多渠道打包无非以下两种方案: 方案一:完全的重新编译,即在代码重新编译打包之前,在AndroidManifest中修改渠道标示: 方案二:通过ApkTool进行解包,然后修改AndroidManifest中修改渠道标示,最后再通过ApkTool进行打包.签名. 这两种打包方式,不管是哪种,效率都很低,方案一毫无效率可言,而且打包的渠道规模非常小,第二种方案效率稍微高些,打包的渠道规模也还可以,但是这两种方案速度慢的

使用gradle多渠道打包

以友盟的多渠道打包为例,如果我们须要打包出例如以下渠道:UMENG, WANDOUJIA, YINGYONGBAO. 第一种方法.是须要创建文件的. 我们在写完我们的代码之后,在app/src以下.分别创建和main同级目录的目录umeng, wandoujia, yingyongbao,这三个目录里面都各仅仅有一个AndroidManifest.xml文件,文件仅仅须要例如以下: [plain] view plaincopy <manifest xmlns:android="http:/

android产品研发(五)--&gt;多渠道打包

国内的Android开发者还是很苦逼的,由于众所周知的原因,google play无法再国内打开,所以android系的应用市场,群雄争霸,而后果就是国内存在着有众多的应用市场,产品在不同的渠道可能有这不同的统计需求,为此android开发人员需要为每个应用市场发布一个安装包,这里就涉及到了android的多渠道打包. 本文主要讲解的就是几种主流的多渠道打包方式,以及其优劣势. 通过配置gradle脚本实现多渠道打包 这种打包方式是使用android Studio的编译工具gradle配合使用的

[Android Studio] Android studio 多渠道打包(超简洁版)

转载:http://xuyazhou.com/archives/461 http://relex.me/using-manifestplaceholders/ 最近一直用android studio 进行开发,在开发和发版的时候,遇到一个多渠道打包的问题,由于公司里是有七个渠道的包进行分发,由于每次去AndroidManifest.xml修改渠道的值,甚是麻烦... 最后去google了一番,发现有些方法,是在gradle文件里切换各种不同的AndroidManifest.xml文件,感觉这样也