From 032657fb600fcb9319d7d56121582e9032616688 Mon Sep 17 00:00:00 2001 From: dongliang Date: Fri, 8 May 2026 13:22:11 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20EdgeTTS=20=E5=BC=BA=E5=88=B6=20TLS=201.2?= =?UTF-8?q?=20=E5=85=BC=E5=AE=B9=20Android=208.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Android 8.1 默认 TLS 配置可能不支持服务器要求的密码套件, 强制启用 TLS 1.2 + MODERN_TLS + COMPATIBLE_TLS 回退。 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../watch/service/manager/EdgeTtsManager.kt | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt b/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt index aef20e2..23e9599 100644 --- a/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt +++ b/app/src/main/java/com/xiaoqu/watch/service/manager/EdgeTtsManager.kt @@ -5,6 +5,8 @@ import android.media.MediaPlayer import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.* import okhttp3.* +import okhttp3.ConnectionSpec +import okhttp3.TlsVersion import okio.ByteString import timber.log.Timber import java.io.ByteArrayOutputStream @@ -29,10 +31,20 @@ class EdgeTtsManager @Inject constructor( * TTS 专用 OkHttpClient(不带业务拦截器) * 业务拦截器(SignatureInterceptor、UnbindInterceptor)会干扰 WebSocket 连接 */ - private val ttsClient = OkHttpClient.Builder() - .connectTimeout(10, java.util.concurrent.TimeUnit.SECONDS) - .readTimeout(30, java.util.concurrent.TimeUnit.SECONDS) - .build() + private val ttsClient: OkHttpClient = run { + // Android 8.1 TLS 兼容:强制启用 TLS 1.2 + 现代密码套件 + val spec = ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) + .tlsVersions(TlsVersion.TLS_1_2) + .build() + val compatSpec = ConnectionSpec.Builder(ConnectionSpec.COMPATIBLE_TLS) + .tlsVersions(TlsVersion.TLS_1_2, TlsVersion.TLS_1_1) + .build() + OkHttpClient.Builder() + .connectionSpecs(listOf(spec, compatSpec, ConnectionSpec.CLEARTEXT)) + .connectTimeout(15, java.util.concurrent.TimeUnit.SECONDS) + .readTimeout(30, java.util.concurrent.TimeUnit.SECONDS) + .build() + } companion object { private const val TAG = "EdgeTTS"