最近不断有朋友向我咨询AndroidStudio多渠道的打包方法,今天整理一下之前积累的打包套路,写一篇文章,手把手的教给大家。 
       说到多渠道,这里不得不提一下友盟统计,友盟统计是大家日常开发中常用的渠道统计工具,而我们的打包方法就是基于友盟统计实施的。按照友盟官方文档说明,渠道信息通常需要在AndroidManifest.xml中配置如下值:

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

上面的value值Channel_ID就是渠道标识。我们的期望的就是在编译时候这个值能够自动变化以满足区分多渠道的需求。

(一)在AndroidManifest.xml里设置动态渠道变量

<meta-dataandroid:name="UMENG_CHANNEL"android:value="${UMENG_CHANNEL_VALUE}" />

(二)在build.gradle设置productFlavors

这里假定我们需要打包的渠道为酷安市场、360、小米、百度、豌豆荚
android {  productFlavors {kuan {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]}xiaomi {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]}qh360 {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]}baidu {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]}wandoujia {manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]}}
}

或者批量修改

android {  productFlavors {kuan {}xiaomi {}qh360 {}baidu {}wandoujia {}}  productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
}

所谓ProductFlavors其实就是可定义的产品特性,配合 manifest merger 使用的时候就可以达成在一次编译过程中产生多个具有自己特性配置的版本。上面这个配置的作用就是,为每个渠道包产生不同的 UMENG_CHANNEL_VALUE 的值。

(三)执行打包操作

在AndroidStudio菜单栏点击Build菜单–>Generate signed APK–>选择key,并输入密码 

然后下一步,选择打包渠道

最后点击完成按钮

上图可以看到,我们已经成功的将五个渠道包打好。

(四)执行打包命令 ./gradlew assembleRelease

除了使用AndroidStudio图形打包操作以外,我们也可以使用命令行进行打包操作,具体步骤如下:

  • 在AndroidStudio窗口左下角打开Terminal面板,输入gradlew assembleRelease命令

  • 如果系统中没有安装Gradle,则会自动下载完成安装及初始化

  • 打包成功后会提示BUILD SUCCESSRUL

  • 在app–>build–>outputs–>apk路径中就可以看到打包成功后的APK

注意,此时这里的APK包名显示为unsigned,也就是说未签名,我们可以继续在build.gradle文件中配置签名信息

