1

使用 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 工作正常并且缺少这个类。请帮助解决。

4

2 回答 2

3

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

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

于 2016-11-16T13:25:04.463 回答
0

这似乎是一个构建系统问题。正如OKHttp 站点上的这个线程中所提到的,OkHttp3 似乎没有包含在所使用的库之一中。就我而言,这是我正在编译的 .aar 的问题,而不是拉入库。有几种方法可以解决这个问题,但据我所知,最好的方法似乎是构建到本地 maven 存储库:在 S/O 答案中找到说明

此外,刚刚发现这个等级命令将库复制到您的本地以构建 .aar:在此 SO 帖子中找到

从网上找到的其他信息:

没有自动化的方法来打包 aar 中库的依赖项。这与正确的依赖管理背道而驰,并且可能导致问题。

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

于 2016-05-31T18:54:06.810 回答