可爱的 Github 为开发者们提供了一项名为 Github CI 的功能,帮助开发者在线构建各种项目,为构建耗时项目和没有构建设备的开发者提供帮助
当一提到开源,每个人应该都会想到白嫖和全球最大的开源社区 - Github。自动构建作为免费开放的功能可谓非常好用。
# 前言
我找到一个开源的安卓 NDK 项目,但因为没有电脑,作为小白的我起初使用 AIDE 进行构建,安装了 ndk 支持后发现,构建出的东西没有 so 文件?重试很多次后我才知道,这东西不支持 Cmake?Cmake 是个啥?去问度娘后才得到答案。然后我开始考虑用 termux 容器运行 arch Linux 进行构建,安装 sdkman,安装 gradle,ndk 没有 arm 架构的?然后到处查找,在 github 上找到一个,搞过来用,好的,用不了。纯小白便开始迷茫。逛了逛 Github 想起来,不是还有 github ci 吗?以前也没怎么接触过这个,就开始试试吧。
# 教程
条件
- 一个 github 仓库
- 对 git 操作流程有一定了解
- 安装 git (手机请用 termux)
# 配置 Github
仓库的建立和远程控制,网络上已经有了许多教程,在这里就不一一赘述了。
打开 Github 项目仓库页面,点击 Actions
在这个页面寻找你需要构建的项目,展开更多后,可以找到 Android Ci
的选项,选择它。
可以看到如下页面,直接点击下面的 Start commit
打开终端,在你的项目文件夹初始化 git 仓库
使用 ssh 将当前仓库和 github 的仓库建立远程连接
执行
git pull |
把远程仓库文件同步过来
然后执行
cd .github/workflows |
进入自动构建的配置文件夹
然后对配置文件 android.yml
进行编辑
- 把 java 版本更改为 8,以提高兼容
- 确定你需要设置构建的项目文件地址,并且存在 gradlew (用于 gradle 构建)
- 可以在 run 后面执行命令行,但不要用 cd 之类的指令,实测不能使用
_mulu
构建完成后所有生成的文件都会被删除 - 构建好后的文件可以通过 artifact 打包成 zip,在构建控制页面下载
以下为实例
name: Android CI | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
jobs: | |
build: | |
# 在 linux 上运行构建 (必要的话可以改为 windows) | |
runs-on: ubuntu-latest | |
# 初始化构建工具 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: set up JDK 8 | |
uses: actions/setup-java@v2 | |
with: | |
java-version: '8' | |
distribution: 'adopt' | |
cache: gradle | |
# 修改权限并进行构建 | |
- name: Grant execute permission for gradlew | |
run: chmod +x gradlew | |
- name: Build with Gradle | |
run: ./gradlew build | |
# 查找构建好的文件 | |
# 这里为寻找.apk 和.aar 后缀文件的路径 | |
- name: find apk | |
run: find ./ -regex ".*\.apk\|.*\.aar" | |
# 将构建好的含.apk 的文件上传 | |
- name: Upload APK | |
uses: actions/upload-artifact@v2 | |
with: | |
name: ok | |
path: app/build/outputs/apk/debug/*.apk | |
#这里的 path 路径是来自于 find apk 那一步的结果 |
修改完成后
将本地仓库推送 github,项目的自动构建就会按照配置文件运行
第一次构建成功可能因为路径问题不会上传 apk 文件
这时我们需要去 github ci 的 log 页面,寻找 find apk 那一行查看 apk 所在路径
如果其输出路径为 app/build/outputs/apk/,就打开终端,把配置文件 upload APK 那一步的 path 改为
app/build/outputs/apk/*.apk。
保存文件重新将本地仓库推送到 github
这次就可以得到构建好的 apk 了