Android多渠道打包这样做才酸爽!?
2016-05-18 00:00
309 查看
多渠道主要目的是为了统计各个应用市场用户数据分析(比如活跃数,崩溃率等),收集用户信息,这时需要唯一标识来区分这些渠道,本文主要针对多渠道(几百个渠道甚至更多的情况)如何快速打包?
目的
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
2.安装Python2.7.10
3.安装Android的SDK
4.安装tomcat和jenkins
5.配置环境变量,启动服务
6.安装Android SDK依赖包
安装更新对应版本的SDK
手动编译测试Android项目
多渠道打包项目改造
包的签名在build.gradle中配置,打包后自动签名。
由于META-INF目录下是存放签名信息的,用来保证apk包的完整性和安全,在生成apk时对文件做校验计算并把结果存放在META-INF目录中,安装apk包时应用管理器会按照同样的算法对包里的文件做校验,如果和META-INF中的内容不一致,则无法安装,通过修改apk包在重新打包基本不可能,以此来保证apk包的安全,因此在打完第一个包时,可以在META-INF目录中添加一个channel_wandoujia空文件,代码匹配这个文件获取渠道名wandoujia,来快速实现多渠道打包的目的。
代码库根目录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讨论组哪些渠道已经发布
创建多渠道包归档项目:Android-Archive
[b]创建发布多渠道包项目:Android-Deploy[/b]
IOS打包流程
xcodebuild clean 清理build目录
xcodebuild archive 选择不同的环境/BundleID/ProvisionProfile/CodeSigningIdentify 编译,签名生成xcarchive文件放到工程根路径下的 build 文件夹里
xcodebuild -exportArchive 打包生成ipa
测试包自动上传Fir,生产包手动更新AppStore
爽在哪里?
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的那些事!
目的
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.安装JDK2.安装Python2.7.10
3.安装Android的SDK
4.安装tomcat和jenkins
5.配置环境变量,启动服务
6.安装Android SDK依赖包
安装更新对应版本的SDK
手动编译测试Android项目
多渠道打包项目改造
包的签名在build.gradle中配置,打包后自动签名。
由于META-INF目录下是存放签名信息的,用来保证apk包的完整性和安全,在生成apk时对文件做校验计算并把结果存放在META-INF目录中,安装apk包时应用管理器会按照同样的算法对包里的文件做校验,如果和META-INF中的内容不一致,则无法安装,通过修改apk包在重新打包基本不可能,以此来保证apk包的安全,因此在打完第一个包时,可以在META-INF目录中添加一个channel_wandoujia空文件,代码匹配这个文件获取渠道名wandoujia,来快速实现多渠道打包的目的。
代码库根目录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
[b]创建发布多渠道包项目:Android-Deploy[/b]
相关脚本
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的那些事!
相关文章推荐
- android布局 parent
- Android Fragment应用及原理
- Android5.1.1源码 - 打印dalvik指令函数
- Android studio 2.0 使用SQLite时错误
- 智能聊天机器人之图灵机器人
- android 跳转Intent (第三方应用) & 去掉标题栏 &可见性&透明背景
- Android 自定义控件之简单自定义一个TopBar
- Android Acitity随笔小记
- android layout id converter插件的安装及使用(包括常用插件)
- <Android 应用 之路> 天气预报(五)
- <Android 应用 之路> 天气预报(五)
- Android EditText 实现特殊格式输入
- Android-ManiFest
- Android开发遇到过期方法时的简单处理
- 【Android测试】【第十六节】Instrumentation——初识+实战
- AndroidStudio中删除module
- Android Studio配置与使用GSON框架解析json数据
- 【Android】20、活动的启动模式——singleTop
- android笔记(3)
- Android 侧滑面板的实现(DragLayout)