2016-04-05 4 views
0

Ich bin die Java-Bibliothek binden Material CalendarView. Mit einer Menge von 12 Transformationen in Metadata.xml konnte ich die Bibliothek mit 0 Fehlern und 15 Warnungen binden. Ich habe Support-Bibliothek v4 Component ver 23.1.1 im Bindungsprojekt hinzugefügt, da die JAR-Datei davon abhängig war. Außerdem habe ich sichergestellt, dass alle Resource-Assets in der JAR-Datei enthalten sind.

Wenn ich diese Bibliothek in einer Android-Probe verwenden, wie unten,

var materialCalendar= new MaterialCalendarView(this); 

diese Ausnahme

geworfen wird ist
Failed resolution of: Lcom/prolificinteractive/materialcalendarview/R$drawable; 

Java.Lang.NoClassDefFoundError: Failed resolution of: Lcom/prolificinteractive/materialcalendarview/R$drawable; ---> Java.Lang.ClassNotFoundException: Didn't find class "com.prolificinteractive.materialcalendarview.R$drawable" on path: DexPathList[[zip file "/data/app/com.fingent.materialcalendarsample-1/base.apk"],nativeLibraryDirectories=[/data/app/com.fingent.materialcalendarsample-1/lib/x86, /vendor/lib, /system/lib]] 
at --- End of managed exception stack trace --- 
at java.lang.ClassNotFoundException: Didn't find class "com.prolificinteractive.materialcalendarview.R$drawable" on path: DexPathList[[zip file "/data/app/com.fingent.materialcalendarsample-1/base.apk"],nativeLibraryDirectories=[/data/app/com.fingent.materialcalendarsample-1/lib/x86, /vendor/lib, /system/lib]] 
at at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
at at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
at at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
at at com.prolificinteractive.materialcalendarview.MaterialCalendarView.setupChildren(MaterialCalendarView.java:358) 
at at com.prolificinteractive.materialcalendarview.MaterialCalendarView.<init>(MaterialCalendarView.java:237) 
at at com.prolificinteractive.materialcalendarview.MaterialCalendarView.<init>(MaterialCalendarView.java:216) 
at at md56fd5622393123d59c6c51d78708f2ed2.MainActivity.n_onCreate(Native Method) 
at at md56fd5622393123d59c6c51d78708f2ed2.MainActivity.onCreate(MainActivity.java:28) 
at at android.app.Activity.performCreate(Activity.java:5990) 
at at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
at at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
at at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at at android.os.Handler.dispatchMessage(Handler.java:102) 
at at android.os.Looper.loop(Looper.java:135) 
at at android.app.ActivityThread.main(ActivityThread.java:5254) 
at at java.lang.reflect.Method.invoke(Native Method) 
at at java.lang.reflect.Method.invoke(Method.java:372) 
at at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
at Suppressed: java.lang.ClassNotFoundException: com.prolificinteractive.materialcalendarview.R$drawable 
at at java.lang.Class.classForName(Native Method) 
at at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
at at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
at at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
at ... 19 more 
at Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 
--- End of inner exception stack trace --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 
at Android.Runtime.JNIEnv.CallNonvirtualVoidMethod (IntPtr jobject, IntPtr jclass, IntPtr jmethod, Android.Runtime.JValue* parms) [0x00084] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:1029 
at Android.Runtime.JNIEnv.FinishCreateInstance (IntPtr instance, IntPtr jclass, IntPtr constructorId, Android.Runtime.JValue* constructorParameters) [0x0000b] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:306 
at MaterialCalendarLibrary.MaterialCalendarView..ctor (Android.Content.Context p0) [0x000c5] in /Users/fingent/Projects/MaterialCalendarLibrary/MaterialCalendarLibrary/obj/Release/generated/src/MaterialCalendarLibrary.MaterialCalendarView.cs:505 
at MaterialCalendarSample.MainActivity.OnCreate (Android.OS.Bundle savedInstanceState) [0x00009] in /Users/fingent/Documents/sreeraj/workspace/Xamarin.MaterialCalendarView/MaterialCalendarSample/MainActivity.cs:17 
at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_ (IntPtr jnienv, IntPtr native__this, IntPtr native_savedInstanceState) [0x00011] in /Users/builder/data/lanes/3053/a94a03b5/source/monodroid/src/Mono.Android/platforms/android-19/src/generated/Android.App.Activity.cs:2475 
at at (wrapper dynamic-method) System.Object:0b8c341c-2f19-42d5-83e9-b3a815827e69 (intptr,intptr,intptr) 
at --- End of managed exception stack trace --- 
at java.lang.NoClassDefFoundError: Failed resolution of: Lcom/prolificinteractive/materialcalendarview/R$drawable; 
at at com.prolificinteractive.materialcalendarview.MaterialCalendarView.setupChildren(MaterialCalendarView.java:358) 
at at com.prolificinteractive.materialcalendarview.MaterialCalendarView.<init>(MaterialCalendarView.java:237) 
at at com.prolificinteractive.materialcalendarview.MaterialCalendarView.<init>(MaterialCalendarView.java:216) 
at at md56fd5622393123d59c6c51d78708f2ed2.MainActivity.n_onCreate(Native Method) 
at at md56fd5622393123d59c6c51d78708f2ed2.MainActivity.onCreate(MainActivity.java:28) 
at at android.app.Activity.performCreate(Activity.java:5990) 
at at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
at at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
at at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at at android.os.Handler.dispatchMessage(Handler.java:102) 
at at android.os.Looper.loop(Looper.java:135) 
at at android.app.ActivityThread.main(ActivityThread.java:5254) 
at at java.lang.reflect.Method.invoke(Native Method) 
at at java.lang.reflect.Method.invoke(Method.java:372) 
at at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
at Caused by: java.lang.ClassNotFoundException: Didn't find class "com.prolificinteractive.materialcalendarview.R$drawable" on path: DexPathList[[zip file "/data/app/com.fingent.materialcalendarsample-1/base.apk"],nativeLibraryDirectories=[/data/app/com.fingent.materialcalendarsample-1/lib/x86, /vendor/lib, /system/lib]] 
at at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
at at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
at at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
at ... 18 more 
at Suppressed: java.lang.ClassNotFoundException: com.prolificinteractive.materialcalendarview.R$drawable 
at at java.lang.Class.classForName(Native Method) 
at at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
at at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
at at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
at ... 19 more 
at Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

Hier der Link zum Projekt in Github Xamarin Material CalendarView

+0

Meine erste Intuition ist, dass etwas mit dem Eingabeglas, das ich verwende, nicht stimmt. Kein Experte mit Eclipse und Java. Muss meinen Ausweg finden. Was ist die empfohlene Methode, um jar aus Quellcode zu generieren? Ich hatte Eclipse benutzt. Es gibt auch eine Befehlszeilenmethode wie in diesem Beitrag beschrieben http://www.wikihow.com/Create-JAR-File – Sreeraj

Antwort

2

Es geht um fehlende Ressourcen, die in Material CalendarView angehängt werden sollten, Sie benötigen eine AAR-Datei.

Gerade Maven gehen und aktuelle AAR-Datei erhalten, die von Autor veröffentlicht: http://mvnrepository.com/artifact/com.prolificinteractive/material-calendarview/1.2.0

die material-calendarview.jar entfernen und neue Datei material-calendarview-1.2.0.aar auf Ihrem verbindliches Projekt getan ziehen!

+0

@trynnguyen, versuchte ich mit der aar-Datei. Aber immer noch das gleiche Problem. Entfernte die JAR-Datei, fügte die aar-Datei dann bereinigt die Lösung und neu aufgebaut. Bibliothek erstellt erfolgreich als früher und wann die gebundene Bibliothek ist verwendet es wirft die gleiche Ausnahme erneut – Sreeraj

+0

@Sreeraj Check Build Aktion der ARR-Datei, sollte sein: LibraryProjectZip –

+0

@Sreeraj Denken Sie auch daran, die Xamarin.Andro neu zu erstellen ID-Anwendungsprojekt (Beispiel-App), das ist ein wichtiger Punkt! –

0

A Drawable ist eine Grafikressource und die Java-Ausnahme befindet sich in der folgenden Zeile (aus der Lib Ihre Bindung):

buttonPast.setImageResource(R.drawable.mcv_action_previous); 

So fehlt Ihnen mcv_action_previous die einen PNG-basierten Pfeil in der res/drawable-xxxhdpi/mcv_action_previous.png innerhalb des Projekts, das Sie binden.

Sind alle Ressourcen enthalten? Irgendeine Ihrer verbindlichen Transformationen oder verbindliche Warnung über Ressourcen?

+0

Ich extrahierte die JAR-Datei mit Archive Utility und checkte. Die Datei mcv_action_previous.png war in res> drawable-xxxhdpi vorhanden. Der Ordner res befindet sich im Stammordner. Es gibt keine Warnungen über Ressourcen während der Kompilierung. – Sreeraj

+0

@Sreeraj Entweder greifen Sie auf die vorkompilierte '.arr'-Datei zu, da sie die Ressourcen enthält, und Xamarin fügt diese Ressourcen automatisch hinzu (dies gilt nicht für' .jar', nur '.arr's. Oder Sie packen sie in die Projizieren Sie sich selbst, konsultieren Sie den folgenden Link, wie Xamarin erklärt, wie man diese Ressourcen verpackt @ https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/ – SushiHangover

+0

Ich habe versucht, mit der vorgefertigten aar-Datei Das Problem besteht immer noch. – Sreeraj

Verwandte Themen