Наткнулся на этот вопрос. Поскольку принятого ответа не было, а вопрос о dnsjava был как бы исключен, я еще раз задал этот вопрос в Google и наткнулся на minidns. Он поддерживает DNSSEC, поставляется с отдельным API для запроса записей SRV, и мне удалось интегрировать его с прототипом приложения для Android.
В моем приложении/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.
person
Thomas Urban
schedule
28.09.2019