signingConfigs {release{storeFile file("../wooyun_keystore") //签名文件路径storePassword "123456"keyAlias "123456"keyPassword "123456"  //签名密码}}
  • 然后再次执行gradlew assembleRelease命令

这次生成的就是含有签名的渠道包。

  • 当我们的渠道包版本比较多时,可以自定义所打APK包名称,用以区分

// 自定义输出配置,这里我们加上APK版本号1.0applicationVariants.all { variant ->variant.outputs.each { output ->def outputFile = output.outputFileif (outputFile != null && outputFile.name.endsWith('.apk')) {// 输出apk名称为wooyun_v1.0_wandoujia.apkdef fileName = "wooyun_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"output.outputFile = new File(outputFile.parent, fileName)}}}

  • assemble是Gradle中的编译打包命令,有如下用法:

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

gradlew assembleWandoujiaRelease

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

gradlew assembleWandoujiaDebug

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

gradlew assembleWandoujia

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

同理我想打全部Release版本:

gradlew assembleRelease

这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

下面是我个人的build.gradle配置文件,分享给大家,以作参考

apply plugin: 'com.android.application'android {compileSdkVersion 23buildToolsVersion "23.0.3"defaultConfig {applicationId "com.wooyun.castiel"minSdkVersion 15targetSdkVersion 23versionCode 1versionName "1.0"}//签名signingConfigs {debugConfig {storeFile file("../wooyun_keystore")      //签名文件storePassword "123456"keyAlias "123456"keyPassword "123456"  //签名密码}release{storeFile file("../wooyun_keystore")      //签名文件storePassword "123456"keyAlias "123456"keyPassword "123456"  //签名密码}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'// 自定义输出配置applicationVariants.all { variant ->variant.outputs.each { output ->def outputFile = output.outputFileif (outputFile != null && outputFile.name.endsWith('.apk')) {// 输出apk名称为wooyun_v1.0_wandoujia.apkdef fileName = "wooyun_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"output.outputFile = new File(outputFile.parent, fileName)}}}}}productFlavors {kuan {}xiaomi {}qh360 {}baidu {}wandoujia {}}productFlavors.all {flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]}
}dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'compile 'com.android.support:appcompat-v7:23.4.0'
}

上面的signingConfigs配置中,可以写两个代码块,分别名为debugConfig和releaseConfig,并在其中写好一个完整签名需要的keyAlias、keyPassword、storeFile file、storePassword。 
       然后在buildTypes中,分两个代码块,分别是debug时用的,和release时用的。在其中引用刚刚写好的debugConfig和releaseConfig即可。

注意:signingConfigs代码块一定要写在buildTypes前面,否则会报下面这种错:

Could not find property 'debugConfig' on SigningConfig container.

手把手教你AndroidStudio多渠道打包相关推荐

  1. AndroidStudio多渠道打包

    一般在开发中,一个项目对应一个包名跟一个签名. 但是在某种情况下,需要一个项目对应多个包名,多个签名的话,就需要用到多渠道打包的知识了 实现: 实现起来其实也挺简单了,只需要在app下的build.g ...

  2. html如何打包文件发送,手把手教你webpack如何打包才能输出最优生产文件

    前言 webpack打包大多数前端工程师们都已经用过,然后今天我想和大家分享的是webpack如何打包才能输出最优生产环境文件,主要针对两种人群:未自己手把手配置过webpack的人.配置过webpa ...

  3. 手把手教你用LayaAir打包安卓APK

    LayaAir版本:1.7 jdk版本:jdk-12.0.1_windows-x64_bin 地址链接 PS:我本人是用的最新的jdk版本 sdk版本:24.1.1  地址链接 Android Stu ...

  4. 手把手教你将pyqt程序打包成exe(2)

    手把手教你pyqt程序打包成exe 如果是打包萌新,建议您先看: 上一篇提到打包的环境和打包示例一(没有外部资源依赖的打包): 手把手教你pyqt打包成exe(1) 文章目录 手把手教你pyqt程序打 ...

  5. android 渠道方案,Android多渠道打包时获取当前渠道的方法

    作为Androidapp,发布多个分发平台是常规操作.然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码. 这里把简单的代码记一 ...

  6. Android 手把手完美教你美团wally(瓦力)多渠道打包 3种方法(针对签名V1和V2都会有很详细的介绍)

    APK的生成步骤: 大家从图中可以看出,大体分为以下 7 个大步: 1.打包资源文件,生成 R.java 文件 2.处理 aidl 文件,生成相应 java 文件 3.编译工程源代码,生成相应 cla ...

  7. 手把手教你 Creator 2.x 打包 Android APK(Mac篇)

    上一篇我们分享了<手把手教你 Creator 2.x 打包 Android APK(Windows篇)>,今天继续分享 MAC 下的 Android 环境配置. 官方文档: 安装配置原生开 ...

  8. 手把手教你将pyqt程序打包成exe(1)

    手把手教你将pyqt程序打包exe 文章目录 手把手教你将pyqt程序打包exe 0x00 环境说明 0x01示例1(没有其他外部资源文件) 1. 单文件打包 2. 单文件夹打包 0x00 环境说明 ...

  9. [ROC-RK3568-PC] 手把手教你编译Linux_SDK并打包Buildroot系统固件

    ✏️ROC-RK3568-PC入门篇连载进程: ✅ [ROC-RK3568-PC] 手把手教你把出厂的Android系统烧写为Ubuntu系统 ✅ [ROC-RK3568-PC] 手把手教你制作Ubu ...

最新文章

  1. 计算机自动连续工作的基础是存储程序原理,计算机的存储程序工作原理是什么...
  2. python输出文本-Python基础练习,查询文本内容并输出;
  3. 开源好用的思维导图软件XMind
  4. java版spring cloud+spring boot 社交电子商务平台:服务消费(基础)
  5. svg mysql_SVG 实例
  6. .NET Compact Framework 多线程下的等待事件
  7. 用matlab解根3乘根2,第六章 信号与系统v1.ppt
  8. Java初级工程师的面试自我介绍模板(仅供参考)
  9. 谁在崛起,谁在没落?新一线城市竞争力盘点,用Python绘制动态图带你看懂!...
  10. 基于Opencv3的活动轮廓模型--CV, RSF and DRLSE
  11. IP安全:DDoS攻击、tearDrop攻击和微小碎片攻击
  12. 中台搞了2年,项目叫停,CIO被裁!本以为中台是道送分题,没想到是送命题!...
  13. 自定义Unity在iOS平台上的虚拟键盘
  14. 学机器学习的基础课程
  15. ESP8266 SmartConfig一键配网
  16. Huffman编码、Shannon编码、Fano编码——《小王子》文本压缩与解压
  17. python android自动化元素定位_appium+python android元素定位
  18. 通过3D打印自动售货机来定制你的食物
  19. 【Java】高并发-JUC:JUC中的Condition对象
  20. VM15安装之后没有出现VMnet1和VMnet8

热门文章

  1. 20分钟学会CMake
  2. vue插槽样式_Vue为什么要有插槽
  3. 研发团队资源成本优化实践
  4. 因缺失log4j.properties 配置文件导致flume无法正常启动。
  5. Python str类型方法实例概述及常用方法——04
  6. servlet的的生命周期和使用
  7. x-manager 管理 kvm虚拟机
  8. docker笔记-docker-container
  9. CSS3 Animation动画的十二原则
  10. 后缀数组的学习(三):SA数组实现代码分析