国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包

以友盟多渠道打包为例

在AndroidManifest.xml里面

  1. <meta-data
  2. android:name="UMENG_CHANNEL"
  3. android:value="Channel_ID" />

里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化,步骤如下:

1、在AndroidManifest.xml里配置PlaceHolder

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

2、在build.gradle设置productFlavors

  1. android {
  2. productFlavors {
  3. xiaomi {
  4. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
  5. }
  6. _360 {
  7. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
  8. }
  9. baidu {
  10. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
  11. }
  12. wandoujia {
  13. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
  14. }
  15. }
  16. }

或者批量修改

  1. android {
  2. productFlavors {
  3. xiaomi {}
  4. _360 {}
  5. baidu {}
  6. wandoujia {}
  7. }
  8.  
  9. productFlavors.all {
  10. flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  11. }
  12. }

assemble 这个命令,会结合 Build Type 创建自己的task,如:

  1. gradle assembleDebug
  2. gradle assembleRelease

除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor

如果我们想打包wandoujia渠道的release版本,执行如下命令:

  1. gradle assembleWandoujiaRelease

如果我们只打wandoujia渠道版本,则:

  1. gradle assembleWandoujia

这个命令会生成wandoujia渠道的Release和Debug版本

想打包全部Release版本:

  1. gradle assembleRelease

assemble 命令创建task有如下用法:

  • **assemble**: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。

  • **assemble**: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。

  • **assemble**: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。

完整的build.gradle示例如下:

  1. apply plugin: 'com.android.application'
  2.  
  3. def releaseTime() {
  4. return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
  5. }
  6.  
  7. android {
  8. compileSdkVersion 21
  9. buildToolsVersion '21.1.2'
  10.  
  11. defaultConfig {
  12. applicationId "com.boohee.*"
  13. minSdkVersion 14
  14. targetSdkVersion 21
  15. versionCode 1
  16. versionName "1.0"
  17.  
  18. // dex突破65535的限制
  19. multiDexEnabled true
  20. // 默认是umeng的渠道
  21. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
  22. }
  23.  
  24. lintOptions {
  25. abortOnError false
  26. }
  27.  
  28. signingConfigs {
  29. debug {
  30. // No debug config
  31. }
  32.  
  33. release {
  34. storeFile file("../yourapp.keystore")
  35. storePassword "your password"
  36. keyAlias "your alias"
  37. keyPassword "your password"
  38. }
  39. }
  40.  
  41. buildTypes {
  42. debug {
  43. // 显示Log
  44. buildConfigField "boolean", "LOG_DEBUG", "true"
  45.  
  46. versionNameSuffix "-debug"
  47. minifyEnabled false
  48. zipAlignEnabled false
  49. shrinkResources false
  50. signingConfig signingConfigs.debug
  51. }
  52.  
  53. release {
  54. // 不显示Log
  55. buildConfigField "boolean", "LOG_DEBUG", "false"
  56.  
  57. minifyEnabled true
  58. zipAlignEnabled true
  59. // 移除无用的resource文件
  60. shrinkResources true
  61. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  62. signingConfig signingConfigs.release
  63.  
  64. applicationVariants.all { variant ->
  65. variant.outputs.each { output ->
  66. def outputFile = output.outputFile
  67. if (outputFile != null && outputFile.name.endsWith('.apk')) {
  68. // 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
  69. def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
  70. output.outputFile = new File(outputFile.parent, fileName)
  71. }
  72. }
  73. }
  74. }
  75. }
  76.  
  77. // 友盟多渠道打包
  78. productFlavors {
  79. wandoujia {}
  80. _360 {}
  81. baidu {}
  82. xiaomi {}
  83. tencent {}
  84. taobao {}
  85. ...
  86. }
  87.  
  88. productFlavors.all { flavor ->
  89. flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  90. }
  91. }
  92.  
  93. dependencies {
  94. compile fileTree(dir: 'libs', include: ['*.jar'])
  95. compile 'com.android.support:support-v4:21.0.3'
  96. compile 'com.jakewharton:butterknife:6.0.0'
  97. ...
  98. }

