Android 指定 DNS (为什么新用户安装完你的App后,与Api服务连接失败?)
jf wang Lv7

过去一直有个问题:发现我的新用户在安装完App后,打开时提示没有网络(连接到我的Api服务器失败)

直到今天翻qiniu的SDK时才明白过来,问题可能在DNS

七牛的SDK一直使用了一个叫HappyDNS的一个库。我一直以为这是“脱裤子放屁”。

直到今天才明白这中间的“中国特色”

Android

环境

  • 开发工具:Android Studio
  • 语言:Kotlin
  • 依赖包:
    • com.squareup.okhttp3:okhttp:3.14.2
    • com.qiniu:happy-dns:0.2.13

关键代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
val client = OkHttpClient.Builder()
.dns {
if (it == "my.api.host.domain.name") {
InetAddress.getAllByName(Config.SERVER_IP).toMutableList()
}else{
try{
val resolvers = mutableListOf<IResolver>()
try{
resolvers.add(Resolver(InetAddress.getByName("119.29.29.29")))
}catch (e:Exception){}
try{
resolvers.add(Resolver(InetAddress.getByName("114.114.114.114")))
}catch (e:Exception){}
try{
resolvers.add(Resolver(InetAddress.getByName("8.8.8.8")))
}catch (e:Exception){}
if (resolvers.size == 0) throw UnknownHostException("$it resolver fail")
DnsManager(NetworkInfo.normal,resolvers.toTypedArray()).queryInetAdress(Domain(it)).toMutableList()
}catch (e:Exception){
Dns.SYSTEM.lookup(it)
}
}
}.build()
  • 本文标题:Android 指定 DNS (为什么新用户安装完你的App后,与Api服务连接失败?)
  • 本文作者:jf wang
  • 创建时间:2019-07-16 21:54:30
  • 本文链接:https://www.wangjunfeng.com.cn/2019/07/16/android-custom-dns/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!