ClassNotFoundException:在path上找不到类:DexPathList

我从Playstore上更新我的应用程序后遇到问题。 由于此更新,引发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 

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

它似乎只发生在5.0以来的Android版本。 有没有人知道这个问题可能导致什么或有任何相同的经验? 是否有可能proguard只是通过混淆摧毁任何东西(这里也没有改变)?

我没有发布代码,因为这个问题并不重要,就像我说过的,我没有对这个exception做过修改。

这个问题被标记为重复,但不是。 链接的评论并没有解决我的问题,所有的图书馆都被正确地检查和整合。 另外,我不使用NDK。

  • Gradle和proguard:找不到参数的方法runProguard()
  • 在proguard中,如何保存一组类的方法名?
  • 使用Android的Facebook SDK 3.0的proguard错误
  • 如何从proguard版本中排除R * .class文件
  • 如何使Proguard忽略外部库?
  • 如何在我的Android库(AAR)中包含一个proguardconfiguration
  • Android的工作室1.2.RC Proguard Square的Okio库参考警告
  • 与Android一起使用ProGuard
  • 更新

    很久以后,原来这和proguard有什么关系呢。 我不能确切地说错误是由什么引起的,但是我尝试了一下,这就是我注意到的(对于我的Eclipse IDE):

    • 我必须closures我想签名的项目中的每个选项卡
    • 我必须清理项目和清理后,除了导出APK之外什么也不做
    • 在清单中做一个小小的改变,保存并撤销更改(并保存)
    • 如果清单中有任何以“YourClass”或“.YourClass”命名的类,请将其更改为“com.yourpackage.yourClass”

    这是我所做的四点,然后它的工作。 这看起来很可疑,但我认为有一个混淆的问题。 因为没有这些要点,我可以简单地编译我的apk并从eclipse安装它。 对我而言,这种行为没有明显的原因。 另外,如果我只从eclipse安装它,程序包名称不会改变。 我希望这些点可以帮助别人。

    如果你清单包名是好的,如果你closures了项目,并在文件资源pipe理器内重命名你的项目,但导入之后,你再次遇到这个问题,唯一的办法就是

    删除文件夹。 格式

    这个可以在使用文件浏览器的项目文件夹中find。 它具有包含该旧项目名称的工件文件。 在Android Studio中重新打开项目后,文件夹将自动重新创build。

    我只是把我的gradle从com.android.tools.build:gradle:2.2.2改为com.android.tools.build:gradle:2.2.0,问题没有问题!

    对我来说,包名称(目录名称)发生了变化。

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

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

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

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

    如果你的清单文件不正确,那么按照这个

    tl; dr:这似乎是AndroidManifest.xml相对和绝对声明的混合造成的。 我认为最好的解决scheme是在您的AndroidManifest.xml声明<application .../><activity .../><receiver .../><service .../>时使用相对符号AndroidManifest.xml

    完整说明:

    我有这个问题太长,这是因为我使用绝对和相对<application .../><activity .../><receiver .../><service .../>在我的AndroidManifest.xml声明。 以下是我所做的修复:

    在你的AndroidManifest.xml确保<manifest .../>部分包含正确指定的package:属性,它需要确切的绝对path,如下所示:

     <manifest package="com.my.absolute.package.path" xmlns:android="http://schemas.android.com/apk/res/android">...</manifest> 

    现在,您已经在<manifest .../>部分中指定了正确的绝对path,您将需要为所有<application .../><activity .../><receiver .../> <activity .../>使用相对path<receiver .../>以及在您的AndroidManifest.xml定义的<service .../>

    例子:

     <application android:name=".BaseApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".activity.SomeActivity" android:configChanges="orientation" android:label="@string/app_name" android:parentActivityName=".activity.ParentActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".activity.ParentActivity"/> </activity> <activity android:name=".activity.MyActivity" android:configChanges="orientation" android:label="@string/app_name" android:parentActivityName=".activity.ParentActivity" android:screenOrientation="portrait" android:theme="@style/AppTheme" /> <receiver android:name=".receivers.MyReceiver" android:enabled="true" android:exported="false"> </receiver> <service android:name=".services.MyService" android:enabled="true" android:exported="false" /> </application> 

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

    原因是,android无法在dexpath中find具体的活动。

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

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

     com.packagename.package.SplashActivity 

    我有一个类似的问题,这是我的解决scheme:

    1. 将AndroidManifest中的应用程序名称更改为完整path
    2. 清洁项目
    3. 重build项目
    4. 构buildAPK

    我补充说

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

    更改我的目录名称后,通过重命名目录名称和导入,我得到类似的错误。 无法再安装。 既不能重新启用USBdebugging,也不能重build项目工作。

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