From bb489140f8c129c194be64da047c4f30700238ac Mon Sep 17 00:00:00 2001 From: dongliang Date: Thu, 7 May 2026 13:04:55 +0930 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BC=95=E5=85=A5=20Conscrypt=20?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=20Android=208.1=20TLS=20=E6=8F=A1=E6=89=8B?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 设备系统 conscrypt 版本过旧,连阿里云 OSS 的 HTTPS 握手被 reset。 引入 org.conscrypt:conscrypt-android:2.5.2 作为首选安全提供者, 在 Application.onCreate 中注册,所有网络请求自动使用现代 TLS。 Co-Authored-By: Claude Opus 4.6 (1M context) --- app/build.gradle.kts | 3 +++ .../com/xiaoqu/watch/app/WatchApplication.kt | 17 ++++++++++++----- gradle/libs.versions.toml | 4 ++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3655d09..a67592a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -85,6 +85,9 @@ dependencies { implementation(libs.androidx.room.ktx) ksp(libs.androidx.room.compiler) + // TLS (解决 Android 8.1 连阿里云 OSS HTTPS 握手失败) + implementation(libs.conscrypt) + // Network implementation(libs.retrofit) implementation(libs.retrofit.converter.gson) diff --git a/app/src/main/java/com/xiaoqu/watch/app/WatchApplication.kt b/app/src/main/java/com/xiaoqu/watch/app/WatchApplication.kt index 1de0be5..f599d45 100644 --- a/app/src/main/java/com/xiaoqu/watch/app/WatchApplication.kt +++ b/app/src/main/java/com/xiaoqu/watch/app/WatchApplication.kt @@ -2,14 +2,17 @@ package com.xiaoqu.watch.app import android.app.Application import dagger.hilt.android.HiltAndroidApp +import org.conscrypt.Conscrypt import timber.log.Timber +import java.security.Security /** * 应用入口(@HiltAndroidApp 触发 Hilt 代码生成) * * 初始化序列(必须保持 < 500ms): - * 1. Timber 日志 - * 2. CrashHandler 崩溃恢复 + * 1. Conscrypt TLS 提供者(解决 Android 8.1 HTTPS 握手兼容) + * 2. Timber 日志 + * 3. CrashHandler 崩溃恢复 * 其他初始化延迟到 MainActivity/HomeFragment */ @HiltAndroidApp @@ -18,12 +21,16 @@ class WatchApplication : Application() { override fun onCreate() { super.onCreate() - // 1. Timber 日志初始化 + // 1. 注册 Conscrypt 为首选 TLS 提供者(必须在任何网络请求之前) + // 解决 Android 8.1 设备连阿里云 OSS 等服务器 TLS 握手失败的问题 + Security.insertProviderAt(Conscrypt.newProvider(), 1) + + // 2. Timber 日志初始化 Timber.plant(Timber.DebugTree()) - // 2. 崩溃处理器(记录日志 + 杀进程,系统自动重启 Launcher) + // 3. 崩溃处理器(记录日志 + 杀进程,系统自动重启 Launcher) CrashHandler(this).init() - Timber.d("WatchApplication initialized") + Timber.d("WatchApplication initialized (Conscrypt TLS enabled)") } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0087e62..1915e62 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,6 +13,7 @@ gson = "2.10.1" paho = "1.2.5" timber = "5.0.1" zxing = "3.5.3" +conscrypt = "2.5.2" swiperefresh = "1.1.0" viewpager2 = "1.0.0" coreKtx = "1.12.0" @@ -73,6 +74,9 @@ paho-mqtt = { group = "org.eclipse.paho", name = "org.eclipse.paho.client.mqttv3 # Logging timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" } +# TLS (解决 Android 8.1 设备 HTTPS 握手兼容问题) +conscrypt = { group = "org.conscrypt", name = "conscrypt-android", version.ref = "conscrypt" } + # QR Code zxing-core = { group = "com.google.zxing", name = "core", version.ref = "zxing" }