From 584ddbee6a75c17966ee415b858a9300dfe411a5 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Wed, 2 Nov 2022 23:02:11 +0600 Subject: [PATCH] Enable split apk generation (#717) --- .../workflows/TachiyomiSY-Release-Builder.yml | 83 -------------- .github/workflows/build_push.yml | 102 ++++++++++++++++++ ...iew-Builder.yml => build_push_preview.yml} | 14 +-- app/build.gradle.kts | 13 ++- .../tachiyomi/data/updater/GithubRelease.kt | 17 ++- 5 files changed, 132 insertions(+), 97 deletions(-) delete mode 100644 .github/workflows/TachiyomiSY-Release-Builder.yml create mode 100644 .github/workflows/build_push.yml rename .github/workflows/{TachiyomiSY-Preview-Builder.yml => build_push_preview.yml} (80%) diff --git a/.github/workflows/TachiyomiSY-Release-Builder.yml b/.github/workflows/TachiyomiSY-Release-Builder.yml deleted file mode 100644 index eb7a29d17..000000000 --- a/.github/workflows/TachiyomiSY-Release-Builder.yml +++ /dev/null @@ -1,83 +0,0 @@ -name: Release Builder - -on: - push: - branches: - - 'release' - -jobs: - check_wrapper: - name: Validate Gradle Wrapper - runs-on: ubuntu-latest - - steps: - - name: Clone repo - uses: actions/checkout@v2 - - - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 - - build: - name: Build app - needs: check_wrapper - runs-on: ubuntu-latest - - steps: - - name: Cancel previous runs - uses: styfle/cancel-workflow-action@0.5.0 - with: - access_token: ${{ github.token }} - - - name: Clone repo - uses: actions/checkout@v2 - - - name: Set up JDK 11 - uses: actions/setup-java@v3 - with: - java-version: 11 - distribution: adopt - - - name: Write google-services.json - uses: DamianReeves/write-file-action@v1.0 - with: - # The path to the file to write - path: app/google-services.json - # The contents of the file - contents: ${{ secrets.GOOGLE_SERVICES_TEXT }} - # The mode of writing to use: `overwrite`, `append`, or `preserve`. - write-mode: overwrite # optional, default is preserve - - - name: Build app - uses: gradle/gradle-command-action@v2 - with: - arguments: assembleStandardRelease --stacktrace - - - name: Sign APK - uses: r0adkll/sign-android-release@v1 - with: - releaseDirectory: app/build/outputs/apk/standard/release - signingKeyBase64: ${{ secrets.SIGNING_KEY }} - alias: ${{ secrets.ALIAS }} - keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.KEY_PASSWORD }} - - - name: Create release - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.run_number }} - release_name: TachiyomiSY - draft: true - prerelease: false - - - name: Upload APK to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ${{ env.SIGNED_RELEASE_FILE }} - asset_name: TachiyomiSY.apk - asset_content_type: application/vnd.android.package-archive diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml new file mode 100644 index 000000000..76aa49bed --- /dev/null +++ b/.github/workflows/build_push.yml @@ -0,0 +1,102 @@ +name: Release Builder +on: + push: + branches: + - 'release' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build release app + runs-on: ubuntu-latest + + steps: + - name: Clone repo + uses: actions/checkout@v3 + + - name: Validate Gradle Wrapper + uses: gradle/wrapper-validation-action@v1 + + - name: Set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: 11 + distribution: adopt + + # SY <-- + - name: Write google-services.json + uses: DamianReeves/write-file-action@v1.0 + with: + path: app/google-services.json + contents: ${{ secrets.GOOGLE_SERVICES_TEXT }} + write-mode: overwrite + # SY --> + + - name: Build app and run unit tests + uses: gradle/gradle-command-action@v2 + with: + arguments: assembleStandardRelease testStandardReleaseUnitTest --stacktrace + + - name: Sign APK + uses: r0adkll/sign-android-release@v1 + with: + releaseDirectory: app/build/outputs/apk/standard/release + signingKeyBase64: ${{ secrets.SIGNING_KEY }} + alias: ${{ secrets.ALIAS }} + keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} + keyPassword: ${{ secrets.KEY_PASSWORD }} + + - name: Clean up build artifacts + run: | + set -e + + mv app/build/outputs/apk/standard/release/app-standard-universal-release-unsigned-signed.apk TachiyomiSY.apk + sha=`sha256sum TachiyomiSY.apk | awk '{ print $1 }'` + echo "APK_UNIVERSAL_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-arm64-v8a-release-unsigned-signed.apk TachiyomiSY-arm64-v8a.apk + sha=`sha256sum TachiyomiSY-arm64-v8a.apk | awk '{ print $1 }'` + echo "APK_ARM64_V8A_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-armeabi-v7a-release-unsigned-signed.apk TachiyomiSY-armeabi-v7a.apk + sha=`sha256sum TachiyomiSY-armeabi-v7a.apk | awk '{ print $1 }'` + echo "APK_ARMEABI_V7A_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-x86-release-unsigned-signed.apk TachiyomiSY-x86.apk + sha=`sha256sum TachiyomiSY-x86.apk | awk '{ print $1 }'` + echo "APK_X86_SHA=$sha" >> $GITHUB_ENV + + cp app/build/outputs/apk/standard/release/app-standard-x86_64-release-unsigned-signed.apk TachiyomiSY-x86_64.apk + sha=`sha256sum TachiyomiSY-x86_64.apk | awk '{ print $1 }'` + echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV + + - name: Create release + uses: softprops/action-gh-release@v1 + with: + tag_name: ${{ github.run_number }} + name: TachiyomiSY + body: | + --- + + ### Checksums + + | Variant | SHA-256 | + | ------- | ------- | + | Universal | ${{ env.APK_UNIVERSAL_SHA }} | + | arm64-v8a | ${{ env.APK_ARM64_V8A_SHA }} | + | armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }} | + | x86 | ${{ env.APK_X86_SHA }} | + | x86_64 | ${{ env.APK_X86_64_SHA }} | + files: | + TachiyomiSY.apk + TachiyomiSY-arm64-v8a.apk + TachiyomiSY-armeabi-v7a.apk + TachiyomiSY-x86.apk + TachiyomiSY-x86_64.apk + draft: true + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/TachiyomiSY-Preview-Builder.yml b/.github/workflows/build_push_preview.yml similarity index 80% rename from .github/workflows/TachiyomiSY-Preview-Builder.yml rename to .github/workflows/build_push_preview.yml index 5029cca24..aa2c7bbfd 100644 --- a/.github/workflows/TachiyomiSY-Preview-Builder.yml +++ b/.github/workflows/build_push_preview.yml @@ -6,8 +6,9 @@ on: - 'master' jobs: - check_wrapper: - name: Validate Gradle Wrapper + trigger_preview_build: + name: Trigger preview build + if: ${{ github.ref == 'refs/heads/master' }} runs-on: ubuntu-latest steps: @@ -17,15 +18,6 @@ jobs: - name: Validate Gradle Wrapper uses: gradle/wrapper-validation-action@v1 - preview: - name: Build app preview - needs: check_wrapper - runs-on: ubuntu-latest - - steps: - - name: Clone repo - uses: actions/checkout@v2 - - name: TAG - Bump version and push tag uses: anothrNick/github-tag-action@1.39.0 env: diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d13395c90..a869461b4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,6 +19,8 @@ if (gradle.startParameter.taskRequests.toString().contains("Standard")) { shortcutHelper.setFilePath("./shortcuts.xml") +val SUPPORTED_ABIS = setOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64") + android { namespace = "eu.kanade.tachiyomi" compileSdk = AndroidConfig.compileSdk @@ -37,11 +39,20 @@ android { buildConfigField("boolean", "INCLUDE_UPDATER", "false") ndk { - abiFilters += setOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64") + abiFilters += SUPPORTED_ABIS } testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } + splits { + abi { + isEnable = true + reset() + include(*SUPPORTED_ABIS.toTypedArray()) + isUniversalApk = true + } + } + buildTypes { named("debug") { versionNameSuffix = "-${getCommitCount()}" diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubRelease.kt b/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubRelease.kt index ff2b0174c..807724cc9 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubRelease.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/updater/GithubRelease.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.data.updater +import android.os.Build import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -18,8 +19,20 @@ data class GithubRelease( * Get download link of latest release from the assets. * @return download link of latest release. */ - fun getDownloadLink(): String = - assets[0].downloadLink + fun getDownloadLink(): String { + val apkVariant = when (Build.SUPPORTED_ABIS[0]) { + "arm64-v8a" -> "-arm64-v8a" + "armeabi-v7a" -> "-armeabi-v7a" + "x86" -> "-x86" + "x86_64" -> "-x86_64" + else -> "" + } + + // SY <-- + return assets.find { it.downloadLink.contains("TachiyomiSY$apkVariant-") }?.downloadLink + // SY --> + ?: assets[0].downloadLink + } /** * Assets class containing download url.