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' branch: description: 'Branch to build from' required: false default: 'main' 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@v4 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 # 重命名 APK 以包含版本号 cp configapp/build/outputs/apk/debug/configapp-debug.apk ./ConfigApp-$VERSION.apk - name: Create Release id: create_release uses: softprops/action-gh-release@v2 with: token: ${{ secrets.GITHUB_TOKEN }} tag_name: ${{ github.event_name == 'push' && github.ref || github.event.inputs.version }} 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 files: | ./zygisk-myinjector-*.zip ./ConfigApp-*.apk