RecyclerView架包的使用问题

来源:互联网 发布:linux查看sas hba卡 编辑:程序博客网 时间:2024/04/29 18:07

以前项目都是用的Android studio,我们知道在as中,使用开源控件可以直接在gradle添加地址,as会自动下载我们所需要的jar包文件,这就很少会出现缺少文件的问题,最近在使用RecyclerView的时候,由于公司项目是用的idea,并且项目以前是ecplise的,并没有使用gradle,所以只能通过添加jar包的形式,这就出现了一些问题,折磨了我一天半的时间,google了很久各种方法试了遍,都没能解决,就在快要准备放弃换方案时无意中解决了。。。特此记录一下,以防再次有人在这上面浪费时间,希望能帮到大家。

第一个错误

Exception: java.lang.Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{in.redbus.android/in.redbus.android.activity.OffersListActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class android.support.v7.widget.RecyclerViewat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{in.redbus.android/in.redbus.android.activity.OffersListActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class android.support.v7.widget.RecyclerViewat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)at android.app.ActivityThread.access$800(ActivityThread.java:148)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5312)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:901)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class android.support.v7.widget.RecyclerViewat android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:757)at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)at android.view.LayoutInflater.inflate(LayoutInflater.java:504)at android.view.LayoutInflater.inflate(LayoutInflater.java:414)at android.view.LayoutInflater.inflate(LayoutInflater.java:365)at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)at in.redbus.android.activity.OffersListActivity.onCreate(OffersListActivity.java:34)at android.app.Activity.performCreate(Activity.java:5953)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)at android.app.ActivityThread.access$800(ActivityThread.java:148)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5312)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:901)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.widget.RecyclerView" on path: DexPathList[[zip file "/data/app/in.redbus.android-2/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.view.LayoutInflater.createView(LayoutInflater.java:571)at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)at android.view.LayoutInflater.inflate(LayoutInflater.java:504)at android.view.LayoutInflater.inflate(LayoutInflater.java:414)at android.view.LayoutInflater.inflate(LayoutInflater.java:365)at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)at in.redbus.android.activity.OffersListActivity.onCreate(OffersListActivity.java:34)at android.app.Activity.performCreate(Activity.java:5953)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)at android.app.ActivityThread.access$800(ActivityThread.java:148)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5312)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:901)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)Suppressed: java.lang.ClassNotFoundException: android.support.v7.widget.RecyclerViewat 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)... 24 more

这个错误是由于android-support-v4.jar和android-support-v7-recyclerview.jar版本不一致导致的,我们可以用android-sdk\extras\android\support下的v4和recyclerview,或者使用android-sdk\extras\android\m2repository\com\android\support这个文件夹下的包,选择对应的版本,进入后有个后缀名为.aar的,将其解压,解压后里面的classes.jar就是其架包,改成对应的名字即可。

下面以android-sdk\extras\android\m2repository\com\android\support文件下的RecyclerView为列

通过上述方式就能拿到我们所需的RecyclerView架包,v4也是同样的步骤,不过要保证两个架包的版本相同,即第二张图所选择的版本是一致的。

