文档章节

Android多渠道打包这样做才酸爽!?

unibigbear
 unibigbear
发布于 2016/05/18 16:20
字数 1189
阅读 21
收藏 0
点赞 2
评论 0

多渠道主要目的是为了统计各个应用市场用户数据分析(比如活跃数,崩溃率等),收集用户信息,这时需要唯一标识来区分这些渠道,本文主要针对多渠道(几百个渠道甚至更多的情况)如何快速打包?

 

目的

 

  • Jenkins集成Gradle实现打包自动化

  • 通过Jenkins参数化构建实现自定义环境和渠道打包,签名

  • 测试包自动上传fir并通过钉钉发送通知

  • 正式包按版本归档到OSS,发布时拷贝包到发布目录

  • 自动刷新CDN

     

环境说明

 

  • 系统 : Centos6.5 x64

  • jdk-7u79-linux-x64

  • android-sdk_r24.4.1-linux

  • gradle-2.2.1

  • Python-2.7.10(操作DingTalk和OSS API)

  • Jenkins2.0/Tomcat-7.0.65

     

配置环境

1.安装JDK

 

2.安装Python2.7.10

 

 

3.安装Android的SDK

 

 

4.安装tomcat和jenkins

 

 

5.配置环境变量,启动服务

 

 

6.安装Android SDK依赖包

 

 

安装更新对应版本的SDK

 

 

手动编译测试Android项目

 

 

 

多渠道打包项目改造

  1. 包的签名在build.gradle中配置,打包后自动签名。

  2. 由于META-INF目录下是存放签名信息的,用来保证apk包的完整性和安全,在生成apk时对文件做校验计算并把结果存放在META-INF目录中,安装apk包时应用管理器会按照同样的算法对包里的文件做校验,如果和META-INF中的内容不一致,则无法安装,通过修改apk包在重新打包基本不可能,以此来保证apk包的安全,因此在打完第一个包时,可以在META-INF目录中添加一个channel_wandoujia空文件,代码匹配这个文件获取渠道名wandoujia,来快速实现多渠道打包的目的。

  3. 代码库根目录channel文件存放渠道名。

     


 

Android多渠道打包流程

基于上述方式实现多渠道打包流程如下:

  • 执行gradlew clean清除build目录

  • 执行gradlew assemble编译打包Debug/Release(已自动签名)

  • 上传Debug包到Fir

  • 通过DingTalk发送通知信息到QA讨论组(发送提测apk包版本,下载地址及扫描下载二维码)

  • 提测不通过,修复bug后再次执行前四步

  • 提测通过后,点击Jenkins打包归档多渠道按钮,将执行生成多渠道包并归档包到本地目录/data/2.0.1/xxx.apk

  • 可选择此步上传归档文件到OSS

  • 点击Jenkins发布按钮将最新版本相关渠道归档拷贝至OSS发布目录

  • 刷新CDN生效

  • 通过DingTalk发送通知信息到QA讨论组哪些渠道已经发布

 

配置步骤

配置Jenkins





 

创建多渠道包归档项目:Android-Archive


 

创建发布多渠道包项目:Android-Deploy

 

 

相关脚本

IOS打包流程

  • xcodebuild clean 清理build目录

  • xcodebuild archive 选择不同的环境/BundleID/ProvisionProfile/CodeSigningIdentify 编译,签名生成xcarchive文件放到工程根路径下的 build 文件夹里

  • xcodebuild -exportArchive 打包生成ipa

  • 测试包自动上传Fir,生产包手动更新AppStore

总结

       任何自动化的前提必须先规范化,针对Android多渠道打包渠道命名,apk包命名需要先统一,apk包不要多环境混用(生产环境和测试环境要分离,测试包可自定义切换);到了这里,会发现我TM乱七八糟搞了这一陀哪里酸爽了?另外一个思路是通过修改apk文件的注释,程序在启动时读取apk文件注释获取渠道名(但是Android系统直到API 19,也就是4.4以上的版本才支持data/app/.apk)

 

爽在哪里?

 

