App Bundle 开发流程优化最新指北来啦~~~

Stella981
• 阅读 502

在上次: 应用支持谷歌官方 App Bundle 格式探索实践之路  一文中我们聊到应用升级使用 App Bundle 进行版本发布后,带来了各种好处,但是对于:开发 --> 测试 --> 版本发布,这个流程做了一定的妥协,就是开发阶段依然是 apk 的出包方式,发版阶段则利用开发的 shell 脚本协助正式包的验证工作。具体详情可查看之前的文章: 应用支持谷歌官方 App Bundle 格式探索实践之路

虽然这个蹩脚的方案,能满足日常的版本发布节奏,但是长久来看,弊端还是蛮大的,需要发布到 GP 的 aab 包,没有经过测试同学的完整性测试,会存在一定的 BUG 风险。比如之前就踩过坑:在其中一个版本,升级了项目依赖的 gradle 版本,apk 出包一切正常,但是 aab 包则由于新版本的 gradle 生成的清单文件由于路径发生变化,导致替换清单文件第三方登录授权 KEY 的逻辑没生效,从而导致第三方登录模块无法生效,详细情况可见上文: 了解如何从源码层寻找消除 Android Build Gradle 过期 API 的方案

所以开发过程中,以及发版阶段,测试同学需要对发布的 aab 包能够进行完整性测试;解决这个场景迫在眉睫。

让测试同学能够把 aab 包安装到手机进行测试,有两种可行方案:

  • 第一种是研发帮助测试同学把 aab 包安装到测试机中,不过这种对人员有极强的依赖,所以基本上是还未走完流程就已经被 PASS 掉了;

  • 第二种是借助 CI 自动完成出包,然后测试同学自己把 aab 包安装到测试机中,不需要研发同学参与帮忙;

第二种方案当然是最优解,不过这个方案要落地,有两个需要解决的现实问题:

  • CI 自动出 aab 包之后,由于 fir 并不支持 aab 格式安装包的上传,所以测试同学怎么顺利得从日常开发过程中拿到 aab 包,成了这个方案的第一个拦路虎;

  • 假设我们把第一个拦路虎 Game Over 掉了,面临的第二个难题是:测试同学如何把 aab 包安装到手机中呢?我猜你已经有想法了,还不容易么,把 bundletool 的文档给他们,教教他们怎么用就 OK 了;(只是这很不人性化~~~);

第一个拦路虎其实想解决也挺简单的,那就是想办法让 fir 支持 aab 格式安装包的上传,当然这个得得到 fir 官方的支持才行;这里不得不给 fir 他们点个赞,当时联系上他们的研发负责人之后,进行简单的沟通之后,快速得到了挺感动的答复:他们会尽快在 fir-cli 支持 aab 安装包的上传,虽然中间过程有些小波折,但最终结果是很完美的(给你们点赞):

fir-cli 更新日志:

方便拿包的问题得到解决,接下来就是要解决怎么安装的问题了,当然可能也很简单,那就是直接教会测试同学怎么使用 bundletool 命令工具把 aab 包装到手机上即可,不过就是测试同学的电脑需要满足一些环境要求:

  • adb 命令环境;

  • java 命令环境;

  • bundletool 命令环境;

  • 应用的签名信息:签名文件、签名密钥;

这样一样是极其繁琐的,并且有一个致命的问题就是会把应用的签名信息暴露给测试同学,这是难以接受的。

所以当时蹦出的想法是:是否可以直接做一个软件工具,把这些依赖环境打包进软件工具中,测试同学通过软件可以直接选择 aab 包即可自动安装到连接的设备中。

既然想法已有,那接下来的事当然是落地(梦想是要有滴,万一哪天实现了呢),首先软件得是跨平台的开发方案,毕竟想法这么美好,当然少不了其他同学也会用到,比如我们的设计湿同学、产品同学,这么一算下来 Mac、Window 平台全部覆盖到了,一通搜索,最后锁定采用 Electron 进行开发。

经过漫长的胡乱倒腾,过程省略一万字···(毕竟过程不重要,我们要滴是结果),最后得到一个可用的 aab 包安装辅助工具软件:AabInstallHelp,支持双平台出包:Mac、Window。丑媳妇总得见公婆,我们瞅瞅她的真面貌:

App Bundle 开发流程优化最新指北来啦~~~

软件很简陋(麻雀虽小,五脏俱全),但是足以解决目前 App Bundle 开放流程中面临的困境,操作方式也很简单,支持的功能也是很人性化:

  • 内置了所有依赖环境,无需复杂配置,开箱即用;

  • Mac、Window 双平台;

  • 支持直接拖动 aab 包到指定区域,安装完成自动启动应用;

虽然这个流程优化方案,还有很多瑕疵,比如不支持多设备,安装过程中电脑只能连接一台设备等等缺点,不过也算是能给 App Bundle 的开发流程提供了一种优化思路,最近也是把这个辅助软件开源了一个通用的版本:签名信息内置的是通用的,所以如果想自己公司业务使用的话,可以按着文档操作即可自己完成专属于你们自己业务的辅助软件。

最后感谢你们的阅读,希望能给你的 App Bundle 开发流程带来小小的帮助,也欢迎你们留言区一起交流你们的想法和方案。

点 "在看" 或者 "关注" 是对我的最大的肯定和鼓励。

附上相关地址

[1]  AabInstallHelp 软件地址: https://github.com/fireantzhang/AabInstallHelp
[2]  AppBundleDemo: https://github.com/fireantzhang/AppBundleDemo
[3]  fir-cli: https://github.com/FIRHQ/fir-cli
[4]  bundletool: https://developer.android.com/studio/command-line/bundletool

本文分享自微信公众号 - fireantzhang(fireantzhang)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这