然而老的问题解决了,又出现了新的问题,依旧还是缺少东西,错误日志如下,主要看红色的部分:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shinco.lincolncardvr/com.shinco.lincolncardvr.view.FileListActivity}: android.view.InflateException: Binary XML file line #32: Error inflating class com.shinco.lincolncardvr.common.EmptyRecyclerView
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
                                                                              at android.app.ActivityThread.access$700(ActivityThread.java:159)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                              at android.os.Looper.loop(Looper.java:176)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5419)
                                                                              at java.lang.reflect.Method.invokeNative(Native Method)
                                                                              at java.lang.reflect.Method.invoke(Method.java:525)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
                                                                              at dalvik.system.NativeStart.main(Native Method)
                                                                           Caused by: android.view.InflateException: Binary XML file line #32: Error inflating class com.shinco.lincolncardvr.common.EmptyRecyclerView
                                                                              at android.view.LayoutInflater.createView(LayoutInflater.java:626)
                                                                              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
                                                                              at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:361)
                                                                              at android.app.Activity.setContentView(Activity.java:1956)
                                                                              at com.shinco.lincolncardvr.view.FileListActivity.onCreate(FileListActivity.java:241)
                                                                              at android.app.Activity.performCreate(Activity.java:5372)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
                                                                              at android.app.ActivityThread.access$700(ActivityThread.java:159) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                              at android.os.Looper.loop(Looper.java:176) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5419) 
                                                                              at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                              at java.lang.reflect.Method.invoke(Method.java:525) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
                                                                              at dalvik.system.NativeStart.main(Native Method) 
                                                                           Caused by: java.lang.reflect.InvocationTargetException
                                                                              at java.lang.reflect.Constructor.constructNative(Native Method)
                                                                              at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
                                                                              at android.view.LayoutInflater.createView(LayoutInflater.java:600)
                                                                              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
                                                                              at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:361) 
                                                                              at android.app.Activity.setContentView(Activity.java:1956) 
                                                                              at com.shinco.lincolncardvr.view.FileListActivity.onCreate(FileListActivity.java:241) 
                                                                              at android.app.Activity.performCreate(Activity.java:5372) 
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
                                                                              at android.app.ActivityThread.access$700(ActivityThread.java:159) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                              at android.os.Looper.loop(Looper.java:176) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5419) 
                                                                              at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                              at java.lang.reflect.Method.invoke(Method.java:525) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
                                                                              at dalvik.system.NativeStart.main(Native Method) 
                                                                           Caused by: java.lang.NoClassDefFoundError: android.support.v4.widget.ScrollerCompatGingerbread
                                                                              at android.support.v4.widget.ScrollerCompat$ScrollerCompatImplGingerbread.createScroller(ScrollerCompat.java:153)
                                                                              at android.support.v4.widget.ScrollerCompat.<init>(ScrollerCompat.java:270)
                                                                              at android.support.v4.widget.ScrollerCompat.<init>(ScrollerCompat.java:254)
                                                                              at android.support.v4.widget.ScrollerCompat.create(ScrollerCompat.java:250)
                                                                              at android.support.v7.widget.RecyclerView$ViewFlinger.<init>(RecyclerView.java:3428)
                                                                              at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:346)
                                                                              at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:387)
                                                                              at com.shinco.lincolncardvr.common.EmptyRecyclerView.<init>(EmptyRecyclerView.java:22)
                                                                              at java.lang.reflect.Constructor.constructNative(Native Method) 
                                                                              at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
                                                                              at android.view.LayoutInflater.createView(LayoutInflater.java:600) 
                                                                              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:702) 
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
                                                                              at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:361) 
                                                                              at android.app.Activity.setContentView(Activity.java:1956) 
                                                                              at com.shinco.lincolncardvr.view.FileListActivity.onCreate(FileListActivity.java:241) 
                                                                              at android.app.Activity.performCreate(Activity.java:5372) 
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257) 
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349) 
                                                                              at android.app.ActivityThread.access$700(ActivityThread.java:159) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                              at android.os.Looper.loop(Looper.java:176) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5419) 
                                                                              at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                              at java.lang.reflect.Method.invoke(Method.java:525) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
                                                                              at dalvik.system.NativeStart.main(Native Method) 

Caused by: java.lang.NoClassDefFoundError: android.support.v4.widget.ScrollerCompatGingerbread 由这句话可以知道,缺少的是v4包下的文件,这就奇怪了,v4明明已经导了为什么还会缺少文件呢?



这是前文提到的v4.aar解压后所包含的文件,一个classes.jar是我们所需要的对应架包,我们还可以看到有一个libs的文件夹,在项目工程中,libs文件夹的作用就是用来存放架包的,而这边的libs里面还有一个internal_impl-24.0.0.jar,而RecyclerView解压后的libs里面是空的,那会不会v4包下面缺少的那个文件是这个架包里面的?先不管在不在,我们先把该架包添加到我们项目中,然后看一下该架包中是否包含所缺的那个类,或者直接运行一下看看是否还有错误。

由上图可知我们缺少的文件在internal_impl-24.0.0.jar中确实有,运行之后错误也确实解决了,至此RecyclerView就可以正常使用了。


0 0