Создание собственного плагина Cordova для проекта ionic2

Многие из нас прошли бы через подобные проблемы, но даже после перехода по наиболее актуальным ссылкамссылка ссылка1 а такжессылка ссылка2 Я не могу решить.

Выпуск:

Создайте собственный плагин (Cordova), чтобы использовать его в проекте ionic2.

ожидание: Этот плагин сможет взаимодействовать с нативными функциями IOS и Android. Чтобы быть точным, я пытаюсь получить доступ к функциям нативного SDK (Aruba Internal Positioning SDK), используя Cordova в Ionic проекте.

Шаг 1 Первоначально созданный плагин в соответствии сссылка ссылка 1

Шаг 2 Создан проект Ionic 2 (создан сэтот основные шаги)

Шаг 3 Файл JavaScript в плагине не смог ссылаться и получить доступ в Ionic2.

После поиска в Google я нашелэто обсуждение , где сказано создать интерфейс в самом плагине по следующей причине.

import {myPluginName} из '../../../plugins/xxx/*.js'

Не будет работать, потому что плагин не является частью ионного пакета.

Если у вас есть собственный плагин, вы можете сделать несколько вещей.

1) Сделайте пиар, чтобы добавить его к собственно-родному

2) Используйте необработанный плагин API. Вы можете использовать API-интерфейс необработанного плагина, не добавляя его в состав Ionic Native. Плагин на объекте окна, так что вы бы нацелены на API нормально

window.plugin.myPlugin.myMethod ()

СогласноПример GITHUBпроектировать таким образом, интерфейс должен быть реализован

interface CordovaPlugins {
  ZPLPrinter: ZPLPrinter;
}

interface ZPLPrinter {

  print(
    ipaddress: string,
    bclabels: any,
    printSuccess: (ip: string, labels: string[]) => void,
    printError: (message: string) => void): void;

}

Теперь я создал аналогичный интерфейс в своем плагине, который следующий в папке плагина www

interface CordovaPlugins {
  Communicator: Communicator;
}

interface Communicator {

  getInfo(successCallback: any, errorCallback: any);

}

Этот интерфейс идеально нацелен на этот метод в файле JS

Device.prototype.getInfo = function(successCallback, errorCallback) {
    console.log("device.js: getInfo function called");
    argscheck.checkArgs('fF', 'Device.getInfo', arguments);
    exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
};

Теперь я застрял, так как мой Ionic проект не имееттипизации сама папка.

В образцеGithub Project, кордовые пакеты указаны с использованиемтипизации папкаTypeScript файл в проекте имеет в видуCordova с помощьюindex.t.js

Импорт по ссылке должен идти как

declare var cordova: Cordova;

Сомнения:

Я в правильном направлении процессаЭто способ созданияCordova плагин и использовать в ионномПочему я не могу получитьtypings папка в Ionic2

РЕДАКТИРОВАТЬ 1:

Просто добавив плагин, даже не ссылаясь на проект Ionic, я попытался запустить на устройстве Android. Но это дало мне следующую ошибку.

Главная ошибка в этом

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ionicframework.cutepuppypics234138/com.ionicframework.cutepuppypics234138.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaPlugin.privateInitialize(java.lang.String, org.apache.cordova.CordovaInterface, org.apache.cordova.CordovaWebView, org.apache.cordova.CordovaPreferences)' on a null object reference

Почему эта ошибка вызывает? Подробные журналы дали ниже

12-08 16:10:49.079 20555-20555/? E/ApkAssets: Error while loading asset assets/natives_blob_64.bin: java.io.FileNotFoundException: assets/natives_blob_64.bin
12-08 16:10:49.079 20555-20555/? E/ApkAssets: Error while loading asset assets/snapshot_blob_64.bin: java.io.FileNotFoundException: assets/snapshot_blob_64.bin
12-08 16:10:49.682 20555-20555/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ionicframework.cutepuppypics234138, PID: 20555
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ionicframework.cutepuppypics234138/com.ionicframework.cutepuppypics234138.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaPlugin.privateInitialize(java.lang.String, org.apache.cordova.CordovaInterface, org.apache.cordova.CordovaWebView, org.apache.cordova.CordovaPreferences)' on a null object reference
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
   at android.app.ActivityThread.access$800(ActivityThread.java:155)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5343)
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void org.apache.cordova.CordovaPlugin.privateInitialize(java.lang.String, org.apache.cordova.CordovaInterface, org.apache.cordova.CordovaWebView, org.apache.cordova.CordovaPreferences)' on a null object reference
   at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:171)
   at org.apache.cordova.PluginManager.startupPlugins(PluginManager.java:97)
   at org.apache.cordova.PluginManager.init(PluginManager.java:86)
   at org.apache.cordova.CordovaWebViewImpl.init(CordovaWebViewImpl.java:115)
   at org.apache.cordova.CordovaActivity.init(CordovaActivity.java:149)
   at org.apache.cordova.CordovaActivity.loadUrl(CordovaActivity.java:224)
   at com.ionicframework.cutepuppypics234138.MainActivity.onCreate(MainActivity.java:39)
   at android.app.Activity.performCreate(Activity.java:6010)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
   at android.app.ActivityThread.access$800(ActivityThread.java:155) 
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
   at android.os.Handler.dispatchMessage(Handler.java:102) 
   at android.os.Looper.loop(Looper.java:135) 
   at android.app.ActivityThread.main(ActivityThread.java:5343) 
   at java.lang.reflect.Method.invoke(Native Method) 
   at java.lang.reflect.Method.invoke(Method.java:372) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
12-08 16:10:49.879 20656-20656/? E/SubDex: SubDex Config : .dex 2
12-08 16:10:50.285 20656-20656/? E/project: extsdcard==/storage/emulated/0/Android/data/com.cleanmaster.mguard/files
12-08 16:10:50.303 20656-20656/? E/project: extsdcard==/storage/emulated/0/Android/data/com.cleanmaster.mguard/files

Ответы на вопрос(3)

Ваш ответ на вопрос