fastlane对Android平台支持实在有限,15个核心工具中仅有2个是用于Android平台的,其中:
1.Supply是用于上传APK文件和同步Meta信息到Google Play商店(类似iOS的Deliver)
2.Screengrab是用于生成各种屏幕尺寸的截屏,然后上传这些截屏到Google Play商店
以上都是我粘贴的。。。
所以说,对于我们国内的Android开发来说,P用没有。。。其实在持续分发上面,Android本身没有像iOS那样多的签名、证书等复杂的管理,基本上构建出一个apk安装包就能直接安装并使用,所以也不能都怪人家FASTLANE了,但是,FASTLANE本身支持自定义action与plugin的编写,这就提供了一个很自由的拓展平台,我们可以根据自定义一些action或plugin来实现一些操作。这里我们主要用FASTLANE来解决持续集成构建+渠道号写入(重签名)的问题:
首先,先看一下FASTLANE的安装环境以及其他要求:
1.Ruby 2.0以上(注意是“以上”不包括2.0,安装最新版本最好)
2.Gradle(版本一定要与RD开发使用的版本一致,避免在编译过程中由于gradle版本不一致导致编译问题)
3.Android SDK、Java环境变量
4.APP项目工程代码(直接Git拉取)
5.渠道号打包工具
一、FASTLANE项目工程初始化
打开终端,切到Android工程目录,命令行 fastlane init,这时会有几条信息需要你确认:
2.Package Name (com.krausefx.app)(输入包名):输入你项目的包名即可
3.Do you plan on uploading metadata, screenshots and builds to Google Play using fastlane?(是否上传Meta信息,截屏等到Google Play),选择N
完成以上几部之后,基本初始化就完成了,这时会在工程目录下发现这个文件夹:
第一眼看到这个的时候可能会有这种感觉,这啥?这就是FASTLANE?我要怎么运行?
首先,我们看看这个目录下的两个文件:Appfile、fastfile
appfile:它定义了您的应用程序全局的配置信息;
fastfile:它定义了驱动器的行为的“通道” FASTLANE;(官方文档Google直译)
简单点来说,appfile是放置配置参数的地方,fastfile则是存放我们需要运行的fastlane的命令行内容的文件,除了这两个文件,还有一个action文件夹,这里用来存放我们自定义的action(后面再介绍)。
二、FASTLANE命令执行
我们在使用fastlane执行命令的时候就用 fastlane XXX(命令名)的方式来执行,例如:fastlane beta,这条命令是通过fastlane来实现Android Rlease包的构建,编辑fastfile文件,如图:
这时不难发现,刚才执行的fastlane beta,其实就是执行fastfile中的一个lane,也就是说,通过在fastfile中添加并编写lane的内容,就可以去帮我们完成各种操作,而且,还有一点就是这一行:sh "your_script.sh",这说明fastlane是支持在lane中使用shell命令并执行shell脚本的(鼓掌)
常用的fastlane命令:
fastlane生命周期:
执行顺序
|
方法名
|
说明
|
---|---|---|
1 | before_all | 在执行 lane 之前只执行一次 |
2 | before_each | 每次执行 lane 之前都会执行一次 |
3 | lane | 自定义的任务 |
4 | after_each | 每次执行 lane 之后都会执行一次 |
5 | after_all | 在执行 lane 成功结束之后执行一次 |
6 | error | 在执行上述情况任意环境报错都会中止并执行一次 |
定义一个带参的lane:通过 option[:configuration] 取其中value,如图
再举一个例子,如下:
第一个框中内容为定义参数,由外部传参,第二个框则是自定义编写的action的调用,括号内为传入的参数,整体完成的操作就是git pull拉取代码,gradle clean、gradle assembleRelease构建Android包,最后add_channels_to_apk为自定义对生成的产物进行渠道号写入操作。前面说过,这里使用FASTLANE主要就是为了解决打包+渠道号写入的问题,到这里是不是就解决了?很遗憾...并没有,且看后面说明。
三、Android包构建+渠道号写入操作
渠道号的写入方式有很多种,有对apk文件后缀修改信息的方式、也有对apk解压后新增文件后再重签名的方式,但这两种方法在安全方面是不符合我们的要求的,所以我们采用的是通过修改apk解压后的assets文件夹目录下的channel文件内容后再进行重签名的方法,虽然略微低效,但是胜在安全。
1.首先是构建Android Release包,以现有的lane为基础,修改lane beta,注释掉 crashlytics这一行(这个是做上传信息到frabric crash信息统计平台的功能)在工程目录下执行命令 直接执行fastlane beta,开始构建Android apk,构建完成后会提示产物apk存放路径--./app/build/outputs/apk/
2.完成构建后接下来就是最后的一步操作,写入渠道号了,正如之前介绍的,fastlane里面是支持执行shell脚本的,所以结合我们现有的渠道包打包工具(见之前高源的分享–Android包重签名与渠道号),可以直接在lane中定义操作,完成打包后的渠道号写入操作,重新定义一个lane,照样命名为do_package_apk:
然后依然是在工程目录下执行命令:fastlane do_package_apk,接下来只需要在电脑前默默地看着fastlane给你秀就好了
PS..写得有点简陋,其实后面两句完全可以再封装成一个lane,然后再调用即可,后续优化 []~( ̄▽ ̄)~*
由于我们最终交付的渠道包有副标题要求,所以要构建几个不同的apk,如果要RD每次更改代码(项目中的AndroidManifest.xml文件)再提交再构建会很影响效率,所以QA可以在本地代码更新后,直接修改本地代码,然后执行构建操作,so我在这里取消了git pull的操作,避免代码冲突引起git报错问题。