diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fc7c06cf..802b78384 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: - name: Spotless Check run: ./gradlew spotlessCheck - oss: + default: runs-on: ubuntu-latest steps: - name: Checkout @@ -80,123 +80,46 @@ jobs: key: cmake-default-${{ hashFiles('gradle/libs.versions.toml', 'app/build.gradle.kts', 'app/src/main/cpp/CMakeLists.txt') }} restore-keys: cmake-default- - - name: Build OSS - run: ./gradlew assembleDefaultOssRelease + - name: Build + run: ./gradlew assembleDefaultRelease - - name: Upload OSS ARM64 + - name: Upload ARM64 uses: actions/upload-artifact@v4 with: - name: default-oss-arm64-v8a-${{ github.sha }} - path: app/build/outputs/apk/defaultOss/release/app-default-oss-arm64-v8a-release.apk + name: default-arm64-v8a-${{ github.sha }} + path: app/build/outputs/apk/default/release/app-default-arm64-v8a-release.apk - - name: Upload OSS x86_64 + - name: Upload x86_64 uses: actions/upload-artifact@v4 with: - name: default-oss-x86_64-${{ github.sha }} - path: app/build/outputs/apk/defaultOss/release/app-default-oss-x86_64-release.apk + name: default-x86_64-${{ github.sha }} + path: app/build/outputs/apk/default/release/app-default-x86_64-release.apk - - name: Upload OSS ARM32 + - name: Upload ARM32 uses: actions/upload-artifact@v4 with: - name: default-oss-armeabi-v7a-${{ github.sha }} - path: app/build/outputs/apk/defaultOss/release/app-default-oss-armeabi-v7a-release.apk + name: default-armeabi-v7a-${{ github.sha }} + path: app/build/outputs/apk/default/release/app-default-armeabi-v7a-release.apk - - name: Upload OSS x86 + - name: Upload x86 uses: actions/upload-artifact@v4 with: - name: default-oss-x86-${{ github.sha }} - path: app/build/outputs/apk/defaultOss/release/app-default-oss-x86-release.apk + name: default-x86-${{ github.sha }} + path: app/build/outputs/apk/default/release/app-default-x86-release.apk - - name: Upload OSS mapping + - name: Upload mapping uses: actions/upload-artifact@v4 with: - name: default-oss-mapping-${{ github.sha }} - path: app/build/outputs/mapping/defaultOssRelease/mapping.txt + name: default-mapping-${{ github.sha }} + path: app/build/outputs/mapping/defaultRelease/mapping.txt - - name: Upload OSS native debug symbols + - name: Upload native debug symbols uses: actions/upload-artifact@v4 with: - name: default-oss-native-debug-symbols-${{ github.sha }} - path: app/build/outputs/native-debug-symbols/defaultOssRelease/native-debug-symbols.zip + name: default-native-debug-symbols-${{ github.sha }} + path: app/build/outputs/native-debug-symbols/defaultRelease/native-debug-symbols.zip - gms: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 21 - - - name: Install Rust Toolchain - run: rustup update && rustup target add armv7-linux-androideabi aarch64-linux-android i686-linux-android x86_64-linux-android && rustup component add rustfmt clippy - - - name: Rust Cache - uses: Swatinem/rust-cache@v2 - with: - workspaces: "./app/src/main/rust" - shared-key: ${{ runner.os }} - save-if: "false" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v3 - with: - cache-encryption-key: ${{ secrets.GradleEncryptionKey }} - gradle-home-cache-cleanup: true - - - name: CMake Cache - uses: actions/cache/restore@v4 - with: - path: app/.cxx - key: cmake-default-${{ hashFiles('gradle/libs.versions.toml', 'app/build.gradle.kts', 'app/src/main/cpp/CMakeLists.txt') }} - restore-keys: cmake-default- - - - name: Install Build Tools - run: echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install "build-tools;35.0.0-rc1" - - - name: Build GMS - run: ./gradlew assembleDefaultGmsRelease - - - name: Upload GMS ARM64 - uses: actions/upload-artifact@v4 - with: - name: default-gms-arm64-v8a-${{ github.sha }} - path: app/build/outputs/apk/defaultGms/release/app-default-gms-arm64-v8a-release.apk - - - name: Upload GMS x86_64 - uses: actions/upload-artifact@v4 - with: - name: default-gms-x86_64-${{ github.sha }} - path: app/build/outputs/apk/defaultGms/release/app-default-gms-x86_64-release.apk - - - name: Upload GMS ARM32 - uses: actions/upload-artifact@v4 - with: - name: default-gms-armeabi-v7a-${{ github.sha }} - path: app/build/outputs/apk/defaultGms/release/app-default-gms-armeabi-v7a-release.apk - - - name: Upload GMS x86 - uses: actions/upload-artifact@v4 - with: - name: default-gms-x86-${{ github.sha }} - path: app/build/outputs/apk/defaultGms/release/app-default-gms-x86-release.apk - - - name: Upload GMS mapping - uses: actions/upload-artifact@v4 - with: - name: default-gms-mapping-${{ github.sha }} - path: app/build/outputs/mapping/defaultGmsRelease/mapping.txt - - - name: Upload GMS native debug symbols - uses: actions/upload-artifact@v4 - with: - name: default-gms-native-debug-symbols-${{ github.sha }} - path: app/build/outputs/native-debug-symbols/defaultGmsRelease/native-debug-symbols.zip - - marshmallow-oss: + marshmallow: runs-on: ubuntu-latest steps: - name: Checkout @@ -234,118 +157,41 @@ jobs: - name: Install Build Tools run: echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install "build-tools;35.0.0-rc1" - - name: Build Marshmallow OSS - run: ./gradlew assembleMarshmallowOssRelease + - name: Build + run: ./gradlew assembleMarshmallowRelease - - name: Upload Marshmallow OSS ARM64 + - name: Upload ARM64 uses: actions/upload-artifact@v4 with: - name: marshmallow-oss-arm64-v8a-${{ github.sha }} - path: app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-arm64-v8a-release.apk + name: marshmallow-arm64-v8a-${{ github.sha }} + path: app/build/outputs/apk/marshmallow/release/app-marshmallow-arm64-v8a-release.apk - - name: Upload Marshmallow OSS x86_64 + - name: Upload x86_64 uses: actions/upload-artifact@v4 with: - name: marshmallow-oss-x86_64-${{ github.sha }} - path: app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-x86_64-release.apk + name: marshmallow-x86_64-${{ github.sha }} + path: app/build/outputs/apk/marshmallow/release/app-marshmallow-x86_64-release.apk - - name: Upload Marshmallow OSS ARM32 + - name: Upload ARM32 uses: actions/upload-artifact@v4 with: - name: marshmallow-oss-armeabi-v7a-${{ github.sha }} - path: app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-armeabi-v7a-release.apk + name: marshmallow-armeabi-v7a-${{ github.sha }} + path: app/build/outputs/apk/marshmallow/release/app-marshmallow-armeabi-v7a-release.apk - - name: Upload Marshmallow OSS x86 + - name: Upload x86 uses: actions/upload-artifact@v4 with: - name: marshmallow-oss-x86-${{ github.sha }} - path: app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-x86-release.apk + name: marshmallow-x86-${{ github.sha }} + path: app/build/outputs/apk/marshmallow/release/app-marshmallow-x86-release.apk - - name: Upload Marshmallow OSS mapping + - name: Upload mapping uses: actions/upload-artifact@v4 with: - name: marshmallow-oss-mapping-${{ github.sha }} - path: app/build/outputs/mapping/marshmallowOssRelease/mapping.txt + name: marshmallow-mapping-${{ github.sha }} + path: app/build/outputs/mapping/marshmallowRelease/mapping.txt - - name: Upload Marshmallow OSS native debug symbols + - name: Upload native debug symbols uses: actions/upload-artifact@v4 with: - name: marshmallow-oss-native-debug-symbols-${{ github.sha }} - path: app/build/outputs/native-debug-symbols/marshmallowOssRelease/native-debug-symbols.zip - - marshmallow-gms: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Java - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 21 - - - name: Install Rust Toolchain - run: rustup update && rustup target add armv7-linux-androideabi aarch64-linux-android i686-linux-android x86_64-linux-android && rustup component add rustfmt clippy - - - name: Rust Cache - uses: Swatinem/rust-cache@v2 - with: - workspaces: "./app/src/main/rust" - shared-key: ${{ runner.os }} - save-if: "false" - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@v3 - with: - cache-encryption-key: ${{ secrets.GradleEncryptionKey }} - gradle-home-cache-cleanup: true - - - name: CMake Cache - uses: actions/cache/restore@v4 - with: - path: app/.cxx - key: cmake-marshmallow-${{ hashFiles('gradle/libs.versions.toml', 'app/build.gradle.kts', 'app/src/main/cpp/CMakeLists.txt') }} - restore-keys: cmake-marshmallow- - - - name: Install Build Tools - run: echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install "build-tools;35.0.0-rc1" - - - name: Build Marshmallow GMS - run: ./gradlew assembleMarshmallowGmsRelease - - - name: Upload Marshmallow GMS ARM64 - uses: actions/upload-artifact@v4 - with: - name: marshmallow-gms-arm64-v8a-${{ github.sha }} - path: app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-arm64-v8a-release.apk - - - name: Upload Marshmallow GMS x86_64 - uses: actions/upload-artifact@v4 - with: - name: marshmallow-gms-x86_64-${{ github.sha }} - path: app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-x86_64-release.apk - - - name: Upload Marshmallow GMS ARM32 - uses: actions/upload-artifact@v4 - with: - name: marshmallow-gms-armeabi-v7a-${{ github.sha }} - path: app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-armeabi-v7a-release.apk - - - name: Upload Marshmallow GMS x86 - uses: actions/upload-artifact@v4 - with: - name: marshmallow-gms-x86-${{ github.sha }} - path: app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-x86-release.apk - - - name: Upload Marshmallow GMS mapping - uses: actions/upload-artifact@v4 - with: - name: marshmallow-gms-mapping-${{ github.sha }} - path: app/build/outputs/mapping/marshmallowGmsRelease/mapping.txt - - - name: Upload Marshmallow GMS native debug symbols - uses: actions/upload-artifact@v4 - with: - name: marshmallow-gms-native-debug-symbols-${{ github.sha }} - path: app/build/outputs/native-debug-symbols/marshmallowGmsRelease/native-debug-symbols.zip + name: marshmallow-native-debug-symbols-${{ github.sha }} + path: app/build/outputs/native-debug-symbols/marshmallowRelease/native-debug-symbols.zip diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index c41081f84..26d1df181 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -43,71 +43,39 @@ jobs: - name: Rename Apks run: | - mv app/build/outputs/apk/defaultOss/release/app-default-oss-universal-release.apk EhViewer-${{ github.ref_name }}-default-oss-universal.apk - mv app/build/outputs/apk/defaultOss/release/app-default-oss-arm64-v8a-release.apk EhViewer-${{ github.ref_name }}-default-oss-arm64-v8a.apk - mv app/build/outputs/apk/defaultOss/release/app-default-oss-x86_64-release.apk EhViewer-${{ github.ref_name }}-default-oss-x86_64.apk - mv app/build/outputs/apk/defaultOss/release/app-default-oss-x86-release.apk EhViewer-${{ github.ref_name }}-default-oss-x86.apk - mv app/build/outputs/apk/defaultOss/release/app-default-oss-armeabi-v7a-release.apk EhViewer-${{ github.ref_name }}-default-oss-armeabi-v7a.apk - mv app/build/outputs/mapping/defaultOssRelease/mapping.txt EhViewer-${{ github.ref_name }}-default-oss-mapping.txt - mv app/build/outputs/native-debug-symbols/defaultOssRelease/native-debug-symbols.zip EhViewer-${{ github.ref_name }}-default-oss-native-debug-symbols.zip + mv app/build/outputs/apk/default/release/app-default-universal-release.apk EhViewer-${{ github.ref_name }}-default-universal.apk + mv app/build/outputs/apk/default/release/app-default-arm64-v8a-release.apk EhViewer-${{ github.ref_name }}-default-arm64-v8a.apk + mv app/build/outputs/apk/default/release/app-default-x86_64-release.apk EhViewer-${{ github.ref_name }}-default-x86_64.apk + mv app/build/outputs/apk/default/release/app-default-x86-release.apk EhViewer-${{ github.ref_name }}-default-x86.apk + mv app/build/outputs/apk/default/release/app-default-armeabi-v7a-release.apk EhViewer-${{ github.ref_name }}-default-armeabi-v7a.apk + mv app/build/outputs/mapping/defaultRelease/mapping.txt EhViewer-${{ github.ref_name }}-default-mapping.txt + mv app/build/outputs/native-debug-symbols/defaultRelease/native-debug-symbols.zip EhViewer-${{ github.ref_name }}-default-native-debug-symbols.zip - mv app/build/outputs/apk/defaultGms/release/app-default-gms-universal-release.apk EhViewer-${{ github.ref_name }}-default-gms-universal.apk - mv app/build/outputs/apk/defaultGms/release/app-default-gms-arm64-v8a-release.apk EhViewer-${{ github.ref_name }}-default-gms-arm64-v8a.apk - mv app/build/outputs/apk/defaultGms/release/app-default-gms-x86_64-release.apk EhViewer-${{ github.ref_name }}-default-gms-x86_64.apk - mv app/build/outputs/apk/defaultGms/release/app-default-gms-x86-release.apk EhViewer-${{ github.ref_name }}-default-gms-x86.apk - mv app/build/outputs/apk/defaultGms/release/app-default-gms-armeabi-v7a-release.apk EhViewer-${{ github.ref_name }}-default-gms-armeabi-v7a.apk - mv app/build/outputs/mapping/defaultGmsRelease/mapping.txt EhViewer-${{ github.ref_name }}-default-gms-mapping.txt - mv app/build/outputs/native-debug-symbols/defaultGmsRelease/native-debug-symbols.zip EhViewer-${{ github.ref_name }}-default-gms-native-debug-symbols.zip - - mv app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-universal-release.apk EhViewer-${{ github.ref_name }}-marshmallow-oss-universal.apk - mv app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-arm64-v8a-release.apk EhViewer-${{ github.ref_name }}-marshmallow-oss-arm64-v8a.apk - mv app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-x86_64-release.apk EhViewer-${{ github.ref_name }}-marshmallow-oss-x86_64.apk - mv app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-x86-release.apk EhViewer-${{ github.ref_name }}-marshmallow-oss-x86.apk - mv app/build/outputs/apk/marshmallowOss/release/app-marshmallow-oss-armeabi-v7a-release.apk EhViewer-${{ github.ref_name }}-marshmallow-oss-armeabi-v7a.apk - mv app/build/outputs/mapping/marshmallowOssRelease/mapping.txt EhViewer-${{ github.ref_name }}-marshmallow-oss-mapping.txt - mv app/build/outputs/native-debug-symbols/marshmallowOssRelease/native-debug-symbols.zip EhViewer-${{ github.ref_name }}-marshmallow-oss-native-debug-symbols.zip - - mv app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-universal-release.apk EhViewer-${{ github.ref_name }}-marshmallow-gms-universal.apk - mv app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-arm64-v8a-release.apk EhViewer-${{ github.ref_name }}-marshmallow-gms-arm64-v8a.apk - mv app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-x86_64-release.apk EhViewer-${{ github.ref_name }}-marshmallow-gms-x86_64.apk - mv app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-x86-release.apk EhViewer-${{ github.ref_name }}-marshmallow-gms-x86.apk - mv app/build/outputs/apk/marshmallowGms/release/app-marshmallow-gms-armeabi-v7a-release.apk EhViewer-${{ github.ref_name }}-marshmallow-gms-armeabi-v7a.apk - mv app/build/outputs/mapping/marshmallowGmsRelease/mapping.txt EhViewer-${{ github.ref_name }}-marshmallow-gms-mapping.txt - mv app/build/outputs/native-debug-symbols/marshmallowGmsRelease/native-debug-symbols.zip EhViewer-${{ github.ref_name }}-marshmallow-gms-native-debug-symbols.zip + mv app/build/outputs/apk/marshmallow/release/app-marshmallow-universal-release.apk EhViewer-${{ github.ref_name }}-marshmallow-universal.apk + mv app/build/outputs/apk/marshmallow/release/app-marshmallow-arm64-v8a-release.apk EhViewer-${{ github.ref_name }}-marshmallow-arm64-v8a.apk + mv app/build/outputs/apk/marshmallow/release/app-marshmallow-x86_64-release.apk EhViewer-${{ github.ref_name }}-marshmallow-x86_64.apk + mv app/build/outputs/apk/marshmallow/release/app-marshmallow-x86-release.apk EhViewer-${{ github.ref_name }}-marshmallow-x86.apk + mv app/build/outputs/apk/marshmallow/release/app-marshmallow-armeabi-v7a-release.apk EhViewer-${{ github.ref_name }}-marshmallow-armeabi-v7a.apk + mv app/build/outputs/mapping/marshmallowRelease/mapping.txt EhViewer-${{ github.ref_name }}-marshmallow-mapping.txt + mv app/build/outputs/native-debug-symbols/marshmallowRelease/native-debug-symbols.zip EhViewer-${{ github.ref_name }}-marshmallow-native-debug-symbols.zip - name: Releases uses: softprops/action-gh-release@v2 with: body: Bump Version files: | - EhViewer-${{ github.ref_name }}-default-oss-universal.apk - EhViewer-${{ github.ref_name }}-default-oss-arm64-v8a.apk - EhViewer-${{ github.ref_name }}-default-oss-x86_64.apk - EhViewer-${{ github.ref_name }}-default-oss-x86.apk - EhViewer-${{ github.ref_name }}-default-oss-armeabi-v7a.apk - EhViewer-${{ github.ref_name }}-default-oss-mapping.txt - EhViewer-${{ github.ref_name }}-default-oss-native-debug-symbols.zip + EhViewer-${{ github.ref_name }}-default-universal.apk + EhViewer-${{ github.ref_name }}-default-arm64-v8a.apk + EhViewer-${{ github.ref_name }}-default-x86_64.apk + EhViewer-${{ github.ref_name }}-default-x86.apk + EhViewer-${{ github.ref_name }}-default-armeabi-v7a.apk + EhViewer-${{ github.ref_name }}-default-mapping.txt + EhViewer-${{ github.ref_name }}-default-native-debug-symbols.zip - EhViewer-${{ github.ref_name }}-default-gms-universal.apk - EhViewer-${{ github.ref_name }}-default-gms-arm64-v8a.apk - EhViewer-${{ github.ref_name }}-default-gms-x86_64.apk - EhViewer-${{ github.ref_name }}-default-gms-x86.apk - EhViewer-${{ github.ref_name }}-default-gms-armeabi-v7a.apk - EhViewer-${{ github.ref_name }}-default-gms-mapping.txt - EhViewer-${{ github.ref_name }}-default-gms-native-debug-symbols.zip - - EhViewer-${{ github.ref_name }}-marshmallow-oss-universal.apk - EhViewer-${{ github.ref_name }}-marshmallow-oss-arm64-v8a.apk - EhViewer-${{ github.ref_name }}-marshmallow-oss-x86_64.apk - EhViewer-${{ github.ref_name }}-marshmallow-oss-x86.apk - EhViewer-${{ github.ref_name }}-marshmallow-oss-armeabi-v7a.apk - EhViewer-${{ github.ref_name }}-marshmallow-oss-mapping.txt - EhViewer-${{ github.ref_name }}-marshmallow-oss-native-debug-symbols.zip - - EhViewer-${{ github.ref_name }}-marshmallow-gms-universal.apk - EhViewer-${{ github.ref_name }}-marshmallow-gms-arm64-v8a.apk - EhViewer-${{ github.ref_name }}-marshmallow-gms-x86_64.apk - EhViewer-${{ github.ref_name }}-marshmallow-gms-x86.apk - EhViewer-${{ github.ref_name }}-marshmallow-gms-armeabi-v7a.apk - EhViewer-${{ github.ref_name }}-marshmallow-gms-mapping.txt - EhViewer-${{ github.ref_name }}-marshmallow-gms-native-debug-symbols.zip + EhViewer-${{ github.ref_name }}-marshmallow-universal.apk + EhViewer-${{ github.ref_name }}-marshmallow-arm64-v8a.apk + EhViewer-${{ github.ref_name }}-marshmallow-x86_64.apk + EhViewer-${{ github.ref_name }}-marshmallow-x86.apk + EhViewer-${{ github.ref_name }}-marshmallow-armeabi-v7a.apk + EhViewer-${{ github.ref_name }}-marshmallow-mapping.txt + EhViewer-${{ github.ref_name }}-marshmallow-native-debug-symbols.zip diff --git a/README.md b/README.md index aee18fefc..3b377ea0d 100644 --- a/README.md +++ b/README.md @@ -70,13 +70,9 @@ and [Dynamic Color](https://m3.material.io/styles/color/dynamic-color/overview) |-------------|-----------------------------------| | Default | Android 9+, full support | | Marshmallow | Android 6.0-8.1, limited support* | -| OSS | FOSS dependencies** | -| GMS | Proprietary GMS component | \* May not support some archives -** Fall back to OkHttp on devices that don't support [HttpEngine](https://developer.android.com/reference/android/net/http/HttpEngine) - Get it on GitHub diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 25d2ef903..2b9074c65 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -81,6 +81,7 @@ android { "nb-rNO", ), ) + buildConfigField("String", "RAW_VERSION_NAME", "\"$versionName$versionNameSuffix\"") buildConfigField("String", "COMMIT_SHA", "\"$commitSha\"") buildConfigField("String", "REPO_NAME", "\"$repoName\"") ndk { @@ -88,14 +89,11 @@ android { } } - flavorDimensions += listOf("api", "oss") + flavorDimensions += "api" productFlavors { - create("default") { - dimension = "api" - } + create("default") create("marshmallow") { - dimension = "api" minSdk = 23 applicationIdSuffix = ".m" versionNameSuffix = "-M" @@ -103,13 +101,6 @@ android { isCoreLibraryDesugaringEnabled = true } } - create("oss") { - dimension = "oss" - } - create("gms") { - dimension = "oss" - versionNameSuffix = "-gms" - } } externalNativeBuild { @@ -154,7 +145,6 @@ android { packaging { resources { excludes += "/META-INF/**" - excludes += "/okhttp3/**" excludes += "/kotlin/**" excludes += "**.txt" excludes += "**.bin" @@ -231,10 +221,6 @@ dependencies { implementation(libs.bundles.splitties) - // https://square.github.io/okhttp/changelogs/changelog/ - implementation(platform(libs.okhttp.bom)) - implementation(libs.bundles.okhttp) - implementation(libs.okio.jvm) implementation(libs.logcat) @@ -258,7 +244,7 @@ dependencies { implementation(libs.telephoto.zoomable) - implementation(libs.bundles.ktor) + implementation(libs.ktor.client.core) implementation(libs.bundles.kotlinx.serialization) @@ -268,7 +254,7 @@ dependencies { coreLibraryDesugaring(libs.desugar) - "gmsImplementation"(libs.bundles.cronet) + implementation(libs.cronet.embedded) debugImplementation(libs.compose.ui.tooling) implementation(libs.compose.ui.tooling.preview) diff --git a/app/src/gms/kotlin/com/hippo/ehviewer/util/CronetUtils.kt b/app/src/gms/kotlin/com/hippo/ehviewer/util/CronetUtils.kt deleted file mode 100644 index d041f5217..000000000 --- a/app/src/gms/kotlin/com/hippo/ehviewer/util/CronetUtils.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.hippo.ehviewer.util - -import com.google.android.gms.net.CronetProviderInstaller -import org.chromium.net.CronetProvider -import splitties.init.appCtx - -val isCronetAvailable: Boolean - get() = CronetProvider.getAllProviders(appCtx).any { it.isEnabled }.also { - if (!it) { - CronetProviderInstaller.installProvider(appCtx) - } - } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt b/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt index be2f19982..171d4b18c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/EhApplication.kt @@ -54,22 +54,16 @@ import com.hippo.ehviewer.util.Crash import com.hippo.ehviewer.util.FavouriteStatusRouter import com.hippo.ehviewer.util.FileUtils import com.hippo.ehviewer.util.isAtLeastP -import com.hippo.ehviewer.util.isAtLeastQ import com.hippo.ehviewer.util.isAtLeastS -import com.hippo.ehviewer.util.isCronetAvailable -import eu.kanade.tachiyomi.network.interceptor.UncaughtExceptionInterceptor import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.system.logcat import io.ktor.client.HttpClient -import io.ktor.client.engine.okhttp.OkHttp import io.ktor.client.plugins.cookies.HttpCookies import kotlinx.coroutines.launch import logcat.AndroidLogcatLogger import logcat.LogPriority import logcat.LogcatLogger -import okhttp3.AsyncDns -import okhttp3.android.AndroidAsyncDns import okio.Path.Companion.toOkioPath import splitties.arch.room.roomDb import splitties.init.appCtx @@ -185,25 +179,9 @@ class EhApplication : Application(), SingletonImageLoader.Factory { companion object { val ktorClient by lazy { - if (Settings.enableCronet && isCronetAvailable) { - HttpClient(CronetEngine) { - install(HttpCookies) { - storage = EhCookieStore - } - } - } else { - HttpClient(OkHttp) { - engine { - config { - if (isAtLeastQ) { - dns(AsyncDns.toDns(AndroidAsyncDns.IPv4, AndroidAsyncDns.IPv6)) - } - addInterceptor(UncaughtExceptionInterceptor()) - } - } - install(HttpCookies) { - storage = EhCookieStore - } + HttpClient(CronetEngine) { + install(HttpCookies) { + storage = EhCookieStore } } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt index b2ba3dd75..0e854bb33 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt @@ -154,7 +154,6 @@ object Settings : DataStorePreferences(null) { var downloadOriginImage by boolPref("download_origin_image", false) var saveAsCbz by boolPref("save_as_cbz", false) var archiveMetadata by boolPref("archive_metadata", true) - var enableCronet by boolPref("enable_cronet", true) var recentFavCat by intPref("recent_fav_cat", FavListUrlBuilder.FAV_CAT_LOCAL) var defaultFavSlot by intPref("default_favorite_slot", -2) var securityDelay by intPref("require_unlock_delay", 0) diff --git a/app/src/gms/kotlin/com/hippo/ehviewer/cronet/CronetKt.kt b/app/src/main/kotlin/com/hippo/ehviewer/cronet/CronetKt.kt similarity index 100% rename from app/src/gms/kotlin/com/hippo/ehviewer/cronet/CronetKt.kt rename to app/src/main/kotlin/com/hippo/ehviewer/cronet/CronetKt.kt diff --git a/app/src/gms/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt b/app/src/main/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt similarity index 100% rename from app/src/gms/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt index d6e452936..a03d880c6 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/AdvancedScreen.kt @@ -6,9 +6,7 @@ import android.net.Uri import android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS import android.provider.Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -17,9 +15,6 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Scaffold -import androidx.compose.material3.SegmentedButton -import androidx.compose.material3.SegmentedButtonDefaults -import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text @@ -30,7 +25,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext @@ -48,7 +42,6 @@ import com.hippo.ehviewer.ui.tools.observed import com.hippo.ehviewer.util.AppConfig import com.hippo.ehviewer.util.Crash import com.hippo.ehviewer.util.ReadableTime -import com.hippo.ehviewer.util.isCronetAvailable import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator import eu.kanade.tachiyomi.util.system.logcat @@ -144,38 +137,6 @@ fun AdvancedScreen(navigator: DestinationsNavigator) { entryValueRes = R.array.app_language_entry_values, value = Settings::language, ) - var enableCronet by Settings::enableCronet.observed - Preference( - title = stringResource(id = R.string.settings_advanced_http_engine), - summary = if (enableCronet) "Cronet" else "OkHttp", - ) { - coroutineScope.launch { - dialogState.awaitPermissionOrCancel( - title = R.string.settings_advanced_http_engine, - showCancelButton = false, - ) { - Box(modifier = Modifier.fillMaxWidth()) { - SingleChoiceSegmentedButtonRow(modifier = Modifier.align(Alignment.Center)) { - SegmentedButton( - selected = !enableCronet, - onClick = { enableCronet = false }, - shape = SegmentedButtonDefaults.itemShape(index = 0, count = 2), - ) { - Text("OkHttp") - } - SegmentedButton( - selected = enableCronet, - onClick = { enableCronet = true }, - shape = SegmentedButtonDefaults.itemShape(index = 1, count = 2), - enabled = isCronetAvailable, - ) { - Text("Cronet") - } - } - } - } - } - } SwitchPreference( title = stringResource(id = R.string.preload_thumb_aggressively), value = Settings::preloadThumbAggressively, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/updater/AppUpdater.kt b/app/src/main/kotlin/com/hippo/ehviewer/updater/AppUpdater.kt index de769be5c..9fd7c6044 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/updater/AppUpdater.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/updater/AppUpdater.kt @@ -54,7 +54,7 @@ object AppUpdater { return Release(shortSha, changelog, archiveUrl) } } else { - val curVersion = BuildConfig.VERSION_NAME.substringBefore('-') + val curVersion = BuildConfig.RAW_VERSION_NAME val release = ghStatement(LATEST_RELEASE_URL).executeAndParseAs() val latestVersion = release.version val description = release.info diff --git a/app/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor.kt b/app/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor.kt deleted file mode 100644 index a746ae773..000000000 --- a/app/src/main/kotlin/eu/kanade/tachiyomi/network/interceptor/UncaughtExceptionInterceptor.kt +++ /dev/null @@ -1,28 +0,0 @@ -package eu.kanade.tachiyomi.network.interceptor - -import java.io.IOException -import okhttp3.Interceptor -import okhttp3.Response - -/** - * Catches any uncaught exceptions from later in the chain and rethrows as a non-fatal - * IOException to avoid catastrophic failure. - * - * This should be the first interceptor in the client. - * - * See [Interceptor](https://square.github.io/okhttp/5.x/okhttp/okhttp3/-interceptor/index.html) - */ -class UncaughtExceptionInterceptor : Interceptor { - - override fun intercept(chain: Interceptor.Chain): Response { - return try { - chain.proceed(chain.request()) - } catch (e: Exception) { - if (e is IOException) { - throw e - } else { - throw IOException(e) - } - } - } -} diff --git a/app/src/main/kotlin/tachiyomi/data/release/GithubRelease.kt b/app/src/main/kotlin/tachiyomi/data/release/GithubRelease.kt index 35121a35a..dca48e5ad 100644 --- a/app/src/main/kotlin/tachiyomi/data/release/GithubRelease.kt +++ b/app/src/main/kotlin/tachiyomi/data/release/GithubRelease.kt @@ -5,12 +5,11 @@ import com.hippo.ehviewer.BuildConfig import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -const val FLAVOR = "${BuildConfig.FLAVOR_api}-${BuildConfig.FLAVOR_oss}" -val apkVariant = "$FLAVOR-${ - Build.SUPPORTED_ABIS[0].takeIf { - it in setOf("arm64-v8a", "x86_64", "armeabi-v7a", "x86") - } ?: "universal" -}" +private val abi = Build.SUPPORTED_ABIS[0].takeIf { + it in setOf("arm64-v8a", "x86_64", "armeabi-v7a", "x86") +} ?: "universal" + +fun matchVariant(name: String) = name.contains(BuildConfig.FLAVOR) && name.contains(abi) /** * Contains information about the latest release from GitHub. @@ -23,7 +22,7 @@ data class GithubRelease( @SerialName("assets") val assets: List, ) { fun getDownloadLink(): String { - val asset = assets.find { it.downloadLink.contains(apkVariant) } ?: assets[0] + val asset = assets.find { matchVariant(it.downloadLink) } ?: assets[0] return asset.downloadLink } } diff --git a/app/src/main/kotlin/tachiyomi/data/release/GithubWorkflow.kt b/app/src/main/kotlin/tachiyomi/data/release/GithubWorkflow.kt index 523be2f6f..0c55c0d45 100644 --- a/app/src/main/kotlin/tachiyomi/data/release/GithubWorkflow.kt +++ b/app/src/main/kotlin/tachiyomi/data/release/GithubWorkflow.kt @@ -20,7 +20,7 @@ data class GithubArtifacts( @SerialName("artifacts") val artifacts: List, ) { fun getDownloadLink(): String { - return (artifacts.find { it.name.contains(apkVariant) } ?: artifacts[0]).downloadLink + return (artifacts.find { matchVariant(it.name) } ?: artifacts[0]).downloadLink } } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 01bd74d4f..5809c4ac0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -356,7 +356,6 @@ 已保存日志至 %s 阅读缓存大小 App 界面语言 - Http 引擎(重启生效) [实验性] 触摸溢出系数 增大此项将降低滑动手势敏感度 导出数据 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index f3f778fe6..d1c0f07ac 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -355,7 +355,6 @@ 已將紀錄檔儲存至 %s 閱讀快取大小 應用程式介面語言 - Http 引擎 (需重新啟動) [測試] 觸控溢出係數 提高係數將降低滑動手勢敏感度 匯出檔案 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6bba1e52a..b37abd31d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -400,7 +400,6 @@ Logcat dumped to %s Read cache size App language - Http Engine (Restart required) [Experimental] Touch slop factor Increasing this will reduce swipe gesture sensitivity Export data diff --git a/app/src/oss/kotlin/com/hippo/ehviewer/cronet/CronetKt.kt b/app/src/oss/kotlin/com/hippo/ehviewer/cronet/CronetKt.kt deleted file mode 100644 index 8f9b18faf..000000000 --- a/app/src/oss/kotlin/com/hippo/ehviewer/cronet/CronetKt.kt +++ /dev/null @@ -1,22 +0,0 @@ -@file:Suppress("NewApi") - -package com.hippo.ehviewer.cronet - -import android.net.http.HttpEngine -import com.hippo.ehviewer.Settings -import okio.Path.Companion.toOkioPath -import splitties.init.appCtx - -val cronetHttpClient: HttpEngine = HttpEngine.Builder(appCtx).apply { - setEnableBrotli(true) - setUserAgent(Settings.userAgent) - - // Cache Quic hint only since the real cache mechanism should on Ktor layer - val cache = (appCtx.cacheDir.toOkioPath() / "http_cache").toFile().apply { mkdirs() } - setStoragePath(cache.absolutePath) - setEnableHttpCache(HttpEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 4096) - - addQuicHint("e-hentai.org", 443, 443) - addQuicHint("forums.e-hentai.org", 443, 443) - addQuicHint("exhentai.org", 443, 443) -}.build() diff --git a/app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt b/app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt deleted file mode 100644 index df74f1c7a..000000000 --- a/app/src/oss/kotlin/com/hippo/ehviewer/ktor/CronetEngine.kt +++ /dev/null @@ -1,182 +0,0 @@ -@file:Suppress("NewApi") - -package com.hippo.ehviewer.ktor - -import android.net.http.HttpException -import android.net.http.UploadDataProvider -import android.net.http.UploadDataSink -import android.net.http.UrlRequest -import android.net.http.UrlResponseInfo -import com.hippo.ehviewer.cronet.cronetDispatcher -import com.hippo.ehviewer.cronet.cronetHttpClient -import com.hippo.ehviewer.cronet.cronetHttpClientExecutor -import com.hippo.ehviewer.cronet.pool -import io.ktor.client.engine.HttpClientEngineBase -import io.ktor.client.engine.HttpClientEngineConfig -import io.ktor.client.engine.callContext -import io.ktor.client.request.HttpRequestData -import io.ktor.client.request.HttpResponseData -import io.ktor.http.HttpHeaders -import io.ktor.http.HttpProtocolVersion -import io.ktor.http.HttpStatusCode -import io.ktor.http.content.OutgoingContent -import io.ktor.http.headers -import io.ktor.util.date.GMTDate -import io.ktor.util.flattenForEach -import io.ktor.utils.io.ByteReadChannel -import io.ktor.utils.io.InternalAPI -import io.ktor.utils.io.pool.useInstance -import io.ktor.utils.io.writer -import java.nio.ByteBuffer -import kotlin.coroutines.CoroutineContext -import kotlin.coroutines.resume -import kotlin.coroutines.resumeWithException -import kotlinx.coroutines.DelicateCoroutinesApi -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.Job -import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.channels.consumeEach -import kotlinx.coroutines.launch -import kotlinx.coroutines.suspendCancellableCoroutine - -object CronetEngine : HttpClientEngineBase("Cronet") { - override val config = HttpClientEngineConfig() - override val dispatcher = cronetDispatcher - - @InternalAPI - override suspend fun execute(data: HttpRequestData): HttpResponseData { - val callContext = callContext() - - return executeHttpRequest(callContext, data) - } - - @OptIn(DelicateCoroutinesApi::class) - private suspend fun executeHttpRequest( - callContext: CoroutineContext, - data: HttpRequestData, - ): HttpResponseData = suspendCancellableCoroutine { continuation -> - val requestTime = GMTDate() - - val callback = object : UrlRequest.Callback { - lateinit var chunkChan: Channel - override fun onRedirectReceived(request: UrlRequest, info: UrlResponseInfo, newLocationUrl: String) { - continuation.resume( - info.toHttpResponseData( - requestTime = requestTime, - callContext = callContext, - ), - ) - } - - override fun onResponseStarted(request: UrlRequest, info: UrlResponseInfo) { - val channel = GlobalScope.writer(callContext) { - pool.useInstance { - chunkChan = Channel(1) - request.read(it) - chunkChan.consumeEach { buffer -> - buffer.flip() - channel.writeFully(buffer) - buffer.clear() - request.read(buffer) - } - } - }.channel - continuation.resume( - info.toHttpResponseData( - requestTime = requestTime, - callContext = callContext, - responseBody = channel, - ), - ) - } - - override fun onReadCompleted(request: UrlRequest, info: UrlResponseInfo, byteBuffer: ByteBuffer) { - chunkChan.trySend(byteBuffer).getOrThrow() - } - - override fun onSucceeded(request: UrlRequest, info: UrlResponseInfo) { - chunkChan.close() - } - - override fun onFailed(request: UrlRequest, info: UrlResponseInfo?, error: HttpException) { - if (::chunkChan.isInitialized) { - chunkChan.close(error) - } else { - continuation.resumeWithException(error) - } - } - - override fun onCanceled(p0: UrlRequest, p1: UrlResponseInfo?) { - // No-op - } - } - - val request = cronetHttpClient.newUrlRequestBuilder(data.url.toString(), cronetHttpClientExecutor, callback).apply { - setHttpMethod(data.method.value) - data.headers.flattenForEach { key, value -> addHeader(key, value) } - data.body.contentType?.let { addHeader(HttpHeaders.ContentType, it.toString()) } - data.body.contentLength?.let { addHeader(HttpHeaders.ContentLength, it.toString()) } - data.body.toUploadDataProvider(callContext)?.let { setUploadDataProvider(it, cronetHttpClientExecutor) } - }.build() - request.start() - callContext[Job]!!.invokeOnCompletion { request.cancel() } - continuation.invokeOnCancellation { request.cancel() } - } -} - -private fun UrlResponseInfo.toHttpResponseData( - requestTime: GMTDate, - callContext: CoroutineContext, - responseBody: ByteReadChannel = ByteReadChannel.Empty, -): HttpResponseData { - return HttpResponseData( - statusCode = HttpStatusCode.fromValue(httpStatusCode), - requestTime = requestTime, - headers = headers { - headers.asMap.forEach { (key, value) -> - appendAll(key, value) - } - }, - version = when (negotiatedProtocol) { - "h2" -> HttpProtocolVersion.HTTP_2_0 - "h3" -> HttpProtocolVersion.QUIC - "quic/1+spdy/3" -> HttpProtocolVersion.SPDY_3 - else -> HttpProtocolVersion.HTTP_1_1 - }, - body = responseBody, - callContext = callContext, - ) -} - -@OptIn(DelicateCoroutinesApi::class) -private fun OutgoingContent.toUploadDataProvider(callContext: CoroutineContext): UploadDataProvider? = when (this) { - is OutgoingContent.NoContent -> null - is OutgoingContent.ByteArrayContent -> object : UploadDataProvider() { - val buffer = ByteBuffer.wrap(bytes()).slice() - override fun getLength() = buffer.limit().toLong() - override fun read(uploadDataSink: UploadDataSink, byteBuffer: ByteBuffer) { - byteBuffer.put(buffer) - uploadDataSink.onReadSucceeded(false) - } - override fun rewind(uploadDataSink: UploadDataSink) { - buffer.position(0) - uploadDataSink.onRewindSucceeded() - } - } - is OutgoingContent.WriteChannelContent -> object : UploadDataProvider() { - fun launch() = GlobalScope.writer(callContext) { writeTo(channel) }.channel - var chan = launch() - override fun getLength() = contentLength!! - override fun read(uploadDataSink: UploadDataSink, byteBuffer: ByteBuffer) { - GlobalScope.launch(callContext) { - chan.readAvailable(byteBuffer) - uploadDataSink.onReadSucceeded(false) - } - } - override fun rewind(uploadDataSink: UploadDataSink) { - chan = launch() - uploadDataSink.onRewindSucceeded() - } - } - else -> error("UnsupportedContentType $this") -} diff --git a/app/src/oss/kotlin/com/hippo/ehviewer/util/CronetUtils.kt b/app/src/oss/kotlin/com/hippo/ehviewer/util/CronetUtils.kt deleted file mode 100644 index 4262e46b4..000000000 --- a/app/src/oss/kotlin/com/hippo/ehviewer/util/CronetUtils.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.hippo.ehviewer.util - -val isCronetAvailable: Boolean - get() = isAtLeastSExtension7 diff --git a/docs/README/zh-cn.md b/docs/README/zh-cn.md index 1a29b0b9c..44429419b 100644 --- a/docs/README/zh-cn.md +++ b/docs/README/zh-cn.md @@ -69,13 +69,9 @@ |-------------|------------------------| | Default | Android 9+, 完全支持 | | Marshmallow | Android 6.0-8.1, 有限支持* | -| OSS | FOSS 依赖项** | -| GMS | 专有 GMS 组件 | \* 可能不支持某些压缩包 -** 在不支持 [HttpEngine](https://developer.android.com/reference/android/net/http/HttpEngine) 的设备上回退到 OkHttp - Get it on GitHub diff --git a/docs/README/zh-tw.md b/docs/README/zh-tw.md index 414d04645..a71208a31 100644 --- a/docs/README/zh-tw.md +++ b/docs/README/zh-tw.md @@ -69,13 +69,9 @@ |-------------|------------------------| | Default | Android 9+, 完全支援 | | Marshmallow | Android 6.0-8.1, 有限支援* | -| OSS | FOSS 依賴項** | -| GMS | 專有 GMS 元件 | \* 可能不支援某些壓縮包 -** 在不支援 [HttpEngine](https://developer.android.com/reference/android/net/http/HttpEngine) 的裝置上回退到 OkHttp - Get it on GitHub diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index aa416bc03..dacd22dc2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,7 +26,6 @@ kotlinx-datetime = "0.6.0-RC.2" kotlinx-serialization = "1.6.3" ksp = "2.0.0-Beta4-1.0.19" ktor = "3.0.0-beta-1" -okhttp3 = "5.0.0-alpha.12" okio = "3.8.0" splitties = "3.0.0" telephoto = "0.8.0" @@ -82,8 +81,7 @@ compose-destinations-compiler = { module = "io.github.raamcosta.compose-destinat material-motion-core = "io.github.fornewid:material-motion-compose-core:1.2.0" -cronet-api = "org.chromium.net:cronet-api:119.6045.31" -cronet-gms = "com.google.android.gms:play-services-cronet:18.0.1" +cronet-embedded = "org.chromium.net:cronet-embedded:119.6045.31" desugar = "com.android.tools:desugar_jdk_libs_nio:2.0.4" @@ -95,12 +93,10 @@ jsoup = "org.jsoup:jsoup:1.17.2" kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } -ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" } +ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } logcat = "com.squareup.logcat:logcat:0.1" -okhttp-android = { module = "com.squareup.okhttp3:okhttp-android" } -okhttp-bom = { module = "com.squareup.okhttp3:okhttp-bom", version.ref = "okhttp3" } okio-jvm = { module = "com.squareup.okio:okio-jvm", version.ref = "okio" } photoview = "com.github.chrisbanes:PhotoView:2.3.0" @@ -124,10 +120,7 @@ telephoto-zoomable = { module = "me.saket.telephoto:zoomable", version.ref = "te [bundles] coil = ["coil-compose", "coil-gif", "coil-network"] compose = ["compose-foundation", "compose-material-icons-extended", "compose-material3", "compose-material3-windowsizeclass", "compose-ui-util"] -cronet = ["cronet-api", "cronet-gms"] kotlinx-serialization = ["serialization-cbor", "serialization-json", "serialization-json-okio", "serialization-xml-core", "serialization-xml"] -ktor = ["ktor-client-okhttp"] -okhttp = ["okhttp-android"] splitties = ["splitties-appctx", "splitties-arch-room", "splitties-preferences", "splitties-systemservices"] [plugins]