Как получить доступ к собственным функциям из включенной зависимости Java - PullRequest
0 голосов
/ 09 декабря 2018

Я хочу создать оболочку Nativescript для библиотеки Java, чтобы я мог использовать ее функциональные возможности для приложения Nativescript.Похоже, не так уж много статей, в которых подробно говорится об этом, и, похоже, нет четкого способа сделать это в самом приложении Nativescript, поэтому я сейчас делаю это оболочкой для плагинов.

Конкретная библиотека Java, над которой я работаю, это Libsignal-protocol-java .Я пошел вперед и клонировал Nativescript Plugin Seed и добавил эту библиотеку Java в качестве зависимости:

src / platform / android / include.gradle

android {   
}

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

Затем я нашел конкретный пакет, содержащий метод, который я пытаюсь получить доступ ro в исходном коде 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, поскольку для этого требуются определенные функции, недоступные в Nativescript.

AnyПомощь или предложения будут оценены!Для здравомыслия я включу несколько статей, которые я нашел по этому вопросу, которые помогли мне привести меня туда, где я сейчас нахожусь.


Источники

1 Ответ

0 голосов
/ 09 декабря 2018

Как вы видите в исходном коде 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...