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)
-
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
-
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
-
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]