From e5e0c2a1da49a4f72f7847cf1b28bf2f397da418 Mon Sep 17 00:00:00 2001 From: jiqiu2021 Date: Wed, 25 Jun 2025 21:53:13 +0800 Subject: [PATCH] feat: github build scripts --- .github/workflows/build-release.yml | 174 ++++++++++++++++++++++++++++ .github/workflows/ci.yml | 115 ++++++++++++++++++ 2 files changed, 289 insertions(+) create mode 100644 .github/workflows/build-release.yml create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml new file mode 100644 index 0000000..bfcb901 --- /dev/null +++ b/.github/workflows/build-release.yml @@ -0,0 +1,174 @@ +name: Build and Release + +on: + push: + tags: + - 'v*' + workflow_dispatch: + inputs: + version: + description: 'Version tag (e.g., v1.0.0)' + required: true + default: 'v1.0.0' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '11' + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Cache Gradle dependencies + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Install NDK + run: | + echo "y" | sdkmanager "ndk;25.2.9519653" + echo "y" | sdkmanager "cmake;3.22.1" + + - name: Build ConfigApp + run: | + cd configapp + ../gradlew assembleDebug + cd .. + + - name: Build Module + run: | + cd module + ../gradlew assembleRelease + cd .. + + - name: Package Module + run: | + # 获取版本信息 + if [ "${{ github.event_name }}" == "push" ]; then + VERSION="${GITHUB_REF#refs/tags/}" + else + VERSION="${{ github.event.inputs.version }}" + fi + VERSION_CODE=$(echo $VERSION | sed 's/[^0-9]//g') + + # 创建临时目录 + TEMP_DIR="build/magisk_module" + rm -rf $TEMP_DIR + mkdir -p $TEMP_DIR + + # 创建 module.prop + cat > $TEMP_DIR/module.prop << EOF + id=zygisk-myinjector + name=Zygisk MyInjector + version=$VERSION + versionCode=$VERSION_CODE + author=jiqiu2022 + description=A Zygisk module for dynamic library injection with ConfigApp + EOF + + # 复制文件 + cp module/service.sh $TEMP_DIR/ + chmod 755 $TEMP_DIR/service.sh + + # 创建 zygisk 目录并复制 so 文件 + mkdir -p $TEMP_DIR/zygisk + for arch in armeabi-v7a arm64-v8a x86 x86_64; do + SO_PATH="module/build/intermediates/stripped_native_libs/release/out/lib/$arch/libmyinjector.so" + if [ -f "$SO_PATH" ]; then + cp "$SO_PATH" "$TEMP_DIR/zygisk/$arch.so" + fi + done + + # 复制 ConfigApp APK + cp configapp/build/outputs/apk/debug/configapp-debug.apk $TEMP_DIR/configapp.apk + + # 创建 META-INF 目录 + mkdir -p $TEMP_DIR/META-INF/com/google/android + touch $TEMP_DIR/META-INF/com/google/android/update-binary + touch $TEMP_DIR/META-INF/com/google/android/updater-script + + # 打包 + cd $TEMP_DIR + zip -r ../../zygisk-myinjector-$VERSION.zip * + cd ../.. + + # 列出文件内容 + echo "Module contents:" + unzip -l zygisk-myinjector-$VERSION.zip + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.event_name == 'push' && github.ref || github.event.inputs.version }} + release_name: Release ${{ github.event_name == 'push' && github.ref || github.event.inputs.version }} + body: | + ## Zygisk MyInjector Release + + ### 功能特性 + - 动态 SO 注入 + - 图形化配置界面 + - 支持 Riru Hide + - 自动安装配置应用 + + ### 安装说明 + 1. 下载 `zygisk-myinjector-*.zip` + 2. 在 Magisk Manager 中安装模块 + 3. 重启设备 + 4. ConfigApp 会自动安装 + + ### 更新日志 + 请查看 [commits](https://github.com/${{ github.repository }}/commits/${{ github.sha }}) + draft: false + prerelease: false + + - name: Get version for upload + id: get_version + run: | + if [ "${{ github.event_name }}" == "push" ]; then + VERSION="${GITHUB_REF#refs/tags/}" + else + VERSION="${{ github.event.inputs.version }}" + fi + echo "VERSION=$VERSION" >> $GITHUB_OUTPUT + + - name: Upload Module + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./zygisk-myinjector-${{ steps.get_version.outputs.VERSION }}.zip + asset_name: zygisk-myinjector-${{ steps.get_version.outputs.VERSION }}.zip + asset_content_type: application/zip + + - name: Upload ConfigApp APK + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./configapp/build/outputs/apk/debug/configapp-debug.apk + asset_name: ConfigApp-${{ steps.get_version.outputs.VERSION }}.apk + asset_content_type: application/vnd.android.package-archive \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..c553106 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,115 @@ +name: CI Build + +on: + push: + branches: [ main, develop, master ] + pull_request: + branches: [ main, develop, master ] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + submodules: 'recursive' + + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '11' + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Cache Gradle dependencies + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Install NDK + run: | + echo "y" | sdkmanager "ndk;25.2.9519653" + echo "y" | sdkmanager "cmake;3.22.1" + + - name: Build ConfigApp + run: | + cd configapp + ../gradlew assembleDebug + cd .. + + - name: Build Module + run: | + cd module + ../gradlew assembleRelease + cd .. + + - name: Package Module for Testing + run: | + # 创建临时目录 + TEMP_DIR="build/magisk_module" + rm -rf $TEMP_DIR + mkdir -p $TEMP_DIR + + # 创建 module.prop + cat > $TEMP_DIR/module.prop << EOF + id=zygisk-myinjector + name=Zygisk MyInjector + version=dev-${{ github.sha }} + versionCode=9999 + author=jiqiu2022 + description=A Zygisk module for dynamic library injection with ConfigApp (CI Build) + EOF + + # 复制文件 + cp module/service.sh $TEMP_DIR/ + chmod 755 $TEMP_DIR/service.sh + + # 创建 zygisk 目录并复制 so 文件 + mkdir -p $TEMP_DIR/zygisk + for arch in armeabi-v7a arm64-v8a x86 x86_64; do + SO_PATH="module/build/intermediates/stripped_native_libs/release/out/lib/$arch/libmyinjector.so" + if [ -f "$SO_PATH" ]; then + cp "$SO_PATH" "$TEMP_DIR/zygisk/$arch.so" + fi + done + + # 复制 ConfigApp APK + cp configapp/build/outputs/apk/debug/configapp-debug.apk $TEMP_DIR/configapp.apk + + # 创建 META-INF 目录 + mkdir -p $TEMP_DIR/META-INF/com/google/android + touch $TEMP_DIR/META_INF/com/google/android/update-binary + touch $TEMP_DIR/META_INF/com/google/android/updater-script + + # 打包 + cd $TEMP_DIR + zip -r ../../zygisk-myinjector-ci.zip * + cd ../.. + + # 列出文件内容 + echo "Module contents:" + unzip -l zygisk-myinjector-ci.zip + + - name: Upload Module Artifact + uses: actions/upload-artifact@v3 + with: + name: module-ci-${{ github.sha }} + path: zygisk-myinjector-ci.zip + + - name: Upload ConfigApp Artifact + uses: actions/upload-artifact@v3 + with: + name: configapp-ci-${{ github.sha }} + path: configapp/build/outputs/apk/debug/configapp-debug.apk \ No newline at end of file