java - 类未找到异常 : Didn't find class "com.xxx.xxx.Application" on path: DexPathList on Linux

标签 java android linux macos

我已经从 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看不到应用程序类。它有一个红色标签,无法从 list 文件中识别出来。这是 app 包中的应用程序类,只有切换到项目 View 才能看到它。我目前正在调查为什么它看不到它。

最佳答案

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

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

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

关于java - 类未找到异常 : Didn't find class "com.xxx.xxx.Application" on path: DexPathList on Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47806192/

相关文章:

`(a,b) -> a+b` 的 Java8 函数类型

android - 单击android更改TextView背景颜色

c++ - 将相同数据写入两个文件的有效方法

linux - 如何在 Shell 脚本中制作 scp 询问我的密码

linux - 如何引导编译器使用某个库?

java - Mockito.mock(SomeClass) 和 @Mock 注释有什么区别?

java - 我可以在构造函数中调用 set 方法吗

java - 需要迁移 hibernate 3 到 5 指南吗?

java - for 循环内的 AlertDialog

java - 在类里面找不到卡片图像的 setter /字段