新增编译模式下对日志进行输出,并且更新了hive缓存取出后进行连通性判断
Build Android APK / 编译 libcore.aar (push) Has been cancelled
Build Android APK / 编译 Android APK (release) (push) Has been cancelled
Build Android APK / 创建 GitHub Release (push) Has been cancelled
Build Multi-Platform / 编译 libcore (iOS/tvOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Android) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Windows) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (macOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Linux) (push) Has been cancelled
Build Multi-Platform / 构建 Android APK (push) Has been cancelled
Build Multi-Platform / 构建 Windows (push) Has been cancelled
Build Multi-Platform / 构建 macOS (push) Has been cancelled
Build Multi-Platform / 构建 Linux (push) Has been cancelled
Build Multi-Platform / 构建 iOS (push) Has been cancelled
Build Multi-Platform / 创建 Release (push) Has been cancelled
Build Windows / 编译 libcore (Windows) (push) Has been cancelled
Build Windows / build (push) Has been cancelled
Build Android APK / 编译 libcore.aar (push) Has been cancelled
Build Android APK / 编译 Android APK (release) (push) Has been cancelled
Build Android APK / 创建 GitHub Release (push) Has been cancelled
Build Multi-Platform / 编译 libcore (iOS/tvOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Android) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Windows) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (macOS) (push) Has been cancelled
Build Multi-Platform / 编译 libcore (Linux) (push) Has been cancelled
Build Multi-Platform / 构建 Android APK (push) Has been cancelled
Build Multi-Platform / 构建 Windows (push) Has been cancelled
Build Multi-Platform / 构建 macOS (push) Has been cancelled
Build Multi-Platform / 构建 Linux (push) Has been cancelled
Build Multi-Platform / 构建 iOS (push) Has been cancelled
Build Multi-Platform / 创建 Release (push) Has been cancelled
Build Windows / 编译 libcore (Windows) (push) Has been cancelled
Build Windows / build (push) Has been cancelled
(cherry picked from commit 40f95d0c463c31428c5f25118f59b0c3a60e73ba)
This commit is contained in:
@@ -1081,21 +1081,141 @@ class KRDomain {
|
||||
);
|
||||
}
|
||||
|
||||
/// 从本地加载域名
|
||||
/// 从本地加载域名(方案1:加载后验证可用性)
|
||||
static Future<void> kr_loadBaseDomain() async {
|
||||
KRLogUtil.kr_i('📂 开始从 Hive 加载域名配置', tag: 'KRDomain');
|
||||
final startTime = DateTime.now();
|
||||
|
||||
try {
|
||||
// 🔧 Android 15 关键修复:添加总体超时保护(15秒)
|
||||
await Future.any([
|
||||
_executeLoadAndVerify(),
|
||||
Future.delayed(const Duration(seconds: 15), () {
|
||||
throw TimeoutException('域名加载和验证总超时(15秒)');
|
||||
}),
|
||||
]);
|
||||
} on TimeoutException catch (e) {
|
||||
final duration = DateTime.now().difference(startTime).inSeconds;
|
||||
KRLogUtil.kr_e('⏱️ 域名加载验证超时($duration 秒): $e', tag: 'KRDomain');
|
||||
// 超时时使用默认域名
|
||||
if (kr_baseDomains.isNotEmpty) {
|
||||
kr_currentDomain = kr_baseDomains[0];
|
||||
KRLogUtil.kr_w('⚠️ 超时后使用默认域名: $kr_currentDomain', tag: 'KRDomain');
|
||||
}
|
||||
} catch (e) {
|
||||
final duration = DateTime.now().difference(startTime).inSeconds;
|
||||
KRLogUtil.kr_e('❌ 域名加载异常($duration 秒): $e', tag: 'KRDomain');
|
||||
// 异常时使用默认域名
|
||||
if (kr_baseDomains.isNotEmpty) {
|
||||
kr_currentDomain = kr_baseDomains[0];
|
||||
}
|
||||
}
|
||||
|
||||
final totalDuration = DateTime.now().difference(startTime).inMilliseconds;
|
||||
KRLogUtil.kr_i('✅ 域名加载完成,耗时: ${totalDuration}ms,当前域名: $kr_currentDomain', tag: 'KRDomain');
|
||||
}
|
||||
|
||||
/// 执行域名加载和验证
|
||||
static Future<void> _executeLoadAndVerify() async {
|
||||
// 加载域名列表
|
||||
String? savedDomains = await _storage.kr_readData(key: kr_domainsKey);
|
||||
if (savedDomains != null) {
|
||||
kr_baseDomains = savedDomains.split(',');
|
||||
if (savedDomains != null && savedDomains.isNotEmpty) {
|
||||
kr_baseDomains = savedDomains.split(',').where((d) => d.isNotEmpty).toList();
|
||||
KRLogUtil.kr_i('📋 从 Hive 加载的域名列表: $kr_baseDomains', tag: 'KRDomain');
|
||||
} else {
|
||||
KRLogUtil.kr_w('⚠️ Hive 中没有保存的域名列表,使用默认配置', tag: 'KRDomain');
|
||||
}
|
||||
|
||||
// 加载当前域名
|
||||
String? savedDomain = await _storage.kr_readData(key: kr_domainKey);
|
||||
if (savedDomain != null && kr_baseDomains.contains(savedDomain)) {
|
||||
kr_currentDomain = savedDomain;
|
||||
KRLogUtil.kr_i('📌 从 Hive 加载的当前域名: $savedDomain', tag: 'KRDomain');
|
||||
|
||||
if (savedDomain != null && savedDomain.isNotEmpty && kr_baseDomains.contains(savedDomain)) {
|
||||
// 🔧 Android 15 关键修复:验证 Hive 缓存的域名是否仍然可用
|
||||
KRLogUtil.kr_i('🔍 验证 Hive 缓存域名的可用性: $savedDomain', tag: 'KRDomain');
|
||||
|
||||
try {
|
||||
// 快速验证(3 秒超时)
|
||||
bool isAvailable = await kr_fastCheckDomainAvailability(savedDomain).timeout(
|
||||
const Duration(seconds: 3),
|
||||
onTimeout: () {
|
||||
KRLogUtil.kr_w('⏱️ 域名验证超时(3秒),视为不可用', tag: 'KRDomain');
|
||||
return false;
|
||||
},
|
||||
);
|
||||
|
||||
if (isAvailable) {
|
||||
kr_currentDomain = savedDomain;
|
||||
KRLogUtil.kr_i('✅ Hive 缓存域名验证通过,继续使用: $kr_currentDomain', tag: 'KRDomain');
|
||||
return;
|
||||
} else {
|
||||
KRLogUtil.kr_w('❌ Hive 缓存域名不可用: $savedDomain,需要切换', tag: 'KRDomain');
|
||||
}
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_e('❌ 域名验证异常: $e,需要切换', tag: 'KRDomain');
|
||||
}
|
||||
} else {
|
||||
if (savedDomain == null || savedDomain.isEmpty) {
|
||||
KRLogUtil.kr_w('⚠️ Hive 中没有保存的当前域名', tag: 'KRDomain');
|
||||
} else {
|
||||
KRLogUtil.kr_w('⚠️ Hive 缓存的域名 $savedDomain 不在域名列表中', tag: 'KRDomain');
|
||||
}
|
||||
}
|
||||
|
||||
// 🔧 Android 15 增强:Hive 域名验证失败,自动选择可用域名
|
||||
KRLogUtil.kr_i('🔄 Hive 域名不可用,开始选择可用域名...', tag: 'KRDomain');
|
||||
|
||||
// 尝试从域名列表中找到可用的域名(每个最多 3 秒)
|
||||
for (String domain in kr_baseDomains) {
|
||||
try {
|
||||
KRLogUtil.kr_i('🧪 测试域名: $domain', tag: 'KRDomain');
|
||||
bool isAvailable = await kr_fastCheckDomainAvailability(domain).timeout(
|
||||
const Duration(seconds: 3),
|
||||
onTimeout: () {
|
||||
KRLogUtil.kr_w('⏱️ 域名 $domain 验证超时(3秒)', tag: 'KRDomain');
|
||||
return false;
|
||||
},
|
||||
);
|
||||
|
||||
if (isAvailable) {
|
||||
kr_currentDomain = domain;
|
||||
await kr_saveCurrentDomain();
|
||||
KRLogUtil.kr_i('✅ 找到可用域名: $kr_currentDomain,已保存到 Hive', tag: 'KRDomain');
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_w('⚠️ 域名 $domain 验证异常: $e', tag: 'KRDomain');
|
||||
}
|
||||
}
|
||||
|
||||
// 如果所有主域名都不可用,快速尝试备用域名(5秒总超时)
|
||||
KRLogUtil.kr_w('⚠️ 所有主域名都不可用,尝试备用域名...', tag: 'KRDomain');
|
||||
try {
|
||||
String? backupDomain = await kr_tryLocalBackupDomains().timeout(
|
||||
const Duration(seconds: 5),
|
||||
onTimeout: () {
|
||||
KRLogUtil.kr_w('⏱️ 备用域名获取超时', tag: 'KRDomain');
|
||||
return null;
|
||||
},
|
||||
);
|
||||
|
||||
if (backupDomain != null) {
|
||||
kr_currentDomain = backupDomain;
|
||||
await kr_saveCurrentDomain();
|
||||
KRLogUtil.kr_i('✅ 使用备用域名: $kr_currentDomain', tag: 'KRDomain');
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
KRLogUtil.kr_w('⚠️ 备用域名获取异常: $e', tag: 'KRDomain');
|
||||
}
|
||||
|
||||
// 最后的兜底:使用列表中的第一个域名(即使不可用)
|
||||
if (kr_baseDomains.isNotEmpty) {
|
||||
kr_currentDomain = kr_baseDomains[0];
|
||||
await kr_saveCurrentDomain();
|
||||
KRLogUtil.kr_w('⚠️ 无法验证任何域名,使用默认域名: $kr_currentDomain', tag: 'KRDomain');
|
||||
} else {
|
||||
KRLogUtil.kr_e('❌ 没有可用的域名配置!', tag: 'KRDomain');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1123,6 +1243,19 @@ class KRDomain {
|
||||
}
|
||||
|
||||
class AppConfig {
|
||||
/// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
/// 初始化日志收集开关
|
||||
/// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
/// 🔧 全局开关:是否启用初始化日志收集
|
||||
/// true:将所有初始化日志写入文件,方便问题诊断
|
||||
/// false:关闭日志收集,减少 I/O 操作
|
||||
///
|
||||
/// 建议:
|
||||
/// - 测试版本、Beta 版本:设置为 true
|
||||
/// - 正式生产版本:根据需要设置为 false(或在遇到问题时临时开启)
|
||||
static const bool enableInitLogCollection = true;
|
||||
|
||||
/// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
/// 加密密钥配置
|
||||
/// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Reference in New Issue
Block a user