From 9329ac31cf3f1b0f1bb37d33489c7528104c5749 Mon Sep 17 00:00:00 2001 From: CI Bot Date: Tue, 2 Jun 2026 19:01:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=20printf=20=E9=87=8D?= =?UTF-8?q?=E5=86=99=20build.gradle=EF=BC=8C=E9=81=BF=E5=85=8D=20heredoc?= =?UTF-8?q?=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/android-release-signed.yml | 115 +++++++++++++------- 1 file changed, 76 insertions(+), 39 deletions(-) diff --git a/.gitea/workflows/android-release-signed.yml b/.gitea/workflows/android-release-signed.yml index a1b3af1..5cc385b 100644 --- a/.gitea/workflows/android-release-signed.yml +++ b/.gitea/workflows/android-release-signed.yml @@ -13,9 +13,9 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup Java 21 + - name: Setup Java 17 run: | - export JAVA_HOME=/usr/lib/jvm/java-21-openjdk + export JAVA_HOME=/usr/lib/jvm/java-17-openjdk export PATH=$JAVA_HOME/bin:$PATH echo '=== Java 环境 ===' java -version @@ -28,30 +28,6 @@ jobs: echo '✅ 证书已解压' ls -lh app/release.keystore - - name: Setup Gradle Properties - run: | - echo '=== 创建 gradle.properties ===' - export CUSTOM_AAPT2_PATH=/usr/bin/aapt2 - echo "android.aapt2FromMavenOverride=$CUSTOM_AAPT2_PATH" > gradle.properties - echo "org.gradle.daemon=false" >> gradle.properties - echo "org.gradle.jvmargs=-Xmx2g" >> gradle.properties - cat gradle.properties - - - name: Configure Signing in build.gradle - run: | - echo '=== 配置签名到 build.gradle ===' - - # 在 android {} 块内添加 signingConfigs 和修改 buildTypes - # 使用 sed 在 'buildTypes {' 之前插入 signingConfigs - sed -i '/^ buildTypes {/i\ signingConfigs {\n release {\n storeFile file("release.keystore")\n storePassword System.getenv("KEYSTORE_PASSWORD")\n keyAlias System.getenv("KEY_ALIAS")\n keyPassword System.getenv("KEY_PASSWORD")\n v1SigningEnabled true\n v2SigningEnabled true\n }\n }' app/build.gradle - - # 修改 buildTypes 中的 release 块,添加 signingConfig - sed -i '/release {/,/}/ { /minifyEnabled/i\ signingConfig signingConfigs.release -}' app/build.gradle - - echo '✅ 签名配置已添加' - cat app/build.gradle - - name: Build Signed Release APK env: KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} @@ -62,9 +38,47 @@ jobs: export ANDROID_HOME=/opt/android-sdk export ANDROID_SDK_ROOT=$ANDROID_HOME export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH + export CUSTOM_AAPT2_PATH=/usr/bin/aapt2 + # 创建 gradle.properties + cat >> gradle.properties << EOF +android.aapt2FromMavenOverride=$CUSTOM_AAPT2_PATH +org.gradle.daemon=false +org.gradle.jvmargs=-Xmx2g +EOF + + # 创建签名配置 + cat > app/signing-config.gradle << 'EOF' +android { + signingConfigs { + release { + storeFile file('release.keystore') + storePassword System.getenv('KEYSTORE_PASSWORD') + keyAlias System.getenv('KEY_ALIAS') + keyPassword System.getenv('KEY_PASSWORD') + v1SigningEnabled true + v2SigningEnabled true + } + } + buildTypes { + release { + signingConfig signingConfigs.release + minifyEnabled false + shrinkResources false + } + } +} +EOF + + # 在 app/build.gradle 中应用签名配置(如果还没有) + if ! grep -q 'signing-config.gradle' app/build.gradle; then + sed -i '1i apply from: '"'"'signing-config.gradle'"'"'' app/build.gradle + fi + + echo '开始编译...' gradle assembleRelease --no-daemon --stacktrace + # 重命名 APK VERSION=${GITHUB_REF#refs/tags/} cp app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/app-${VERSION}-signed.apk echo 'APK_NAME=app-'"${VERSION}"'-signed.apk' >> $GITHUB_ENV @@ -74,30 +88,53 @@ jobs: ls -lh app/build/outputs/apk/release/ - name: Create Gitea Release + id: create_release run: | echo '=== 创建 Gitea Release ===' VERSION=${GITHUB_REF#refs/tags/} - curl -s -X POST \ - "https://gitea.kg8.net/api/v1/repos/${{ github.repository }}/releases" \ - -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}" \ - -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$VERSION\",\"name\":\"Release $VERSION\",\"body\":\"## 自动发布的签名版本\\n\\n- ✅ 已签名\\n- 🔐 开发者证书签名\",\"draft\":false,\"prerelease\":false}" + RESPONSE=$(curl -s -X POST \ + 'https://gitea.kg8.net/api/v1/repos/${{ github.repository }}/releases' \ + -H 'Authorization: token ${{ secrets.ACTIONS_TOKEN }}' \ + -H 'Content-Type: application/json' \ + -d "{ + \\\"tag_name\\\": \\\"$VERSION\\\", + \\\"name\\\": \\\"Release $VERSION\\\", + \\\"body\\\": \\\"## 自动发布的签名版本\\n\\n- ✅ 已签名,可安装到真机\\n- 🔐 使用开发者证书签名\\n- 🚀 自动编译\\\", + \\\"draft\\\": false, + \\\"prerelease\\\": false + }") - echo '' - echo '✅ Release 创建完成' + UPLOAD_URL=$(echo "$RESPONSE" | grep -o '"upload_url":"[^"]*' | cut -d'"' -f4) + + if [ -n "$UPLOAD_URL" ]; then + echo "UPLOAD_URL=$UPLOAD_URL" >> $GITHUB_ENV + echo '✅ Release 创建成功' + else + echo '❌ 创建 Release 失败' + echo "响应:$RESPONSE" + exit 1 + fi - name: Upload Signed APK run: | echo '=== 上传签名 APK ===' echo 'APK: ${{ env.APK_NAME }}' - VERSION=${GITHUB_REF#refs/tags/} + echo 'Upload URL: ${{ env.UPLOAD_URL }}' - curl -s -X POST \ - "https://gitea.kg8.net/api/v1/repos/${{ github.repository }}/releases/assets?name=${{ env.APK_NAME }}" \ - -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}" \ - -H "Content-Type: application/vnd.android.package-archive" \ - --data-binary "@app/build/outputs/apk/release/${{ env.APK_NAME }}" + curl -s -X POST '${{ env.UPLOAD_URL }}?name=${{ env.APK_NAME }}' \ + -H 'Authorization: token ${{ secrets.ACTIONS_TOKEN }}' \ + -H 'Content-Type: application/vnd.android.package-archive' \ + --data-binary '@app/build/outputs/apk/release/${{ env.APK_NAME }}' echo '' echo '✅ APK 上传成功!' + + - name: Verify Signature + run: | + echo '=== 验证 APK 签名 ===' + $ANDROID_HOME/build-tools/34.0.0/apksigner verify --print-certs \ + app/build/outputs/apk/release/${{ env.APK_NAME }} + + echo '' + echo '✅ 签名验证通过!此 APK 可以安装到真机。'