首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从包含的Java依赖项访问本机功能

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

Stack Overflow用户
提问于 2018-12-09 18:06:09
回答 1查看 179关注 0票数 0

我希望为Java库创建一个Nativescript包装器,这样我就可以为Nativescript应用程序利用它的功能。似乎没有太多的文章详细讨论这个问题,而且似乎在Nativescript应用程序中也没有明确的方法来实现这一点,这就是为什么我现在要把它变成一个插件包装器。

我所包含的特定Java库是Libsignal java。我已经克隆了土豆子并将这个库添加为依赖项:

src/platforms/android/include.gradle

代码语言:javascript
运行
复制
android {   
}

dependencies {
  compile 'org.whispersystems:signal-protocol-android:2.3.0+'
}

然后,我在Java源代码:KeyHelper.generateRegistrationId(); 来源中找到了包含我正在尝试的ro访问方法的特定包。有一篇文章提到这是必需的,因为您必须在实例化类和方法时指定包。

然后,按照以下方式设置我的libsignal-protocol.common.ts,以尝试和使用本机方法:

src/libsignal-protocol.common.ts

代码语言:javascript
运行
复制
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);
    }
}

令我沮丧的是,记录器返回了这个错误:

代码语言:javascript
运行
复制
System.err: Error: java.lang.Exception: Failed resolving method generateRegistrationId on class org.whispersystems.libsignal.util.KeyHelper

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

如有任何帮助或建议,将不胜感激!为了保持理智,我将包括一些我在这个问题上找到的文章,这些文章帮助我找到了我现在所处的位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-09 19:43:18

正如您在源代码中看到的,generateRegistrationId方法需要一个布尔参数。

代码语言:javascript
运行
复制
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);
    }
  }

所以你必须把一个布尔值传递给方法,

代码语言:javascript
运行
复制
let test2 = org.whispersystems.libsignal.util.KeyHelper.generateRegistrationId(false);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53695194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档