2017-07-27 2 views
-1

Ich entwickle eine Druck-App, die eine benutzerdefinierte API verwendet, um über USB auf den Drucker zuzugreifen, also brauchte ich ein benutzerdefiniertes Cordova-Plugin. Ich habe angefangen, es zu entwickeln, es war eine sehr gute Herausforderung, aber auch sehr frustrierend, weil ich nicht herausfinden kann, warum mein Plugin nicht korrekt verwendet werden kann. Die Sache ist: 1.- Das Plugin installiert korrekt und lässt mich die Anwendung erstellen 2.- Der Javascript-Code läuft korrekt 3.- Ich bekomme einen Laufzeitfehler, der die App nicht zum Absturz bringt. Es scheint, dass der Java-Code übersprungen wird. Und mir ist aufgefallen, dass im Android Monitor ein Fehler aufgetreten ist.Klasse nicht gefunden Ausnahme mit benutzerdefiniertem Cordova-Plugin


Sie können mein Plugin finden Sie hier: 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

haben Sie das gleiche mit Bluetooth-Drucker getan? –

+0

Nein, ich habe es nicht, es ist das erste Mal, dass ich ein Cordova-Plugin entwickle, eigentlich habe ich es erst gestern mit allen Funktionen, die der Client angefordert hat, bearbeitet :) Warum ?? Kann ich etwas gebrauchen? – krlozadan

+0

ja, eigentlich möchte ich benutzerdefinierte Plugin von StarIO Drucker nativen ios SDK zu bauen, gibt es einen GitHub aber das war nicht arbeiten und für ionic1, so dass das nicht für mich gearbeitet wurde. –

Antwort

1

Ich sehe, dass Sie auf eine JAR-Datei in Ihrer config.xml zeigen. Wenn Sie diese JAR-Datei wirklich weiterhin verwenden möchten, stellen Sie sicher, dass der Pfad in den Ordnern der Android-Plattform korrekt zugeordnet ist und dass er dem Klassenpfad entspricht.

Wenn Sie einen einfachen Test durchführen möchten, sollten Sie Ihre Android-Quelldateien einzeln deklarieren. Also nach dem Knoten config-Datei sollten Sie mehrere Knoten wie diesen hinzufügen:

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

Danke! Ich habe meinen Fehler mit Ihrer Hilfe gefunden, es stellte sich heraus, dass ich das Quelldatei-Tag schlecht eingegeben hatte. Also würde das Cordova CLI mir nicht sagen, dass ich dieses Problem hatte und ich überall gesucht hatte! – krlozadan

+0

Es ist gut zu hören! verdammter Tippfehler;) – Requiem13

1

Dies ist der wichtigste Teil Ihrer Stacktrace ist:

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

Ihre Cordova-Konfiguration verweist auf das CustomPrinter-Plugin. Wenn Javascript das Laden auslöst, kann die Java-Klasse nicht gefunden werden und Ihre Anwendung stürzt ab.

Sie müssen sicherstellen, dass die Java-Klasse in Ihrem Anwendungspaket vorhanden ist.

+0

Dies ist meine plugin.xml Datei Config-Zeile ' ' – krlozadan

+1

Das ist der JavaScript-Teil, der sich auf die Java-Klasse bezieht. Das Problem ist, dass die Java-Klasse nicht in Ihrem Laufzeitpfad ist, wenn Ihre Anwendung geladen wird. –

Verwandte Themen