我希望为Java库创建一个Nativescript包装器,这样我就可以为Nativescript应用程序利用它的功能。似乎没有太多的文章详细讨论这个问题,而且似乎在Nativescript应用程序中也没有明确的方法来实现这一点,这就是为什么我现在要把它变成一个插件包装器。
我所包含的特定Java库是Libsignal java。我已经克隆了土豆子并将这个库添加为依赖项:
src/platforms/android/include.gradle
android {
}
dependencies {
compile 'org.whispersystems:signal-protocol-android:2.3.0+'
}然后,我在Java源代码:KeyHelper.generateRegistrationId(); 来源中找到了包含我正在尝试的ro访问方法的特定包。有一篇文章提到这是必需的,因为您必须在实例化类和方法时指定包。
然后,按照以下方式设置我的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库,因为它需要Nativescript中没有的某些特性。
如有任何帮助或建议,将不胜感激!为了保持理智,我将包括一些我在这个问题上找到的文章,这些文章帮助我找到了我现在所处的位置。
源
发布于 2018-12-09 19:43:18
正如您在源代码中看到的,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);https://stackoverflow.com/questions/53695194
复制相似问题