Создание собственного плагина 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