Gradle多渠道打包的更多相关文章

  1. [转]Android Studio系列教程六--Gradle多渠道打包

    转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...

  2. Android Studio系列教程六--Gradle多渠道打包

    Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzh ...

  3. gradle多渠道打包及友盟统计-eclipse版本

    在进行渠道打包的之前,先看看准备篇,知道打包为了什么. 参见1.0android批量打包认知. eclipse中使用gradle多渠道打包全部流程 一.生成gradle文件,配置本地的gradle环境 ...

  4. 【转】Android Studio系列教程六--Gradle多渠道打包

    原文链接:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 由于国内Android市场众多渠道,为了统计每个渠道的 ...

  5. Android Studio + gradle多渠道打包

    通过工具栏的Build->Build Apk 好像只能打包第一个Module(eclipse里面是Project的概念),怎么多渠道打包呢?目前好像只能一个一个的打 首先在清单文件里设置个变量: ...

  6. Gradle多渠道打包[umeng]

    前言 国内Android应用市场品种太多,血统不纯,每次上线App都打包打到手软,上传上到吐血!好在我们有了Android studio和gradle,一条命令打包各种渠道版本App! 正文 Umen ...

  7. 使用gradle多渠道打包

    以友盟的多渠道打包为例,如果我们须要打包出例如以下渠道:UMENG, WANDOUJIA, YINGYONGBAO. 第一种方法.是须要创建文件的. 我们在写完我们的代码之后,在app/src以下.分 ...

  8. Android Studio 使用Gradle多渠道打包

    第一步:配置AndroidManifest.xml 以友盟渠道为例,渠道信息一般都是写在 AndroidManifest.xml文件中,大约如下: <meta-data android:name ...

  9. android studio学习----gradle多渠道打包

    由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了. 友盟多渠道打包 废 ...

随机推荐

  1. Android上滑手势触发和不增加布局层级扩大点击区域

    最近项目中需要实现手势上滑或者点击滑出界面的效果,实现上是利用GestureDetector,然后在onFling中判断,但遇到一个问题:手势上滑是针对整个布局的,但如果有对单独的View设置点击监听 ...

  2. msvc2013编译qt5.6源码

    1.回顾 说起到qt的编译,真是领人痛心啊,不仅编译选项繁多,而且编译时间比较久,总是能使想编译qt源码的人望而却步,呵呵...我就是其中一个,不知道从什么时候开始就想着把qt的源码编译一下,也尝试过 ...

  3. angularJs案例汇总

    ---恢复内容开始--- 这里我会把学习过程中碰到的demo与大家分享,由浅入深,逐个分析. Eg1:入门必备 <html ng-app="todoApp"> < ...

  4. SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较

    排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: .row_number .rank .dense_rank .ntile 下面分别介绍一下这四个 ...

  5. Linq查询操作之聚合操作(count,max,min,sum,average,aggregate,longcount)

    在Linq中有一些这样的操作,根据集合计算某一单一值,比如集合的最大值,最小值,平均值等等.Linq中包含7种操作,这7种操作被称作聚合操作. 1.Count操作,计算序列中元素的个数,或者计算满足一 ...

  6. 把DataTable转换为泛型List<T>或是JSON

    在开发ASP.NET Web API或ASP.NET MVC时,我们从数据库得到的数据往往是DataSet或是DataTable.为了能让前端JQuery能方便使用至这些数据,我们需要把这些数据转换为 ...

  7. C# 各种字符串格式

    C#的String.Format举例 stringstr1 =); //result: 56,789.0 stringstr2 =); //result: 56,789.00 stringstr3 = ...

  8. GET DIAGNOSTICS Syntax

    http://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html GET [CURRENT | STACKED] DIAGNOSTICS { st ...

  9. 调整 FMX Android 文字显示「锯齿」效果

    说明:调整 Firemonkey Android 显示文字有「锯齿」效果 适用:Firemonkey Android 平台 修改方法: 请将源码 FMX.FontGlyphs.Android.pas  ...

  10. 再探OAuth2

    原文: http://www.cnblogs.com/Irving/p/4134629.html web:http://oauth.net/2/ rfc: http://tools.ietf.org/ ...