generated from dellevin/template
修改github eta 2.6.1 兼容android13 去掉超级小爱hook
Some checks failed
Eta Build / 构建 Debug 与 Release APK (push) Has been cancelled
Some checks failed
Eta Build / 构建 Debug 与 Release APK (push) Has been cancelled
This commit is contained in:
52
.github/RELEASING.md
vendored
Normal file
52
.github/RELEASING.md
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
# Eta 发布流程
|
||||
|
||||
## 配置签名 Secrets
|
||||
|
||||
发布证书和密码不得提交到 Git。首次使用前,在仓库的
|
||||
`Settings > Secrets and variables > Actions` 中添加:
|
||||
|
||||
- `ETA_RELEASE_KEYSTORE_BASE64`:发布证书的 Base64 文本
|
||||
- `ETA_RELEASE_STORE_PASSWORD`:KeyStore 密码
|
||||
- `ETA_RELEASE_KEY_ALIAS`:Key alias
|
||||
- `ETA_RELEASE_KEY_PASSWORD`:Key 密码
|
||||
|
||||
macOS 可以用下面的命令复制证书的 Base64 文本:
|
||||
|
||||
```bash
|
||||
base64 < /path/to/Eta-release.jks | tr -d '\n' | pbcopy
|
||||
```
|
||||
|
||||
也可以使用 GitHub CLI。密码类 Secret 不要直接写在命令参数中,运行命令后按提示输入:
|
||||
|
||||
```bash
|
||||
base64 < /path/to/Eta-release.jks | gh secret set ETA_RELEASE_KEYSTORE_BASE64
|
||||
gh secret set ETA_RELEASE_STORE_PASSWORD
|
||||
gh secret set ETA_RELEASE_KEY_ALIAS
|
||||
gh secret set ETA_RELEASE_KEY_PASSWORD
|
||||
```
|
||||
|
||||
## 构建与发布
|
||||
|
||||
以下情况会在同一次工作流中生成 Debug APK 和经过签名验证的 Release APK,
|
||||
并作为两个可直接下载的 Actions Artifact 保存 14 天:
|
||||
|
||||
- 向 `main` 推送提交
|
||||
- 推送 `v*` 标签
|
||||
- 在 GitHub 的 `Actions > Eta Build` 中手动运行
|
||||
|
||||
工作流不会创建、修改或发布 GitHub Release。
|
||||
|
||||
正式发布前先更新 `versionCode` 和 `versionName`,然后创建与
|
||||
`versionName` 对应的标签。例如发布 `2.2.2`:
|
||||
|
||||
```bash
|
||||
git tag v2.2.2
|
||||
git push origin v2.2.2
|
||||
```
|
||||
|
||||
标签推送后,等待 `Eta Build` 工作流完成,然后:
|
||||
|
||||
1. 从该次工作流的 `Artifacts` 下载 `app-release.apk`。
|
||||
2. 在仓库的 `Releases > Draft a new release` 中选择已有标签。
|
||||
3. 填写 Release Notes 并上传 APK。
|
||||
4. 检查版本、说明和附件后,由维护者手动发布。
|
||||
117
.github/workflows/android-release.yml
vendored
Normal file
117
.github/workflows/android-release.yml
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
name: Eta Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: android-build-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-apks:
|
||||
name: 构建 Debug 与 Release APK
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 40
|
||||
|
||||
steps:
|
||||
- name: 检出代码
|
||||
uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
|
||||
|
||||
- name: 配置 JDK 25
|
||||
uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "25"
|
||||
|
||||
- name: 配置 Gradle
|
||||
uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6
|
||||
with:
|
||||
cache-provider: basic
|
||||
|
||||
- name: 配置 Android SDK 工具
|
||||
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4
|
||||
with:
|
||||
packages: ""
|
||||
log-accepted-android-sdk-licenses: false
|
||||
|
||||
- name: 安装 Android SDK 37
|
||||
run: sdkmanager --channel=3 "platforms;android-37.0"
|
||||
|
||||
- name: 还原发布证书
|
||||
env:
|
||||
ETA_RELEASE_KEYSTORE_BASE64: ${{ secrets.ETA_RELEASE_KEYSTORE_BASE64 }}
|
||||
ETA_RELEASE_STORE_PASSWORD: ${{ secrets.ETA_RELEASE_STORE_PASSWORD }}
|
||||
ETA_RELEASE_KEY_ALIAS: ${{ secrets.ETA_RELEASE_KEY_ALIAS }}
|
||||
ETA_RELEASE_KEY_PASSWORD: ${{ secrets.ETA_RELEASE_KEY_PASSWORD }}
|
||||
run: |
|
||||
if [[ -z "$ETA_RELEASE_KEYSTORE_BASE64" ||
|
||||
-z "$ETA_RELEASE_STORE_PASSWORD" ||
|
||||
-z "$ETA_RELEASE_KEY_ALIAS" ||
|
||||
-z "$ETA_RELEASE_KEY_PASSWORD" ]]; then
|
||||
echo "::error::缺少 Release 签名 Secrets,请检查仓库的 Actions Secrets。"
|
||||
exit 1
|
||||
fi
|
||||
printf '%s' "$ETA_RELEASE_KEYSTORE_BASE64" \
|
||||
| base64 --decode \
|
||||
> "$RUNNER_TEMP/eta-release.jks"
|
||||
|
||||
- name: 构建 Debug 与 Release APK
|
||||
env:
|
||||
ETA_RELEASE_STORE_FILE: ${{ runner.temp }}/eta-release.jks
|
||||
ETA_RELEASE_STORE_PASSWORD: ${{ secrets.ETA_RELEASE_STORE_PASSWORD }}
|
||||
ETA_RELEASE_KEY_ALIAS: ${{ secrets.ETA_RELEASE_KEY_ALIAS }}
|
||||
ETA_RELEASE_KEY_PASSWORD: ${{ secrets.ETA_RELEASE_KEY_PASSWORD }}
|
||||
run: >-
|
||||
./gradlew --no-daemon --no-configuration-cache
|
||||
:app:assembleDebug :app:assembleRelease
|
||||
|
||||
- name: 验证并整理 APK
|
||||
id: apk
|
||||
run: |
|
||||
debug_apk="app/build/outputs/apk/debug/app-debug.apk"
|
||||
release_apk="app/build/outputs/apk/release/app-release.apk"
|
||||
output_dir="$RUNNER_TEMP/apks"
|
||||
apksigner_path="$(find "$ANDROID_HOME/build-tools" \
|
||||
-type f -name apksigner | sort -V | tail -n 1)"
|
||||
|
||||
if [[ ! -f "$debug_apk" ]]; then
|
||||
echo "::error::未找到 Debug APK。"
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -f "$release_apk" ]]; then
|
||||
echo "::error::未找到 Release APK。"
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "$apksigner_path" ]]; then
|
||||
echo "::error::未找到 apksigner。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
"$apksigner_path" verify "$release_apk"
|
||||
mkdir -p "$output_dir"
|
||||
cp "$debug_apk" "$output_dir/app-debug.apk"
|
||||
cp "$release_apk" "$output_dir/app-release.apk"
|
||||
echo "debug_path=$output_dir/app-debug.apk" >> "$GITHUB_OUTPUT"
|
||||
echo "release_path=$output_dir/app-release.apk" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: 上传 Debug APK
|
||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||
with:
|
||||
path: ${{ steps.apk.outputs.debug_path }}
|
||||
archive: false
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
|
||||
- name: 上传 Release APK
|
||||
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
||||
with:
|
||||
path: ${{ steps.apk.outputs.release_path }}
|
||||
archive: false
|
||||
if-no-files-found: error
|
||||
retention-days: 14
|
||||
Reference in New Issue
Block a user