2017-07-27 47 views
-1

我正在開發使用自定義API通過USB訪問打印機的打印應用程序,所以我需要一個自定義Cordova插件。我開始開發它,這是一個非常好的挑戰,但也很令人沮喪,因爲我無法弄清楚爲什麼我的插件無法正確使用。 事情是: 1.-插件安裝正確,讓我建立應用程序 2.- Javascript代碼正確運行 3.-我得到一個運行時錯誤,不會崩潰的應用程序。看起來Java代碼被跳過了。我注意到Android監視器出現錯誤。類未找到使用自定義科爾多瓦插件的例外


你可以在這裏找到我的插件: https://github.com/krlozadan/cordova-custom-printer-plugin


W/System.err: java.lang.ClassNotFoundException: com.duplou.cordova.plugin.customprinter.CustomPrinter 
W/System.err:  at java.lang.Class.classForName(Native Method) 
W/System.err:  at java.lang.Class.forName(Class.java:324) 
W/System.err:  at java.lang.Class.forName(Class.java:285) 
W/System.err:  at org.apache.cordova.PluginManager.instantiatePlugin(PluginManager.java:489) 
W/System.err:  at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:169) 
W/System.err:  at org.apache.cordova.PluginManager.exec(PluginManager.java:122) 
W/System.err:  at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57) 
W/System.err:  at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41) 
W/System.err:  at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) 
W/System.err:  at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
W/System.err:  at android.os.Looper.loop(Looper.java:148) 
W/System.err:  at android.os.HandlerThread.run(HandlerThread.java:61) 
W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.duplou.cordova.plugin.customprinter.CustomPrinter" on path: DexPathList[[zip file "/data/app/1/lib/1/base.apk!/lib/x86, /vendor/lib, /system/lib]] 
W/System.err:  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
W/System.err:  at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
W/System.err:  at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
W/System.err: ... 13 more 
W/System.err: Suppressed: java.lang.ClassNotFoundException: com.duplou.cordova.plugin.customprinter.CustomPrinter 
W/System.err:  at java.lang.Class.classForName(Native Method) 
W/System.err:  at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
W/System.err:  at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
W/System.err:  at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
W/System.err:  ... 14 more 
W/System.err: Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 
I/System.out: Error adding plugin com.duplou.cordova.plugin.customprinter.CustomPrinter. 
W/System.err: 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 
W/System.err:  at org.apache.cordova.PluginManager.getPlugin(PluginManager.java:171) 
W/System.err:  at org.apache.cordova.PluginManager.exec(PluginManager.java:122) 
W/System.err:  at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57) 
W/System.err:  at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41) 
W/System.err:  at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) 
W/System.err:  at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
W/System.err:  at android.os.Looper.loop(Looper.java:148) 
W/System.err:  at android.os.HandlerThread.run(HandlerThread.java:61) 
D/SystemWebChromeClient: file:///android_asset/www/plugins/cordova-custom-printer-plugin/www/custom-printer.js: Line 11 : Se terminó la ejecución 
I/chromium: [INFO:CONSOLE(11)] "Se terminó la ejecución", source: file:///android_asset/www/plugins/cordova-custom-printer-plugin/www/custom-printer.js (11) 
D/CordovaWebViewImpl: onPageFinished(file:///android_asset/www/index.html) 
W/PluginManager: THREAD WARNING: exec() call to Sim.getSimInfo blocked the main thread for 53ms. Plugin should use CordovaInterface.getThreadPool(). 
D/SystemWebChromeClient: file:///android_asset/www/build/main.js: Line 1436 : ERROR 
I/chromium: [INFO:CONSOLE(1436)] "ERROR", source: file:///android_asset/www/build/main.js (1436) 
W/BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 12139 
D/EGL_emulation: eglMakeCurrent: 0xae414a40: ver 2 0 (tinfo 0xa14bfbe0) 

Here's my ionic info output 
global packages: 
@ionic/cli-utils : 1.5.0 
Cordova CLI  : 7.0.1 
Ionic CLI  : 3.5.0 
local packages: 

@ionic/app-scripts    : 1.3.7 
@ionic/cli-plugin-cordova  : 1.4.1 
@ionic/cli-plugin-ionic-angular : 1.3.2 
Cordova Platforms    : android 6.2.3 
Ionic Framework     : ionic-angular 3.2.1 
System: 

Node  : v6.10.3 
OS   : macOS Sierra 
Xcode  : Xcode 8.3.2 Build version 8E2002 
ios-deploy : not installed 
ios-sim : not installed 
npm  : 3.10.10 
+0

您是否完成了與藍牙打印機相同的操作? –

+0

不,我沒有,這是我第一次開發科爾多瓦插件,實際上,就在昨天,我得到了它與客戶端請求的所有功能一起工作:)爲什麼?我可以用一些嗎? – krlozadan

+0

是的,實際上我想從starIO打印機的本機ios sdk構建自定義插件,但有一個GitHub但這不適用於ionic1,所以這對我沒有任何作用。 –

回答

1

我看到你指向你的config.xml中的jar文件。如果你真的想繼續使用這個jar文件,請確保該路徑在android平臺文件夾中正確映射,並且它與類路徑相匹配。

如果你想做一個簡單的測試,你應該一個一個的聲明你的android源文件。所以在節點配置文件之後,您應該添加如下這樣的幾個節點:

<source-file src="src/android/src/net/mydomain/myplugin/MyClass.java" target-dir="src/mydomain/myplugin" /> 
+0

謝謝!我發現我的錯誤與你的幫助,事實證明我有源文件標籤嚴重打字。所以科爾多瓦CLI不會告訴我我有這個問題,我一直在到處搜索! – krlozadan

+0

很高興聽到!該死的錯字;) – Requiem13

1

這是你的堆棧跟蹤的最重要的部分:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.duplou.cordova.plugin.customprinter.CustomPrinter" 

您的科爾多瓦配置引用了CustomPrinter插件。當JavaScript觸發加載時,Java類無法找到,從而導致應用程序崩潰。

您需要確保Java類存在於您的應用程序包中。

+0

這是我的plugin.xml文件配置行' ' – krlozadan

+1

這就是涉及Java類的JavaScript部分。問題是當您的應用程序加載時,Java類不在您的運行時路徑中。 –

相關問題