fix: EdgeTTS 强制 TLS 1.2 兼容 Android 8.1

Android 8.1 默认 TLS 配置可能不支持服务器要求的密码套件,
强制启用 TLS 1.2 + MODERN_TLS + COMPATIBLE_TLS 回退。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-05-08 13:22:11 +09:30
parent 02f84e6c04
commit 032657fb60

View File

@@ -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"