背景
先说一下为什么要做这个事情,首先公司主体业务有两条线,我姑且称为业务A跟业务B吧,业务A为主,多数研发资源都在业务A上,我个人是负责的是业务B的Android端app开发(怎么像在面试做自我介绍==!),然后公司的打包机配置是按照业务A的配置去搭建的,业务A的项目比较老,jdk版本用的还是1.8,而我这边由于之前升级了targetsdk35了,项目的jdk版本已经切到17了,导致我这边没有办法在打包机上构建,只能本地打完包后扔到打包群里面再at某位测试去验收,这种方式时间久了难免会出现不少不方便的地方,比如
- 没有通知功能:构建完不得不手动将包复制到打包群里面,无法构建完后自动触发通知功能
- apk包分发不便:使用方必须把包下下来,然后adb install到对应测试机里面去
- apk包职能不清:单凭一个包文件,无法知道具体是哪个需求的,是不是最新的,最后只能重复再构建一次
- 构建触发只能是自己:有时在开发其他需求,某个测试要另外需求的包,只能停下手头工作切换到对应分支去打包,十分影响工作节奏与效率
但是现在有了AI工具的辅助,这段时间我已经逐步解决了上述这些问题,甚至还在这个基础上,增添了一些功能,最后用起来体验上,交付效率上甚至要超出了打包机,毕竟打包机构建一个包实在是太慢了,下面是解决的一些问题以及相关代码
生成局域网下载地址以及二维码
解决方案
启动 HTTP 下载服务器,提供统一的局域网下载地址,测试人员直接通过扫码或点击链接即可下载,无需任何额外传输步骤。
实现
配置服务器参数

启动 HTTP 服务

其中serve.py是一个http的文件服务器,它主要做两件事情
- 提供 APK 文件的 HTTP 下载
- 显示所有历史构建产物Html页面
输出下载地址与二维码链接

构建完后自动发到打包群
解决方案
打完包得到了链接与二维码后,需要自动在打包群发个构建通知,这里以飞书为例,通过飞书Webhook自动发送通知到打包群,消息包含:分支名、文件大小、构建类型、渠道、文件名、下载链接、所有产物列表链接、二维码图片链接。支持 @指定人员 附带自定义消息。
实现
飞书Webhook配置

feishu_send() 函数:构造飞书消息卡片并发送

发送入口

然后就实现了从构建到自动发送通知的整个流程了,只需要执行以下命令即可

问题与改进
下面是一些后期遇到的问题,对脚本做的一些优化和改进
问题
有一次,测试同学想验证某个分支的包,但是我没在这个分支上,以前也没构建过这个分支,所以本地global-apks目录下也没有该分支的产物,那咋办呢?考虑到这个脚本的构建分支还局限在开发环境所在的当前分支下,所以就想到了是否可以提供一个入口供其他人员去选择需要构建的分支,有他们来触发构建流程
解决方案
AI给出的答案是,在serve.py 中提供 POST /api/build?branch=xxx 这样一个API,HTML 页面新增一个分支选择弹窗,可从网页端直接触发任意远程分支的构建,构建完成后自动归档并提供下载。
构建入队

POST路由处理

分支列表

前端分支选择弹窗逻辑

"选择分支构建"按钮
添加按钮样式

问题
触发构建后,不知道当前走到哪一步了,是在拉取代码?还是在编译?或者编译失败了,貌似还得有个进度的提示
解决方案
给AI提出这个问题后,它给出的答案是,前端每2秒轮询 /api/status,实时显示构建状态面板,展示当前阶段(拉取代码 / 构建中 / 复制 APK)+ 已耗时。构建完成后自动跳转下载。
状态查询

状态更新方法

前端轮询与状态渲染

问题
选择分支构建的问题解决后,新的问题出现了,就是每次构建都会clone一个项目,构建次数多了之后,堆积的项目越来越多,严重影响了磁盘空间,所以需要加上每次构建完后把拉取的项目删掉的功能
解决方案
- 使用
git clone --depth=1只拉取最新提交,不包含历史 - 构建完成后,删除已 clone 的工作目录 (
shutil.rmtree),释放磁盘 - 下次构建该分支时重新 clone
--depth=1 浅克隆 + 超时控制

如果目录已存在则增量更新(fetch + reset)

构建完成后清理工作区

效果图

最后
相信当AI融入到了我们工作以及生活中后,我们的角色已经不再是coder了,而是逐渐在转换成为一个creator,我们需要掌握的能力,不再是一些编码能力以及专业知识,而是要去培养一些想象力,创造力以及语言组织能力,我们可以多去尝试一些比较复杂的,以前需要多人协作才能完成的事情,我想如果做到了这些,AI给每个人创造的价值,那都是很惊人的