fix(android): 真机连通修复——补 ACCESS_NETWORK_STATE + 砍 IPv6 zone(Task 7)
Vivo X200(Android 16)真机实测两处运行期崩溃并修复:
- DefaultNetworkMonitor 用 ConnectivityManager 需 ACCESS_NETWORK_STATE 权限(缺则 SecurityException)
- getInterfaces 返回的 IPv6 link-local 含 zone(%rmnet_data0),sing-box netip.ParsePrefix panic;substringBefore('%') 砍掉
真机端到端连通已由用户验证通过。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,9 @@
|
||||
<!-- 网络权限(隧道流量) -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<!-- 默认网络监听需要(DefaultNetworkMonitor 用 ConnectivityManager 取默认接口) -->
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
|
||||
<!-- 前台服务(VPN 持续运行所需,API 28+) -->
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
|
||||
@@ -391,7 +391,9 @@ class PangolinVpnService : VpnService(), PlatformInterface, CommandServerHandler
|
||||
runCatching { box.setMTU(ni.mtu) }
|
||||
box.addresses = StringArray(
|
||||
ni.interfaceAddresses.mapNotNull { ia ->
|
||||
val host = ia.address?.hostAddress ?: return@mapNotNull null
|
||||
// 砍掉 IPv6 link-local 的 zone 标识(如 %rmnet_data0)——
|
||||
// sing-box netip.ParsePrefix 不接受 prefix 内含 zone,否则 panic。
|
||||
val host = ia.address?.hostAddress?.substringBefore('%') ?: return@mapNotNull null
|
||||
"$host/${ia.networkPrefixLength}"
|
||||
}.iterator()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user