Вызов метода Android (sdk, aar или jar) из nativescript

#android #jar #sdk #aar #nativescript-angular

#Android #jar #sdk #aar #nativescript-angular

Вопрос:

Мне нужно разработать приложение nativescript, интегрированное с sdk android native.

Я создал образец приложения в android Studio и сгенерировал файл aar, затем я создаю плагин nativescript, используя этот файл.

Наконец, я включил этот плагин в приложение nativescript.

Когда я попытался получить доступ к методу, представленному в файле aar, я получил сообщение о том, что метод не является функцией.

В первый раз я попытался создать aar со следующим классом

(Java)

 package com.example.toasterlibrary;
import android.content.Context;
import android.widget.Toast;

public class ToasterMessage {
    public ToasterMessage() {
    }

    public static void show(Context c,String message){
       Toast.makeText(c,message,Toast.LENGTH_SHORT).show();
    }
}
  

Затем попытался изменить функцию «show», чтобы она не была статичной

(Java)

 public void show(Context context, String message) {
    CharSequence text = "Hello NativeScript!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
}
  

С другой стороны, я создал плагин для вызова sdk, и я получил сообщение об ошибке в de index.js файл, включенный в плагин nativescript, в частности, в строке toaster.показать (контекст, «Привет, мир»);

(Плагин Nativescript)

 var application = require("application");
var context = application.android.context;

module.exports = {
    showToast: function() {        
       var toaster = new com.example.toasterlibrary.ToasterMessage();        
        toaster.show(context,"Hello world");
    }
};
  

Наконец, это файл, который использует плагин, он работает правильно, но я включаю его, чтобы дать больше контекста

(Приложение Nativescript)

 import { Component, OnInit } from "@angular/core";
import * as ToasterMessage  from 'nativescript-toaster'

@Component({
    selector: "ns-items",
    moduleId: module.id,
    templateUrl: "./items.component.html"
})
export class ItemsComponent implements OnInit {

    constructor() { }

    ngOnInit(): void {
        ToasterMessage.showToast();
    }
}
  

Я ожидаю, что это запустит всплывающее сообщение, но вызовет следующую ошибку:

 ERROR TypeError: toaster.show is not a function
  

Эта ошибка возникает в плагине nativescript после выполнения этой команды tns run android:

Комментарии:

1. Вы пробовали чистую сборку после размещения обновленного AAR, в котором вы преобразовали show в нестатический метод? У вас уже есть плагин в Git? Между ними уже есть плагины для toaster. Более того, к этим API-интерфейсам можно получить доступ во время выполнения JS, вам на самом деле не нужно создавать AAR, на всякий случай, если вы еще не знаете.

2. Большое вам спасибо за ответ, мне не хватало чистой сборки. Мне нужно было выполнить минимальный интеграционный тест с Android sdk, я сделал это с помощью aar, могу ли я сделать то же самое с sdk?

3. Да, конечно, вы можете.

Ответ №1:

Похоже, вам не хватало чистой сборки.

Всякий раз, когда вы обновляете файл AAR, вам может потребоваться выполнить чистую сборку, иначе плагин / проект может указывать на более старую версию вашей библиотеки.