Commit 39840f2a authored by Mygod's avatar Mygod

Fix reflection again

parent 8fc881d6
...@@ -30,7 +30,6 @@ import android.os.Looper ...@@ -30,7 +30,6 @@ import android.os.Looper
import android.system.ErrnoException import android.system.ErrnoException
import android.system.Os import android.system.Os
import android.system.OsConstants import android.system.OsConstants
import com.crashlytics.android.Crashlytics
import com.github.shadowsocks.Core import com.github.shadowsocks.Core
import com.github.shadowsocks.utils.closeQuietly import com.github.shadowsocks.utils.closeQuietly
import com.github.shadowsocks.utils.int import com.github.shadowsocks.utils.int
...@@ -53,8 +52,7 @@ sealed class DnsResolverCompat { ...@@ -53,8 +52,7 @@ sealed class DnsResolverCompat {
when (Build.VERSION.SDK_INT) { when (Build.VERSION.SDK_INT) {
in 29..Int.MAX_VALUE -> DnsResolverCompat29 in 29..Int.MAX_VALUE -> DnsResolverCompat29
in 23 until 29 -> DnsResolverCompat23 in 23 until 29 -> DnsResolverCompat23
22 -> DnsResolverCompat22 in 21 until 23 -> DnsResolverCompat21()
21 -> DnsResolverCompat21()
else -> error("Unsupported API level") else -> error("Unsupported API level")
} }
} }
...@@ -107,7 +105,8 @@ sealed class DnsResolverCompat { ...@@ -107,7 +105,8 @@ sealed class DnsResolverCompat {
@SuppressLint("PrivateApi") @SuppressLint("PrivateApi")
private open class DnsResolverCompat21 : DnsResolverCompat() { private open class DnsResolverCompat21 : DnsResolverCompat() {
private val bindSocketToNetwork by lazy { private val bindSocketToNetwork by lazy {
Class.forName("android.net.NetworkUtils").getDeclaredMethod("bindSocketToNetwork") Class.forName("android.net.NetworkUtils").getDeclaredMethod(
"bindSocketToNetwork", Int::class.java, Int::class.java)
} }
private val netId by lazy { Network::class.java.getDeclaredField("netId") } private val netId by lazy { Network::class.java.getDeclaredField("netId") }
override fun bindSocket(network: Network, socket: FileDescriptor) { override fun bindSocket(network: Network, socket: FileDescriptor) {
...@@ -140,25 +139,6 @@ sealed class DnsResolverCompat { ...@@ -140,25 +139,6 @@ sealed class DnsResolverCompat {
GlobalScope.async(unboundedIO) { InetAddress.getAllByName(host) }.await() GlobalScope.async(unboundedIO) { InetAddress.getAllByName(host) }.await()
} }
@TargetApi(22)
private object DnsResolverCompat22 : DnsResolverCompat21() {
private val bindSocketFd by lazy {
Network::class.java.getDeclaredMethod("bindSocketFd").apply { isAccessible = true }
}
override fun bindSocket(network: Network, socket: FileDescriptor) {
try {
bindSocketFd.invoke(network, socket)
} catch (e1: ReflectiveOperationException) {
try {
super.bindSocket(network, socket)
Crashlytics.logException(e1)
} catch (e2: ReflectiveOperationException) {
throw e2.apply { addSuppressed(e1) }
}
}
}
}
@TargetApi(23) @TargetApi(23)
private object DnsResolverCompat23 : DnsResolverCompat21() { private object DnsResolverCompat23 : DnsResolverCompat21() {
override fun bindSocket(network: Network, socket: FileDescriptor) = network.bindSocket(socket) override fun bindSocket(network: Network, socket: FileDescriptor) = network.bindSocket(socket)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment