update #25
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Android CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: Cache Gradle packages | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
restore-keys: | | |
${{ runner.os }}-gradle- | |
- name: Set up Android SDK | |
uses: android-actions/setup-android@v3 | |
- name: Generate signing key | |
run: | | |
keytool -genkey -v \ | |
-keystore my-release-key.keystore \ | |
-alias my-key-alias \ | |
-keyalg RSA \ | |
-keysize 2048 \ | |
-validity 10000 \ | |
-storepass password \ | |
-keypass password \ | |
-dname "CN=Android, OU=Android, O=Android, L=Unknown, ST=Unknown, C=US" | |
- name: Configure gradle.properties | |
run: | | |
cat << EOF > $GITHUB_WORKSPACE/gradle.properties | |
android.useAndroidX=true | |
android.enableJetifier=true | |
android.nonTransitiveRClass=true | |
RELEASE_STORE_FILE=my-release-key.keystore | |
RELEASE_STORE_PASSWORD=password | |
RELEASE_KEY_ALIAS=my-key-alias | |
RELEASE_KEY_PASSWORD=password | |
EOF | |
- name: Build signed APK | |
run: | | |
./gradlew assembleRelease | |
ls -l app/build/outputs/apk/release | |
- name: Verify APK signature | |
run: | | |
# 确保 build-tools 存在 | |
if [ ! -d "$ANDROID_HOME/build-tools" ]; then | |
echo "Installing build-tools..." | |
yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager "build-tools;34.0.0" | |
fi | |
# 使用最新 build-tools 版本 | |
BUILD_TOOLS_DIR=$(ls $ANDROID_HOME/build-tools | sort -V | tail -n 1) | |
APKSIGNER="$ANDROID_HOME/build-tools/$BUILD_TOOLS_DIR/apksigner" | |
echo "Using apksigner at: $APKSIGNER" | |
$APKSIGNER --version | |
apk_path=$(find app/build/outputs/apk/release -name "*.apk" | head -n 1) | |
if [ ! -f "$apk_path" ]; then | |
echo "❌ APK not found at $apk_path" | |
exit 1 | |
fi | |
echo "Verifying $apk_path" | |
$APKSIGNER verify --verbose "$apk_path" | |
echo "✅ APK verification successful" | |
- name: Upload signed APK | |
uses: actions/upload-artifact@v4 | |
with: | |
name: app-release-signed.apk | |
path: app/build/outputs/apk/release/*-release.apk |