diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b3e620de..01fede20 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -157,6 +157,7 @@ dependencies { implementation("com.takisoft.preferencex:preferencex-colorpicker:1.1.0") implementation("com.squareup.okhttp3:okhttp:$okhttpVersion") implementation("com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttpVersion") + implementation("com.squareup.okhttp3:logging-interceptor:$okhttpVersion") implementation("dev.rikka.rikkax.appcompat:appcompat:1.2.0-rc01") implementation("dev.rikka.rikkax.core:core:1.3.0") implementation("dev.rikka.rikkax.insets:insets:1.0.1") diff --git a/app/src/main/java/io/github/lsposed/manager/App.java b/app/src/main/java/io/github/lsposed/manager/App.java index 51acbb6f..8bf70f48 100644 --- a/app/src/main/java/io/github/lsposed/manager/App.java +++ b/app/src/main/java/io/github/lsposed/manager/App.java @@ -26,6 +26,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Handler; import android.os.Looper; +import android.util.Log; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; @@ -41,6 +42,7 @@ import io.github.lsposed.manager.util.DoHDNS; import io.github.lsposed.manager.util.theme.ThemeUtil; import okhttp3.Cache; import okhttp3.OkHttpClient; +import okhttp3.logging.HttpLoggingInterceptor; import rikka.material.app.DayNightDelegate; public class App extends Application { @@ -107,10 +109,12 @@ public class App extends Application { @NonNull public static OkHttpClient getOkHttpClient() { if (okHttpClient == null) { - okHttpClient = new OkHttpClient.Builder() - .cache(getOkHttpCache()) - .dns(new DoHDNS()) - .build(); + OkHttpClient.Builder builder = new OkHttpClient.Builder().cache(getOkHttpCache()); + HttpLoggingInterceptor.Logger logger = s -> Log.v(TAG, s); + HttpLoggingInterceptor log = new HttpLoggingInterceptor(logger); + log.setLevel(HttpLoggingInterceptor.Level.HEADERS); + if (BuildConfig.DEBUG) builder.addInterceptor(log); + okHttpClient = builder.dns(new DoHDNS(builder.build())).build(); } return okHttpClient; } diff --git a/app/src/main/java/io/github/lsposed/manager/util/DoHDNS.java b/app/src/main/java/io/github/lsposed/manager/util/DoHDNS.java index 1ca821ad..d9cd3848 100644 --- a/app/src/main/java/io/github/lsposed/manager/util/DoHDNS.java +++ b/app/src/main/java/io/github/lsposed/manager/util/DoHDNS.java @@ -25,6 +25,7 @@ import androidx.annotation.NonNull; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; +import java.util.Locale; import io.github.lsposed.manager.App; import okhttp3.Dns; @@ -34,41 +35,35 @@ import okhttp3.dnsoverhttps.DnsOverHttps; public class DoHDNS implements Dns { - private static DnsOverHttps dnsOverHttps; + private static DnsOverHttps cloudflare; + private static DnsOverHttps alidns; - public DoHDNS() { - DnsOverHttps.Builder builder = new DnsOverHttps.Builder() + public DoHDNS(OkHttpClient client) { + cloudflare = new DnsOverHttps.Builder() .resolvePrivateAddresses(true) - .resolvePublicAddresses(true) - .client(new OkHttpClient.Builder().build()) - .url(HttpUrl.get("https://cloudflare-dns.com/dns-query")); - try { - builder.bootstrapDnsHosts( - InetAddress.getByName("104.16.248.249"), - InetAddress.getByName("104.16.249.249"), - InetAddress.getByName("104.16.111.25"), - InetAddress.getByName("104.16.112.25"), - InetAddress.getByName("162.159.36.1"), - InetAddress.getByName("162.159.46.1"), - InetAddress.getByName("1.1.1.1"), - InetAddress.getByName("1.0.0.1"), - InetAddress.getByName("2606:4700:4700::1111"), - InetAddress.getByName("2606:4700:4700::1001"), - InetAddress.getByName("2606:4700:4700::0064"), - InetAddress.getByName("2606:4700:4700::6400")); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - dnsOverHttps = builder.post(true).build(); + .client(client) + .url(HttpUrl.get("https://cloudflare-dns.com/dns-query")) + .build(); + + alidns = new DnsOverHttps.Builder() + .resolvePrivateAddresses(true) + .client(client) + .url(HttpUrl.get("https://dns.alidns.com/dns-query")) + .build(); } @NonNull @Override public List lookup(@NonNull String hostname) throws UnknownHostException { if (App.getPreferences().getBoolean("doh", false)) { - List inetAddresses = dnsOverHttps.lookup(hostname); + List inetAddresses = cloudflare.lookup(hostname); if (inetAddresses.size() > 0) { return inetAddresses; + } else if ("CN".equals(Locale.getDefault().getCountry())) { + inetAddresses = alidns.lookup(hostname); + if (inetAddresses.size() > 0) { + return inetAddresses; + } } } return SYSTEM.lookup(hostname);