Refine proguard rules and flushing DNS on Android 4.x
This reverts commit 7a87eab47c.
This commit is contained in:
@@ -51,14 +51,13 @@ proguardVersion in Android := "5.2.1"
|
||||
|
||||
proguardCache in Android := Seq()
|
||||
|
||||
proguardOptions in Android ++= Seq("-keep class com.github.shadowsocks.**",
|
||||
"-keep class com.github.shadowsocks.System { *; }",
|
||||
"-keep class me.dm7.**",
|
||||
"-keep class com.google.android.gms.**",
|
||||
"-keepattributes *Annotation*",
|
||||
"-dontnote com.j256.ormlite.**",
|
||||
"-dontnote org.xbill.**",
|
||||
"-dontwarn org.xbill.**")
|
||||
proguardOptions in Android ++= Seq(
|
||||
"-keep class com.github.shadowsocks.System { *; }",
|
||||
"-dontnote com.google.android.gms.internal.**",
|
||||
"-dontnote com.j256.ormlite.**",
|
||||
"-dontnote me.dm7.barcodescannerview.**",
|
||||
"-dontnote org.xbill.**",
|
||||
"-dontwarn org.xbill.**")
|
||||
|
||||
lazy val nativeBuild = TaskKey[Unit]("native-build", "Build native executables")
|
||||
|
||||
|
||||
@@ -45,12 +45,11 @@ import java.net.{Inet6Address, InetAddress}
|
||||
import java.util.Locale
|
||||
|
||||
import android.content._
|
||||
import android.net.{ConnectivityManager, Network}
|
||||
import android.os._
|
||||
import android.util.{Log, SparseArray}
|
||||
import com.github.shadowsocks.utils._
|
||||
import android.util.Log
|
||||
import com.github.shadowsocks.ShadowsocksApplication.app
|
||||
import com.github.shadowsocks.database.Profile
|
||||
import com.github.shadowsocks.utils._
|
||||
|
||||
import scala.collection.JavaConversions._
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
@@ -71,78 +70,6 @@ class ShadowsocksNatService extends BaseService {
|
||||
var redsocksProcess: Process = _
|
||||
var pdnsdProcess: Process = _
|
||||
|
||||
private val dnsAddressCache = new SparseArray[String]
|
||||
|
||||
def getNetId(network: Network): Int = {
|
||||
network.getClass.getDeclaredField("netId").get(network).asInstanceOf[Int]
|
||||
}
|
||||
|
||||
def restoreDnsForAllNetwork() {
|
||||
val manager = getSystemService(Context.CONNECTIVITY_SERVICE).asInstanceOf[ConnectivityManager]
|
||||
val networks = manager.getAllNetworks
|
||||
val cmdBuf = new ArrayBuffer[String]()
|
||||
networks.foreach(network => {
|
||||
val netId = getNetId(network)
|
||||
val oldDns = dnsAddressCache.get(netId)
|
||||
if (oldDns != null) {
|
||||
cmdBuf.append("ndc resolver setnetdns %d \"\" %s".formatLocal(Locale.ENGLISH, netId, oldDns))
|
||||
dnsAddressCache.remove(netId)
|
||||
}
|
||||
})
|
||||
if (cmdBuf.nonEmpty) Console.runRootCommand(cmdBuf.toArray)
|
||||
}
|
||||
|
||||
def setDnsForAllNetwork(dns: String) {
|
||||
val manager = getSystemService(Context.CONNECTIVITY_SERVICE).asInstanceOf[ConnectivityManager]
|
||||
val networks = manager.getAllNetworks
|
||||
if (networks == null) return
|
||||
|
||||
val cmdBuf = new ArrayBuffer[String]()
|
||||
networks.foreach(network => {
|
||||
val networkInfo = manager.getNetworkInfo(network)
|
||||
if (networkInfo == null) return
|
||||
if (networkInfo.isConnected) {
|
||||
val netId = getNetId(network)
|
||||
val curDnsList = manager.getLinkProperties(network).getDnsServers
|
||||
if (curDnsList != null) {
|
||||
import scala.collection.JavaConverters._
|
||||
val curDns = curDnsList.asScala.map(ip => ip.getHostAddress).mkString(" ")
|
||||
if (curDns != dns) {
|
||||
dnsAddressCache.put(netId, curDns)
|
||||
cmdBuf.append("ndc resolver setnetdns %d \"\" %s".formatLocal(Locale.ENGLISH, netId, dns))
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
if (cmdBuf.nonEmpty) Console.runRootCommand(cmdBuf.toArray)
|
||||
}
|
||||
|
||||
def setupDns() {
|
||||
setDnsForAllNetwork("127.0.0.1")
|
||||
}
|
||||
|
||||
def resetDns() = {
|
||||
restoreDnsForAllNetwork()
|
||||
}
|
||||
|
||||
def flushDns() {
|
||||
if (Utils.isLollipopOrAbove) {
|
||||
val manager = getSystemService(Context.CONNECTIVITY_SERVICE).asInstanceOf[ConnectivityManager]
|
||||
val networks = manager.getAllNetworks
|
||||
val cmdBuf = new ArrayBuffer[String]()
|
||||
networks.foreach(network => {
|
||||
val networkInfo = manager.getNetworkInfo(network)
|
||||
if (networkInfo.isAvailable) {
|
||||
val netId = network.getClass.getDeclaredField("netId").get(network).asInstanceOf[Int]
|
||||
cmdBuf.append("ndc resolver flushnet %d".formatLocal(Locale.ENGLISH, netId))
|
||||
}
|
||||
})
|
||||
Console.runRootCommand(cmdBuf.toArray)
|
||||
} else {
|
||||
Console.runRootCommand("ndc resolver flushdefaultif", "ndc resolver flushif wlan0")
|
||||
}
|
||||
}
|
||||
|
||||
def startShadowsocksDaemon() {
|
||||
if (profile.route != Route.ALL) {
|
||||
val acl: Array[Array[String]] = profile.route match {
|
||||
@@ -376,7 +303,7 @@ class ShadowsocksNatService extends BaseService {
|
||||
stopRunner(true)
|
||||
} else if (handleConnection) {
|
||||
// Set DNS
|
||||
flushDns()
|
||||
Utils.flushDns()
|
||||
changeState(State.CONNECTED)
|
||||
notification = new ShadowsocksNotification(this, profile.name, true)
|
||||
} else {
|
||||
|
||||
@@ -129,10 +129,17 @@ object Utils {
|
||||
}
|
||||
}
|
||||
|
||||
// Because /sys/class/net/* isn't accessible since API level 24
|
||||
def flushDns() = Console.runRootCommand("for if in /sys/class/net/*; do " +
|
||||
"if [ \"down\" != $(cat $if/operstate) ]; then " + // up or unknown
|
||||
"ndc resolver flushif ${if##*/}; " +
|
||||
"fi " +
|
||||
"done")
|
||||
|
||||
// Blocked > 3 seconds
|
||||
def toggleAirplaneMode(context: Context) = {
|
||||
if (Console.isRoot) {
|
||||
Console.runRootCommand("ndc resolver flushdefaultif", "ndc resolver flushif wlan0")
|
||||
flushDns()
|
||||
true
|
||||
} else if (Build.VERSION.SDK_INT < 17) {
|
||||
toggleBelowApiLevel17(context)
|
||||
|
||||
Reference in New Issue
Block a user