diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle index e025b84a..a1ff9805 100644 --- a/V2rayNG/app/build.gradle +++ b/V2rayNG/app/build.gradle @@ -91,6 +91,7 @@ dependencies { implementation "com.android.support:cardview-v7:$supportLibVersion" implementation "com.android.support:preference-v7:$supportLibVersion" implementation "com.android.support:recyclerview-v7:$supportLibVersion" + implementation "com.android.support:multidex:1.0.3" // DSL implementation "org.jetbrains.anko:anko-sdk15:$ankoVersion" implementation "org.jetbrains.anko:anko-support-v4:$ankoVersion" diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt index 26d8c378..73f816d5 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt @@ -1,12 +1,12 @@ package com.v2ray.ang -import android.app.Application //import com.squareup.leakcanary.LeakCanary +import android.support.multidex.MultiDexApplication import com.v2ray.ang.util.AngConfigManager import me.dozen.dpreference.DPreference import org.jetbrains.anko.defaultSharedPreferences -class AngApplication : Application() { +class AngApplication : MultiDexApplication() { companion object { const val PREF_LAST_VERSION = "pref_last_version" } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt index 3c27f7bb..89c1766c 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt @@ -28,14 +28,9 @@ import libv2ray.Libv2ray import libv2ray.V2RayVPNServiceSupportsSet import rx.Observable import rx.Subscription -import java.net.InetAddress -import java.io.IOException import java.io.File -import java.io.FileDescriptor -import java.io.FileInputStream import java.lang.ref.SoftReference import android.os.Build -import android.annotation.TargetApi import android.util.Log import go.Seq import org.jetbrains.anko.doAsync @@ -74,25 +69,36 @@ class V2RayVpnService : VpnService() { * * Source: https://android.googlesource.com/platform/frameworks/base/+/2df4c7d/services/core/java/com/android/server/ConnectivityService.java#887 */ - @TargetApi(28) - private val defaultNetworkRequest = NetworkRequest.Builder() - .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) - .build() + private val defaultNetworkRequest by lazy { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) + .build() + } else { + null + } + } private val connectivity by lazy { getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager } - @TargetApi(28) - private val defaultNetworkCallback = object : ConnectivityManager.NetworkCallback() { - override fun onAvailable(network: Network) { - setUnderlyingNetworks(arrayOf(network)) - } - override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities?) { - // it's a good idea to refresh capabilities - setUnderlyingNetworks(arrayOf(network)) - } - override fun onLost(network: Network) { - setUnderlyingNetworks(null) + + private val defaultNetworkCallback by lazy { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + setUnderlyingNetworks(arrayOf(network)) + } + override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities?) { + // it's a good idea to refresh capabilities + setUnderlyingNetworks(arrayOf(network)) + } + override fun onLost(network: Network) { + setUnderlyingNetworks(null) + } + } + } else { + null } } private var listeningForDefaultNetwork = false @@ -176,7 +182,7 @@ class V2RayVpnService : VpnService() { } - if (Build.VERSION.SDK_INT >= 28) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { connectivity.requestNetwork(defaultNetworkRequest, defaultNetworkCallback) listeningForDefaultNetwork = true } @@ -260,7 +266,7 @@ class V2RayVpnService : VpnService() { // val emptyInfo = VpnNetworkInfo() // val info = loadVpnNetworkInfo(configName, emptyInfo)!! + (lastNetworkInfo ?: emptyInfo) // saveVpnNetworkInfo(configName, info) - if (Build.VERSION.SDK_INT >= 28) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { if (listeningForDefaultNetwork) { connectivity.unregisterNetworkCallback(defaultNetworkCallback) listeningForDefaultNetwork = false