我正在为Java库创建Nativescript包装器,以便可以将其功能用于Nativescript应用程序。似乎没有太多文章对此进行详细介绍,并且在Nativescript应用程序本身中似乎没有明确的方法可以做到这一点,这就是为什么我现在将其作为插件包装。
我要包括的特定Java库是Libsignal-protocol-java。我继续并克隆了Nativescript Plugin Seed并将此Java库添加为依赖项:
src / platforms / android / include.gradle
android {
}
dependencies {
compile 'org.whispersystems:signal-protocol-android:2.3.0+'
}
然后,我找到了一个特定的程序包,其中包含要在Java源中尝试访问的方法:KeyHelper.generateRegistrationId();
source。一篇文章提到这是必需的,因为在实例化类和方法时必须指定包。
然后我按照以下步骤设置libsignal-protocol.common.ts
来尝试并使用本机方法:
src / libsignal-protocol.common.ts
import { Observable } from 'tns-core-modules/data/observable';
export class Common extends Observable {
constructor() {
// does not work
let test1 = new org.whispersystems.libsignal.util.KeyHelper.generateRegistrationId();
// does not work
let test2 = org.whispersystems.libsignal.util.KeyHelper.generateRegistrationId();
console.log(test1);
console.log(test2);
}
}
令我沮丧的是,记录器返回了此错误:
System.err: Error: java.lang.Exception: Failed resolving method generateRegistrationId on class org.whispersystems.libsignal.util.KeyHelper
我不确定现在还有其他地方,我想走这条路,因为为这个很棒的Java库创建包装似乎比尝试浏览器的javascript库更安全/更干净,因为它需要某些功能,这些功能在原生脚本。
任何帮助或建议将不胜感激!出于理智,我将收录一些有关此事的文章,这些文章有助于使我进入现在的状态。
来源
答案 0 :(得分:1)
正如您在源代码generateRegistrationId中看到的那样,该方法需要一个布尔参数。
public static int generateRegistrationId(boolean extendedRange) {
try {
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
if (extendedRange) return secureRandom.nextInt(Integer.MAX_VALUE - 1) + 1;
else return secureRandom.nextInt(16380) + 1;
} catch (NoSuchAlgorithmException e) {
throw new AssertionError(e);
}
}
因此,您必须将布尔值传递给方法,
let test2 = org.whispersystems.libsignal.util.KeyHelper.generateRegistrationId(false);