如何通过随附的Java依赖项访问本机功能

时间:2018-12-09 18:06:10

标签: javascript java android nativescript

我正在为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库更安全/更干净,因为它需要某些功能,这些功能在原生脚本。

任何帮助或建议将不胜感激!出于理智,我将收录一些有关此事的文章,这些文章有助于使我进入现在的状态。


来源

1 个答案:

答案 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);