java.lang.NoClassDefFoundError:解析失败:Lokhttp3 / MediaType;

时间:2016-02-25 12:19:46

标签: android json okhttp3

使用okhttp-3.0.1.jar会导致崩溃:

 02-25 17:44:33.279: E/AndroidRuntime(30263): FATAL EXCEPTION: main
 02-25 17:44:33.279: E/AndroidRuntime(30263): Process:com.littleapproom.diamondapp, PID: 30263
 02-25 17:44:33.279: E/AndroidRuntime(30263):java.lang.NoClassDefFoundError: Failed resolution  Lokhttp3/MediaType;
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at com.littleapproom.diamondapp.helper.ServiceTask.<clinit>(ServiceTask.java:68)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at com.littleapproom.diamondapp.RegisterActivity.callRegisterApi(RegisterActivity.java:74)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at com.littleapproom.diamondapp.RegisterActivity.onClick(RegisterActivity.java:50)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at android.view.View.performClick(View.java:4785)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at android.view.View$PerformClick.run(View.java:19884)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at android.os.Handler.handleCallback(Handler.java:739)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at  android.os.Handler.dispatchMessage(Handler.java:95)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at android.os.Looper.loop(Looper.java:135)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at android.app.ActivityThread.main(ActivityThread.java:5343)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at java.lang.reflect.Method.invoke(Native Method)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at java.lang.reflect.Method.invoke(Method.java:372)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
 02-25 17:44:33.279: E/AndroidRuntime(30263): Caused by: java.lang.ClassNotFoundException: Didn't find class "okhttp3.MediaType" on path: DexPathList[[zip file "/data/app/com.littleapproom.diamondapp-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
 02-25 17:44:33.279: E/AndroidRuntime(30263):   ... 13 more
 02-25 17:44:33.279: E/AndroidRuntime(30263):   Suppressed: java.lang.ClassNotFoundException: okhttp3.MediaType
 02-25 17:44:33.279: E/AndroidRuntime(30263):       at java.lang.Class.classForName(Native Method)
 02-25 17:44:33.279: E/AndroidRuntime(30263):       at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
 02-25 17:44:33.279: E/AndroidRuntime(30263):       at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
 02-25 17:44:33.279: E/AndroidRuntime(30263):       at   java.lang.ClassLoader.loadClass(ClassLoader.java:504)
 02-25 17:44:33.279: E/AndroidRuntime(30263):       ... 14 more
  02-25 17:44:33.279: E/AndroidRuntime(30263):  Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

okhttp-3.0.1.jar  工作正常,有这个缺少的课程。 请帮忙解决。

2 个答案:

答案 0 :(得分:1)

这可能不是答案。我没有足够的评论来评论,因此我将此作为答案。

您是否导入了可能正在使用okhttp的自定义库,或者您是否直接在项目中使用了okhttp?当我导入一个可能使用过okhttp的库时,我也遇到了这个问题。我必须明确地将okhttp包含在我的gradle中以克服这个问题,虽然我没有在我的代码中使用它,但导入的aar使用它。您的情况可能不一样,但在此上分享更多信息,例如您的项目结构和相关代码可能有助于解决此问题。

答案 1 :(得分:0)

这似乎是构建系统问题。正如OKHttp网站上提到的in this thread一样,似乎OkHttp3未包含在其中一个库中。在我的情况下,这是我正在编译的.aar的一个问题,而不是在库中。有几种方法可以解决这个问题,但据我所知,最好的方法是建立一个本地的maven回购:instructions are found in the S/O answer

另外,刚刚发现这个等级命令将库复制到您的本地以构建.aar:found on this SO post

来自网络上的其他信息:

  

没有自动方式来打包库的依赖项   在里面。这与适当的依赖管理相反   可能会导致问题。

     

如果你真的想这样做,你必须收集依赖项   手动(使用build.gradle中的代码)并手动打包文件   在aar。