Вызов метода Android (SDK, AAR или JAR) из nativescript - PullRequest
1 голос
/ 20 апреля 2019

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

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

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

Когда я попытался получить доступ к методу, представленному в файле 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.show (context, "Hello world");

(плагин 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");
    }
};

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

(App 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 Ответ

1 голос
/ 20 апреля 2019

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

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

...