在 Android 上进行 SRV 记录查找最节省资源的方法是什么,例如在 XMPP 客户端中,例如yaxim https://github.com/pfleidi/yaxim?
我知道:
-
JNDI http://docs.oracle.com/javase/tutorial/jndi/overview/index.html,它是 JavaSE 的一部分,但不是 Android 中的一部分
-
dnsjava http://www.dnsjava.org/,这增加了 800 KByte 的类文件(ProGuard 之后增加了 580 KByte,因此可能很难分离仅用于 SRV 查找所需的文件)
- 原生工具,例如 dig,
nslookup
等,当静态编译时,其占用空间类似于dnsjava
此外,使您的应用程序依赖于本机代码
我读过了查询 DNS 服务记录以查找主机名和 TCP/IP https://stackoverflow.com/questions/738750/querying-the-dns-service-records-to-find-the-hostname-and-tcp-ip/740226,但它只列出了 JNDI 和dnsjava
.
当然,我不是第一个遇到这个问题的人,Java 中一定有一些轻量级 DNS SRV 解析器:-)
Edit:提供DNSSEC验证/DANE证书查询加分。
无意中想到了这个问题。由于没有公认的答案,并且 dnsjava 已经被排除在外,所以我再次将这个问题带到 Google 并偶然发现minidns https://github.com/MiniDNS/minidns。它支持 DNSSEC,附带一个用于查询 SRV 记录的单独 API,我成功地将其与 Android 应用程序原型集成。
在我的 app/build.gradle 中,我添加了以下内容:
dependencies {
implementation "org.minidns:minidns-hla:0.3.2"
}
之后我就能够使用 Kotlin 实现这样的查询:
package com.example.app
import android.os.AsyncTask
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import android.util.Log
import org.minidns.hla.ResolverApi
import java.io.IOException
class MainActivity : AppCompatActivity() {
private val serviceName = "_mysrv._tcp.example.com"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
FetchSrvRecord().execute(serviceName)
}
inner class FetchSrvRecord() : AsyncTask<String, Int, String>() {
override fun doInBackground(names: Array<String>): String {
try {
val result = ResolverApi.INSTANCE.resolveSrv(names[0])
if (result.wasSuccessful()) {
val srvRecords = result.sortedSrvResolvedAddresses
for (record in srvRecords) {
return "https://" + record.srv.target.toString()
}
}
} catch (e: IOException) {
Log.e("PoC", "failed IO", e)
} catch (e: Throwable) {
Log.e("PoC", "failed", e)
}
return "https://example.com"
}
override fun onPostExecute(url: String) {
super.onPostExecute(url);
Log.d("PoC", "got $url");
}
}
}
我对 Java/Android 不太熟悉,我找不到明显可用的文件作为编译该库的输出,因此无法判断该库对您的 apk 大小的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)