Javascript 在android上的react native with JAVA中执行dns srv请求

Javascript 在android上的react native with JAVA中执行dns srv请求,javascript,java,android,react-native,dns,Javascript,Java,Android,React Native,Dns,我正在尝试通过android的反应型本机应用程序解析DNS SRV条目。不幸的是,在对npm和google进行了一些研究之后,我找不到合适的库,并试图自己实现一个本地JAVA实现。不幸的是没有成功 因此,我按照Facebook()的官方指南创建了一个本地模块。但在此之前,我用JAVA做了一个通用测试,并取得了成功。下面可以找到示例代码 本机Java实现。我已经创建了一个新的maven项目,将dnsjava作为依赖项() package test.jsc; 导入org.xbill.DNS.*; 公

我正在尝试通过android的反应型本机应用程序解析DNS SRV条目。不幸的是,在对npm和google进行了一些研究之后,我找不到合适的库,并试图自己实现一个本地JAVA实现。不幸的是没有成功

因此,我按照Facebook()的官方指南创建了一个本地模块。但在此之前,我用JAVA做了一个通用测试,并取得了成功。下面可以找到示例代码

本机Java实现。我已经创建了一个新的maven项目,将dnsjava作为依赖项()

package test.jsc;
导入org.xbill.DNS.*;
公共类应用程序
{
公共静态void main(字符串[]args)
{
试一试{
Record[]records=新查找(“\u 2ndlock.\u tcp.symlink.de”,Type.SRV.run();
if(records!=null&&records.length>0){
System.out.println(记录[0]);
}
}catch(textparse异常){
e、 printStackTrace();
System.out.println(“未找到服务”);
}
}
}
那工作得很好,在我的终端上打印出了记录

_2ndlock._tcp.symlink.de.   600 IN  SRV 10 5 443 jarvis.symlink.de.
到目前为止,一切都很好

然后,我为react本机应用程序创建了本机实现。 也就是说,在我的react本地项目中的文件夹中,是android/app/src/java/com/secondlock/SymlinkDnsSrv.java。该类提供了“resolveDnsSrvRecord”方法来解析dns条目

package com.secondlock;
导入com.facebook.react.bridge.ReactApplicationContext;
导入com.facebook.react.bridge.ReactContextBaseJavaModule;
导入com.facebook.react.bridge.ReactMethod;
导入org.xbill.DNS.*;
导入com.facebook.react.bridge.Promise;
公共类SymlinkDnsSrv扩展了ReactContextBaseJavaModule{
公共符号链接DNSSRV(ReactApplicationContext reactContext){
超级(反应上下文);
}
@凌驾
公共字符串getName(){
返回“SymlinkDnsSrv”;
}
@反应法
public void resolvednsrvrecord(字符串域,承诺){
试一试{
记录[]记录=新查找(域,类型.SRV).run();
承诺、解决(记录);
}捕获(例外e){
承诺.拒绝(e);
}
}
}
这是我的react原生项目中的包java类,位于文件夹android/app/src/java/com/secondlock/SymlinkDnsSrvPackage.java中

package com.secondlock;
导入com.facebook.react.ReactPackage;
导入com.facebook.react.bridge.NativeModule;
导入com.facebook.react.bridge.ReactApplicationContext;
导入com.facebook.react.uimanager.ViewManager;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公共类SymlinkDnsSrvPackage实现了一个包{
@凌驾
公共列表CreateViewManager(ReactApplicationContext reactContext){
返回集合。emptyList();
}
@凌驾
公共列表createNativeModules(ReactApplicationContext reactContext){
列表模块=新的ArrayList();
添加(新的SymlinkDnsSrv(reactContext));
返回模块;
}
}
在我的react native项目中,如果您已经创建了一个模块加载包装器(正如facebook推荐的那样)来加载本机模块

从'react native'导入{NativeModules};
导出默认的NativeModules.SymlinkDnsSrv;
并在我的引导程序类中使用该实现

private async load():Promise{
控制台日志(SymlinkDnsSrv);
const r=wait SymlinkDnsSrv.resolvednsrvrecord(“'u 2ndlock.'u tcp.symlink.de”);
控制台日志(r);
}
然后我在android模拟器(Pixel Api 28,android 9.0)中运行该应用程序,并从调试器中始终获得以下输出:

{resolveDnsSrvRecord: ƒ, getConstants: ƒ}getConstants: ƒ ()resolveDnsSrvRecord: ƒ fn()__proto__: Object


Bootstrapper.ts:22 null
无法解析DNS SRV记录。返回总是空的

也许有人给了我一个提示,我做错了什么?或者可能已经实施了这样的计划?我期待着每一个帮助,并说声谢谢

+++更新 我在我的虚拟设备上玩过不同的安卓版本,结果证明安卓7一切正常。问题出现在版本8及更高版本。

+1用于询问与编程和开发有关的DNS问题。