ClassNotFoundException:在路径上找不到类:DexPathList

我有一个问题,因为我在Playstore上更新了我的应用程序。 自此更新以来,抛出exception,但我没有更改与此exception相关的任何内容。

堆栈跟踪:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.opiatefuchs.onthejobtimerlight/de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity}: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) 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:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/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.app.Instrumentation.newActivity(Instrumentation.java:1066) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) ... 10 more Suppressed: java.lang.ClassNotFoundException: de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity at 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) ... 13 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

问题是,我的App版本在运行之前没有问题,我没有改变任何与此活动相关的内容。 我刚刚添加了一个与此活动无关的新信息对话框。 这个应用程序是一个免费的Lite版本,我在专业版上做了完全相同的更改,没有任何东西被抛出。 这按预期工作。 pro和lite之间的唯一区别是,我在精简版中集成了Admob(在新方式上),在专业版中集成了Google Play许可。 但是我从一开始就已经整合了,并没有对此进行改动。 我也没有对清单进行任何更改,我在这里阅读了很多post,但没有任何帮助。

它似乎只发生在自5.0以来的Android版本上。 有谁知道这个问题可能导致什么或有任何人相同的经历? proguard是否有可能通过混淆来破坏任何东西(在这里,没有变化)?

我没有发布任何代码,因为它对这个问题并不重要,就像我说我没有做过与此exception相关的更改。

该问题被标记为重复但不是。 链接的注释不能解决我的问题,所有库都以正确的方式进行检查和集成。 另外,我不使用NDK。

Solutions Collecting From Web of "ClassNotFoundException:在路径上找不到类:DexPathList"

更新

经过很长一段时间,事实certificate它必须与proguard有关。 我无法确切地说出错误到底是什么原因,但我尝试了一点,这就是我注意到的(在我的情况下使用Eclipse IDE):

  • 我必须关闭我要签名的项目中的每个选项卡
  • 我必须清理项目,清理后,除了导出apk之外什么都不做
  • 在清单中进行小的更改,保存并撤消更改(并保存)
  • 如果清单中有任何以“YourClass”或“.YourClass”命名的类,请将其更改为“com.yourpackage.yourClass”

这是我所做的四点,然后才奏效。 这看起来很可疑,但我认为混淆存在问题。 因为没有这些点,我可以简单地编译我的apk并从eclipse安装它。 对我来说,这种行为没有明显的原因。 如果我只是从eclipse安装它,包名称也可以不做任何更改。 我希望这些观点可以帮助某些人。

如果你显示包名是好的,如果你关闭了项目,并且在文件浏览器中重命名了你的项目但是在导入之后再次遇到这个问题,这里唯一的方法是

删除那个文件夹.gradle

可以使用文件资源管理器在项目文件夹中find此文件。 它具有包含该旧项目名称的工件文件。 在Android Studio中重新打开项目后,将自动重新创建该文件夹。

我刚把我的gradle从com.android.tools.build:grad:2.2.2改为com.android.tools.build:gradle:2.2.0,问题还可以!

对我来说,它发生在包名称(目录名称)被更改时。

我意识到“build”文件夹神奇地维护了项目构建的中间文件。 我删除了“app”文件夹下的“build”文件夹 。 现在,gradle必须使用新包名重新制作所有文件。 现在它正常工作。

如果您有多个模块,我认为它与multidex和多个包名称有关。 清理项目并删除所有构建/文件夹。

tl; dr:这似乎是由AndroidManifest.xml中的相对声明和绝对声明的混合引起的。 我认为最好的解决方案是在AndroidManifest.xml声明时使用相对表示法AndroidManifest.xml

完整说明:

我有这个问题太长了,这是因为我使用绝对和相对我的AndroidManifest.xml声明。 这是我做的修复它:

AndroidManifest.xml确保部分正确指定了package: property,它必须是确切的绝对路径,如下所示:

 ... 

现在您已在部分中指定了正确的绝对路径,您需要为所有使用相对路径 ,以及在您的AndroidManifest.xml定义的

例子:

          

当然,也一定要清理你的项目。

有时当我们生成签名的apk文件时,如果我们有一些依赖库问题(重复的jar库),那么就会发生这个错误。 请检查构建路径并删除重复的库,并检查是否未从订单和导出选项卡中选中任何库。

我得到了类似的错误。 我在这里得到了解决方案。

如果您的清单文件不正确,请按照此操作

原因是,android无法在dexpath中find特定的活动。

所以我们应该在“清单文件”中提供活动的完整路径。

例如,您的活动名称是“SplashActivity”,它位于“com.packagename.package”中。 所以我们应该提供该活动的整个包名。

 com.packagename.package.SplashActivity 

我遇到了类似的问题,这是我的解决方案:

  1. 将AndroidManifest中的应用程序名称更改为完整路径
  2. 清洁项目
  3. 重建项目
  4. 建立APK

我补充道

 compile "com.android.support:support-core-utils:25.3.1" compile 'com.android.support:support-v4:25.3.1' 

通过简单地重命名目录名和导入来更改我的目录名后,我得到了类似的错误。 无法再安装了。 既不重新启用USB调试也不重建项目工作。

我通过创建新项目并手动将所有相关内容复制到新项目来解决它。