Android多渠道打包这样做才酸爽!?
Android多渠道打包这样做才酸爽!?
unibigbear 发表于2年前
Android多渠道打包这样做才酸爽!?
  • 发表于 2年前
  • 阅读 14
  • 收藏 0
  • 点赞 2
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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

 

目的

 

  • 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的那些事!

 

共有 人打赏支持
粉丝 2
博文 70
码字总数 5874
×
unibigbear
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: