0

Ich versuche RecyclerView in meinem Projekt zu verwenden, aber weil wir einige schlechte Proxies haben, kann ich nicht leisten, kompilieren "com.android.support:recyclerview-v7:+" zu meinem build.gradle hinzufügen, weil der Download ist sehr langsam. Für die anderen Bibliotheken habe ich einfach die .jar-Dateien zum Ordner 'libs' des Projekts hinzugefügt und in build.gradle habe ich compile files('libs/android-support-v7-recyclerview.jar'). Ich habe die .jar aus dem Android SDK unter /extras/android/support/v7/recyclerview/libs. Ich habe die android-support-v4 Bibliothek von der gleichen Stelle und es funktioniert gut.Android Verwenden Sie RecyclerView mit lokalen Recyclerview-Bibliothek, anstatt es aus dem Maven Repo laden

Die App wird erstellt, aber zur Laufzeit bekomme ich eine NoClassDefFoundError.

compile "com.android.support:support-v4:21.+" 
compile "com.android.support:gridlayout-v7:21.+" 
compile "com.android.support:cardview-v7:21.+" 

compile "com.android.support:recyclerview-v7:+" 

Mit diesen diejenigen:

compile files('libs/android-support-v4.jar') 
compile files('libs/android-support-v7-gridlayout.jar') 
compile files('libs/android-support-v7-cardview.jar') 
compile files('libs/android-support-v7-recyclerview.jar') 

und das Hinzufügen der 4 JAR-Dateien aus dem gleichen SDK Application/libs (Das Verhalten kann durch das Ersetzen in Application/build.gradle diese Zeilen in /samples/android-21/ui/views/RecyclerView gefunden mit Googles RecyclerView Probe repliziert werden Sie müssen den Ordner erstellen, da er keinen hat).

Das vollständige Fehlerprotokoll von der Google-Probe erzeugt:

04-27 16:22:02.122 1405-1405/com.example.android.recyclerview E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.example.android.recyclerview, PID: 1405 
                       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.recyclerview/com.example.android.recyclerview.MainActivity}: android.view.InflateException: Binary XML file line #38: Error inflating class android.support.v7.widget.RecyclerView 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                        at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5254) 
                        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:903) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                       Caused by: android.view.InflateException: Binary XML file line #38: Error inflating class android.support.v7.widget.RecyclerView 
                        at android.view.LayoutInflater.createView(LayoutInflater.java:633) 
                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
                        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                        at com.example.android.recyclerview.RecyclerViewFragment.onCreateView(RecyclerViewFragment.java:67) 
                        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
                        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
                        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
                        at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339) 
                        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602) 
                        at com.example.android.common.activities.SampleActivityBase.onStart(SampleActivityBase.java:39) 
                        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236) 
                        at android.app.Activity.performStart(Activity.java:6006) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                        at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5254)  
                        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:903)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
                       Caused by: java.lang.reflect.InvocationTargetException 
                        at java.lang.reflect.Constructor.newInstance(Native Method) 
                        at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
                        at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)  
                        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)  
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)  
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)  
                        at com.example.android.recyclerview.RecyclerViewFragment.onCreateView(RecyclerViewFragment.java:67)  
                        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)  
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)  
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)  
                        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)  
                        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)  
                        at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)  
                        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)  
                        at com.example.android.common.activities.SampleActivityBase.onStart(SampleActivityBase.java:39)  
                        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)  
                        at android.app.Activity.performStart(Activity.java:6006)  
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)  
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                        at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5254)  
                        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:903)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
                       Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/recyclerview/R$styleable; 
                        at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:487) 
                        at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:456) 
                        at java.lang.reflect.Constructor.newInstance(Native Method)  
                        at java.lang.reflect.Constructor.newInstance(Constructor.java:288)  
                        at android.view.LayoutInflater.createView(LayoutInflater.java:607)  
                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)  
                        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)  
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)  
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)  
                        at com.example.android.recyclerview.RecyclerViewFragment.onCreateView(RecyclerViewFragment.java:67)  
                        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)  
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)  
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)  
                        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)  
                        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)  
                        at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)  
                        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)  
                        at com.example.android.common.activities.SampleActivityBase.onStart(SampleActivityBase.java:39)  
                        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)  
                        at android.app.Activity.performStart(Activity.java:6006)  
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)  
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                        at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5254)  
                        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:903)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
                       Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.recyclerview.R$styleable" on path: DexPathList[[zip file "/data/app/com.example.android.recyclerview-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] 
                        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
                        at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:487)  
                        at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:456)  
                        at java.lang.reflect.Constructor.newInstance(Native Method)  
                        at java.lang.reflect.Constructor.newInstance(Constructor.java:288)  
                        at android.view.LayoutInflater.createView(LayoutInflater.java:607)  
                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)  
                        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)  
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)  
                        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)  
                        at com.example.android.recyclerview.RecyclerViewFragment.onCreateView(RecyclerViewFragment.java:67)  
                        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)  
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)  
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)  
                        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)  
                        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)  
                        at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339)  
                        at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602)  
                        at com.example.android.common.activities.SampleActivityBase.onStart(SampleActivityBase.java:39)  
                        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)  
                        at android.app.Activity.performStart(Activity.java:6006)  
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)  
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                        at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5254)  
                        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:903)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
                        Suppressed: java.lang.ClassNotFoundException: android.support.v7.recyclerview.R$styleable 
                        at java.lang.Class.classForName(Native Method) 
                        at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
                        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
                        at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
                          ... 32 more 
                       Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

ich auch versucht, wie die Leute vorgeschlagen, die classes.jar in extras/android/m2repository/com/android/support/recyclerview-v7/23.3.0/recyclerview-v7-23.3.0.aar gefunden zu verwenden, aber das Ergebnis war genau das gleiche.

Irgendwelche Hinweise darauf, was ich vermisse/falsch mache?

+1

Ich denke, die 'jar' Datei ist nicht genug. Sie müssen stattdessen die Datei 'aar' (recyclerview-v7-23.3.0.aar) verwenden. http://stackoverflow.com/questions/16682847/how-to-manual-include-external-aar-package-using-new-gradel-android-build-syst – Blehi

+0

@Blehi: Ja, das war es. Dank dafür! Du kannst deinen Kommentar als Antwort posten, damit ich ihn annehmen kann! Stellt sich heraus, die JAR-Datei hatte den Code, aber es hatte nicht die Ressourcen, so dass die Verwendung der AAR stattdessen behoben. – Scorpio

Antwort

1

Die Datei jar enthält nicht den gesamten erforderlichen Quellcode. Sie müssen stattdessen die Datei aar verwenden.

Überprüfen Sie bitte this thread, wie eine aar Datei in Ihrem Projekt enthalten sein kann.