首页 文章

如何从包含的Java依赖项访问本机功能

提问于
浏览
0

我正在寻找为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);
    }
}

令我沮丧的是, Logger 返回了这个错误:

System.err: Error: java.lang.Exception: Failed resolving method generateRegistrationId on class org.whispersystems.libsignal.util.KeyHelper

我不知道现在还要去哪里,我想走这条路,因为为这个令人敬畏的Java库创建一个包装器似乎更安全/更清洁,而不是尝试浏览他们的javascript库,因为它需要Nativescript中没有的某些功能 .

任何帮助或建议将不胜感激!为了理智,我将在这个问题上加入一些文章,这些文章帮助我了解了我现在所处的位置 .


Sources

1 回答

  • 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);
    

相关问题