1. 打包不再需要开发本地执行(避免中断开发,多人协作时优势更为明显)
2. 多渠道打包时间在于第一个包编译生成和签名的时间,之后的无论多少渠道都只是修改包的META-INF/channel_wandoujia空文件名实现
3. 点下Jenkins按钮无需在等待打包过程,打包完成后发送消息到钉钉会话,这下爽了吗?

由于上传附件及文字限制,有时部分图片、文字可能显示不了,详情请见:http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000458&idx=3&sn=e7dc90c21fd205d3e7b1d82fdf8c3ce8#rd

欢迎大家一起交流。

扫描以下二维码,获取更多更精美文章!(扫码关注有意向不到的惊喜的哦!!)

关注我们微信订阅号( uniguytech100) 与服务号(uniguytech),获取更多更精美文章!

也欢迎加入【大家技术网讨论QQ群】,群号码:256175955,请备注你个人的介绍!让我们一起聊聊it的那些事!

 

本文转载自:http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000458&idx=3&sn=e7dc90c21fd205d3e7b1d82fd...

共有 人打赏支持
unibigbear
粉丝 1
博文 70
码字总数 5874
作品 0
闵行
Android studio 使用心得(十)---android studio 多渠道打包(三)

关于使用android studio 如何打包 大家可以看这两篇文章 Android studio 使用心得(四)---android studio 多渠道打包 Android studio 使用心得(四)---android studio 多渠道打包(二) 真正的项...

veidy
2015/07/28
0
0
Android studio 使用心得(四)---android studio 多渠道打包(二)

版权声明:本文出自veidy的博客,转载必须注明出处 转载请注明出处:http://my.oschina.net/aibenben/blog/370985 Android studio 使用心得(四)---android studio 多渠道打包 这篇文章讲了一...

veidy
2015/01/23
0
3
Android多渠道打包相关介绍

一、多渠道打包概述 由于国内存在着有众多的应用市场,在不同的应用市场可能有不同的统计需求,为此Android开发人员需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。在...

Ruheng
06/23
0
0
Android studio 使用心得(五)---代码混淆和破解apk

版权声明:本文出自veidy的博客,转载必须注明出处 转载请注明出处:http://my.oschina.net/aibenben/blog/371889 这篇文章等是跟大家分享一在Android studio 进行代码混淆配置。之前大家在e...

veidy
2015/01/26
0
4
Gradle 构建 android 应用常见问题解决指南

前言 android gradle 插件已经发展到0.5.7,同时gradle 本身也到了1.8,相比两个月前,android gradle 更快,更完善,也更好用了,为了让各位androider 早日用上gradle这样的神器,特地写一篇关于g...

打杂程序猿
2013/09/30
0
6
Gradle 构建 android 应用常见问题解决指南

前言 android gradle 插件已经发展到0.5.7,同时gradle 本身也到了1.8,相比两个月前,android gradle 更快,更完善,也更好用了,为了让各位androider 早日用上gradle这样的神器,特地写一篇关于g...

军歌
2014/02/13
0
0
Android项目实战(三十五):多渠道打包

   多渠道打包:   可以理解为:同时发布多个渠道的apk。分别上架不同的应用商店。这些apk带有各自渠道的标签,用于统计分析各个商店的下载次数等数据。   实现步骤   一、添加友盟渠...

听着music睡
2017/09/25
0
0
Android studio 使用心得(三)---从Eclipse迁移到Android studio

断断续续的也算是把eclipse上的代码成功迁移到android studio上来了,现在,我同事继续用eclipse,我用android studio,svn上还是之前eclipse的项目,迁移成功后,我也能happy的开发了,两不误...

veidy
2015/01/21
0
10
android studio gradle 配置修改

经过2年时间的研发,Google终于在近日正式发布了面向Android开发者的集成开发环境Android Studio 1.0(稳定版)。 未来计划 从Google的路线图可以看出,Android Studio未来会有3项改进: 1)...

习惯_搬砖
2014/12/10
0
1
Gradle实现Android多渠道定制化打包

最近在项目中遇到需要实现 Apk 多渠道、定制化打包, Google 、百度查找了一些资料,成功实现了上述功能,在此记录以备不时之需,温故而知新,可以为师矣~ 需求可以总结如下: 如何实现多个 ...

玄学酱
2017/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
58分钟前
0
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
0
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
0
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
10
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
0
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
2
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部