Fix multidex for Android devices below L

This commit is contained in:
yuhan6665
2020-02-29 10:38:24 -05:00
parent 6a90965c7b
commit e33d7e9bcf
3 changed files with 32 additions and 25 deletions

View File

@@ -91,6 +91,7 @@ dependencies {
implementation "com.android.support:cardview-v7:$supportLibVersion" implementation "com.android.support:cardview-v7:$supportLibVersion"
implementation "com.android.support:preference-v7:$supportLibVersion" implementation "com.android.support:preference-v7:$supportLibVersion"
implementation "com.android.support:recyclerview-v7:$supportLibVersion" implementation "com.android.support:recyclerview-v7:$supportLibVersion"
implementation "com.android.support:multidex:1.0.3"
// DSL // DSL
implementation "org.jetbrains.anko:anko-sdk15:$ankoVersion" implementation "org.jetbrains.anko:anko-sdk15:$ankoVersion"
implementation "org.jetbrains.anko:anko-support-v4:$ankoVersion" implementation "org.jetbrains.anko:anko-support-v4:$ankoVersion"

View File

@@ -1,12 +1,12 @@
package com.v2ray.ang package com.v2ray.ang
import android.app.Application
//import com.squareup.leakcanary.LeakCanary //import com.squareup.leakcanary.LeakCanary
import android.support.multidex.MultiDexApplication
import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.AngConfigManager
import me.dozen.dpreference.DPreference import me.dozen.dpreference.DPreference
import org.jetbrains.anko.defaultSharedPreferences import org.jetbrains.anko.defaultSharedPreferences
class AngApplication : Application() { class AngApplication : MultiDexApplication() {
companion object { companion object {
const val PREF_LAST_VERSION = "pref_last_version" const val PREF_LAST_VERSION = "pref_last_version"
} }

View File

@@ -28,14 +28,9 @@ import libv2ray.Libv2ray
import libv2ray.V2RayVPNServiceSupportsSet import libv2ray.V2RayVPNServiceSupportsSet
import rx.Observable import rx.Observable
import rx.Subscription import rx.Subscription
import java.net.InetAddress
import java.io.IOException
import java.io.File import java.io.File
import java.io.FileDescriptor
import java.io.FileInputStream
import java.lang.ref.SoftReference import java.lang.ref.SoftReference
import android.os.Build import android.os.Build
import android.annotation.TargetApi
import android.util.Log import android.util.Log
import go.Seq import go.Seq
import org.jetbrains.anko.doAsync 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 * Source: https://android.googlesource.com/platform/frameworks/base/+/2df4c7d/services/core/java/com/android/server/ConnectivityService.java#887
*/ */
@TargetApi(28) private val defaultNetworkRequest by lazy {
private val defaultNetworkRequest = NetworkRequest.Builder() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED) .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build() .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
.build()
} else {
null
}
}
private val connectivity by lazy { getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager } private val connectivity by lazy { getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager }
@TargetApi(28)
private val defaultNetworkCallback = object : ConnectivityManager.NetworkCallback() { private val defaultNetworkCallback by lazy {
override fun onAvailable(network: Network) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
setUnderlyingNetworks(arrayOf(network)) object : ConnectivityManager.NetworkCallback() {
} override fun onAvailable(network: Network) {
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities?) { setUnderlyingNetworks(arrayOf(network))
// it's a good idea to refresh capabilities }
setUnderlyingNetworks(arrayOf(network)) override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities?) {
} // it's a good idea to refresh capabilities
override fun onLost(network: Network) { setUnderlyingNetworks(arrayOf(network))
setUnderlyingNetworks(null) }
override fun onLost(network: Network) {
setUnderlyingNetworks(null)
}
}
} else {
null
} }
} }
private var listeningForDefaultNetwork = false 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) connectivity.requestNetwork(defaultNetworkRequest, defaultNetworkCallback)
listeningForDefaultNetwork = true listeningForDefaultNetwork = true
} }
@@ -260,7 +266,7 @@ class V2RayVpnService : VpnService() {
// val emptyInfo = VpnNetworkInfo() // val emptyInfo = VpnNetworkInfo()
// val info = loadVpnNetworkInfo(configName, emptyInfo)!! + (lastNetworkInfo ?: emptyInfo) // val info = loadVpnNetworkInfo(configName, emptyInfo)!! + (lastNetworkInfo ?: emptyInfo)
// saveVpnNetworkInfo(configName, info) // saveVpnNetworkInfo(configName, info)
if (Build.VERSION.SDK_INT >= 28) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
if (listeningForDefaultNetwork) { if (listeningForDefaultNetwork) {
connectivity.unregisterNetworkCallback(defaultNetworkCallback) connectivity.unregisterNetworkCallback(defaultNetworkCallback)
listeningForDefaultNetwork = false listeningForDefaultNetwork = false