博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle多渠道打包
阅读量:5248 次
发布时间:2019-06-14

本文共 4440 字,大约阅读时间需要 14 分钟。

 

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

 

以友盟多渠道打包为例

在AndroidManifest.xml里面

1 

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

 

1、在AndroidManifest.xml里配置PlaceHolder

1 

 

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,如:

gradle assembleDebuggradle assembleRelease

 

 

 

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

 

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

 

gradle assembleWandoujiaRelease

 

 

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

gradle assembleWandoujia

 

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

 

想打包全部Release版本:

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 1414         targetSdkVersion 2115         versionCode 116         versionName "1.0"17         18         // dex突破65535的限制19         multiDexEnabled true20         // 默认是umeng的渠道21         manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]22     }23 24     lintOptions {25         abortOnError false26     }27 28     signingConfigs {29         debug {30             // No debug config31         }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             // 显示Log44             buildConfigField "boolean", "LOG_DEBUG", "true"45 46             versionNameSuffix "-debug"47             minifyEnabled false48             zipAlignEnabled false49             shrinkResources false50             signingConfig signingConfigs.debug51         }52 53         release {54             // 不显示Log55             buildConfigField "boolean", "LOG_DEBUG", "false"56 57             minifyEnabled true58             zipAlignEnabled true59             // 移除无用的resource文件60             shrinkResources true61             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'62             signingConfig signingConfigs.release63 64             applicationVariants.all { variant ->65                 variant.outputs.each { output ->66                     def outputFile = output.outputFile67                     if (outputFile != null && outputFile.name.endsWith('.apk')) {68                         // 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk69                         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 }

 

转载于:https://www.cnblogs.com/l2rf/p/4998211.html

你可能感兴趣的文章
Django的form表单之文件上传
查看>>
SQL中的数字格式化 (收藏)
查看>>
lambda表达式之方法引用
查看>>
转 ALV报表开发模板
查看>>
Linux查看程序端口占用情况
查看>>
[转载]如何在LinqToSql项目中应用TransactionScope数据库事务
查看>>
【c++】字符串流输出恢复状态问题
查看>>
Linux之sed
查看>>
layui关闭弹出层
查看>>
web.xml详解
查看>>
【解决方案】关于Extjs下拉框不显示的问题
查看>>
Newtonsoft.Json 的序列化与反序列化
查看>>
写一个简易web服务器、ASP.NET核心知识(4)
查看>>
python 类与对象
查看>>
浅析JAVA设计模式之工厂模式(二)
查看>>
使用Android SDK Manager自动下载速度慢解决方法
查看>>
架设局域网升级服务器 用WSUS打补丁
查看>>
1-13
查看>>
架构之路(二):性能
查看>>
GridView使用CommandField删除列实现删除时提示确认框
查看>>