【问题标题】:ClassNotFoundException: Didn't find class "com.xxx.xxx.Application" on path: DexPathList on LinuxClassNotFoundException:在 Linux 上的路径:DexPathList 上找不到类“com.xxx.xxx.Application”
【发布时间】:2018-05-28 02:53:07
【问题描述】:

我已从 Mac 移至 linux 机器 (ubuntu),但无法运行之前的项目。该项目有大约 10 个模块,它在我的 macbook 上仍然可以正常工作,但是在 ubuntu 上构建时(在 17.10 上尝试了 2 次全新安装,在 16.04 上也尝试了 2 次)会在启动时崩溃应用程序并出现以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application com.xxx.xxx.Application: java.lang.ClassNotFoundException: Didn't find class "com.xxx.xxx.Application" on path: DexPathList[[zip file "/data/app/com.xxx.xxx.debug-1/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx.debug-1/lib/arm, /data/app/com.xxx.xxx.debug-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
at android.app.LoadedApk.makeApplication(LoadedApk.java:802)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5418)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1558)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6165)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.xxx.xxx.Application" on path: DexPathList[[zip file "/data/app/com.xxx.xxx.debug-1/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx.debug-1/lib/arm, /data/app/com.xxx.xxx.debug-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.Instrumentation.newApplication(Instrumentation.java:1014)
at android.app.LoadedApk.makeApplication(LoadedApk.java:796)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5418) 
at android.app.ActivityThread.-wrap2(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1558) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6165) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 

我已经尝试在两个操作系统(17.10 和 16.04)上清理、重建、失效和重新启动 3 个不同的 android studio 版本(稳定版本、2.3 和最新的金丝雀版本),但我仍然得到完全相同的错误。另外,我已经安装了 64 位系统的库。另外,我也尝试过使用 oracle java。

有没有人知道为什么一个项目在 linux 上会出现这个错误,而在 mac 上却没有?


更新

所以我发现 Ubuntu 看不到应用程序类。它带有红色标签,无法从清单文件中识别。这是来自app 包的应用程序类,只有切换到项目视图才能看到它。我目前正在调查为什么它看不到它。

【问题讨论】:

  • 平台镜像安装正确吗?堆栈跟踪显示与armeabi-v7a 相关的内容。你能确定那些系统镜像已经安装了吗
  • 在所有用例中,我都可以启动 hello world 应用程序,一切都很好。如果这回答了问题
  • 查看日志,我想问题出在您的某些库或构建路径上,它们指向您的旧路径,因此 android 无法找到它。看看这些问题,也许它们会对你有所帮助。 stackoverflow.com/questions/22399572/…stackoverflow.com/questions/10866431/…
  • 我也想过这个问题。但也有超过 7 名开发人员在从事这个项目,而且一切对他们来说都很好。它们也都在 osx 上。
  • @Umair 我刚刚更新了问题,提供了有关该问题的更多详细信息。

标签: java android linux macos


【解决方案1】:

做一件事禁用即时运行功能。

你可以这样做

File->Settings->Build,Execution,Deployment->Instant run

单击即时运行,然后禁用即时运行复选框。

【讨论】:

  • 是的,我也这样做了,但没有成功。该项目暂时不支持即时运行谢谢
  • 编辑了答案
【解决方案2】:

所以问题是 Ubuntu 看不到 Application 类,因此在构建时没有考虑它,因此它没有包含在 dex 文件中。问题是应用程序类在 app -> src -> main -> Java -> packagename -> Application.class 中,并且 Ubuntu 没有将 Java 识别为有效目录。只有当它是java 时它才会识别它。因此,将文件夹 Java 重命名为 java 已解决问题,并且应用程序类现在可见。

士气 1:始终检查所有荒谬的用例并注意细节。

士气 2:Ubuntu 处理文件夹的方式与 Mac 不同,因为 Mac 不在乎是大写 J 还是小写 j。

【讨论】:

  • 3) android 也总是以你想不到的方式给你惊喜:P
  • 哈哈,这真的很难抓住。不知道 Mac 不区分大小写。
猜你喜欢
  • 2015-07-01
  • 2017-10-21
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 2017-09-12
相关资源
最近更新 更多