Commit 39840f2a authored by Mygod's avatar Mygod

Fix reflection again

parent 8fc881d6
......@@ -30,7 +30,6 @@ import android.os.Looper
import android.system.ErrnoException
import android.system.Os
import android.system.OsConstants
import com.crashlytics.android.Crashlytics
import com.github.shadowsocks.Core
import com.github.shadowsocks.utils.closeQuietly
import com.github.shadowsocks.utils.int
......@@ -53,8 +52,7 @@ sealed class DnsResolverCompat {
when (Build.VERSION.SDK_INT) {
in 29..Int.MAX_VALUE -> DnsResolverCompat29
in 23 until 29 -> DnsResolverCompat23
22 -> DnsResolverCompat22
21 -> DnsResolverCompat21()
in 21 until 23 -> DnsResolverCompat21()
else -> error("Unsupported API level")
}
}
......@@ -107,7 +105,8 @@ sealed class DnsResolverCompat {
@SuppressLint("PrivateApi")
private open class DnsResolverCompat21 : DnsResolverCompat() {
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") }
override fun bindSocket(network: Network, socket: FileDescriptor) {
......@@ -140,25 +139,6 @@ sealed class DnsResolverCompat {
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)
private object DnsResolverCompat23 : DnsResolverCompat21() {
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