diff --git a/.gitea/workflows/android-release-signed.yml b/.gitea/workflows/android-release-signed.yml index 5cc385b..a1664ef 100644 --- a/.gitea/workflows/android-release-signed.yml +++ b/.gitea/workflows/android-release-signed.yml @@ -25,9 +25,25 @@ jobs: echo '=== 配置签名证书 ===' mkdir -p app echo '${{ secrets.KEYSTORE_BASE64 }}' | base64 -d > app/release.keystore - echo '✅ 证书已解压' + echo '证书已解压' ls -lh app/release.keystore + - name: Setup Gradle Properties + run: | + echo '=== 创建 gradle.properties ===' + echo 'android.aapt2FromMavenOverride=/usr/bin/aapt2' > gradle.properties + echo 'org.gradle.daemon=false' >> gradle.properties + echo 'org.gradle.jvmargs=-Xmx2g' >> gradle.properties + echo 'org.gradle.java.home=/usr/lib/jvm/java-17-openjdk' >> gradle.properties + echo 'android.useAndroidX=true' >> gradle.properties + cat gradle.properties + + - name: Copy Signed build.gradle + run: | + echo '=== 复制签名版 build.gradle ===' + cp .gitea/workflows/build.gradle.signed app/build.gradle + echo '已复制' + - name: Build Signed Release APK env: KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} @@ -38,103 +54,74 @@ 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 + echo "APK_NAME=app-${VERSION}-signed.apk" >> $GITHUB_ENV echo '' - echo '✅ 编译完成!' + echo '编译完成!' ls -lh app/build/outputs/apk/release/ - name: Create Gitea Release - id: create_release run: | echo '=== 创建 Gitea Release ===' VERSION=${GITHUB_REF#refs/tags/} - 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 - }") + # 先检查 Release 是否已存在 + EXISTING=$(curl -s "https://gitea.kg8.net/api/v1/repos/${{ github.repository }}/releases/tags/$VERSION" \ + -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}") - UPLOAD_URL=$(echo "$RESPONSE" | grep -o '"upload_url":"[^"]*' | cut -d'"' -f4) + RELEASE_ID=$(echo "$EXISTING" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) - if [ -n "$UPLOAD_URL" ]; then - echo "UPLOAD_URL=$UPLOAD_URL" >> $GITHUB_ENV - echo '✅ Release 创建成功' + if [ -n "$RELEASE_ID" ] && [ "$RELEASE_ID" != "null" ]; then + echo "Release 已存在,ID: $RELEASE_ID" else - echo '❌ 创建 Release 失败' - echo "响应:$RESPONSE" - exit 1 + echo '创建新 Release...' + 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- 🔐 开发者证书签名\",\"draft\":false,\"prerelease\":false}") + + RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + echo "新 Release 创建成功,ID: $RELEASE_ID" fi + + echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV + echo "RELEASE_ID: $RELEASE_ID" - name: Upload Signed APK run: | echo '=== 上传签名 APK ===' - echo 'APK: ${{ env.APK_NAME }}' - echo 'Upload URL: ${{ env.UPLOAD_URL }}' + echo "APK: ${{ env.APK_NAME }}" + echo "Release ID: ${{ env.RELEASE_ID }}" - 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 }}' + # Gitea 上传 API: POST /repos/{owner}/{repo}/releases/{id}/assets + UPLOAD_RESPONSE=$(curl -s -X POST \ + "https://gitea.kg8.net/api/v1/repos/${{ github.repository }}/releases/${{ env.RELEASE_ID }}/assets" \ + -H "Authorization: token ${{ secrets.ACTIONS_TOKEN }}" \ + -H "Content-Type: application/vnd.android.package-archive" \ + -F "attachment=@app/build/outputs/apk/release/${{ env.APK_NAME }}" \ + -F "name=${{ env.APK_NAME }}") - echo '' - echo '✅ APK 上传成功!' + echo "上传响应: $UPLOAD_RESPONSE" + + if echo "$UPLOAD_RESPONSE" | grep -q '"browser_download_url"'; then + echo '' + echo '✅ APK 上传成功!' + echo "$UPLOAD_RESPONSE" | grep -o '"browser_download_url":"[^"]*"' + else + echo '❌ 上传失败' + echo "$UPLOAD_RESPONSE" + exit 1 + fi - 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 可以安装到真机。' + app/build/outputs/apk/release/${{ env.APK_NAME }} || true + echo '验证完成'