API 19上出现“ClassNotFoundException:在DexPathList路径中未找到类”的错误

5

我正在开发一款Android应用,目标SDK版本为24,最低版本为19。在较高的API级别上运行良好,但在尝试在API级别19上运行时会崩溃,并显示以下错误:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{se.android/se.android.SplashScreenActivity}: java.lang.ClassNotFoundException: Didn't find class "se.android.SplashScreenActivity" on path: DexPathList[[zip file "/data/app/se.android-2.apk"],nativeLibraryDirectories=[/data/app-lib/se.android-2, /vendor/lib, /system/lib]]
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
                  at android.app.ActivityThread.access$800(ActivityThread.java:135)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:136)
                  at android.app.ActivityThread.main(ActivityThread.java:5017)
                  at java.lang.reflect.Method.invokeNative(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:515)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                  at dalvik.system.NativeStart.main(Native Method)
               Caused by: java.lang.ClassNotFoundException: Didn't find class "se.android.SplashScreenActivity" on path: DexPathList[[zip file "/data/app/se.android-2.apk"],nativeLibraryDirectories=[/data/app-lib/se.android-2, /vendor/lib, /system/lib]]
                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
                  at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:136) 
                  at android.app.ActivityThread.main(ActivityThread.java:5017) 
                  at java.lang.reflect.Method.invokeNative(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:515) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                  at dalvik.system.NativeStart.main(Native Method) 

所涉及的活动已在清单文件中设置:

<activity
        android:name=".SplashScreenActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.AppCompat.NoActionBar">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

</activity>

我尝试更改应用程序启动的活动,但也不起作用。 Gradle设置中启用了Multidex。

我尝试清理它并从存储库重新加载它,但它就是无法工作。


你是否正在扩展AppCompatActivity? - Ognian Gloushkov
是的,它正在扩展AppCompatActivity。 - Henrik Ottehall
2个回答

10

我终于成功解决了这个问题。原来在Gradle设置中虽然启用了MultiDex,但在AndroidManifest.xml文件中却没有正确配置。最终我添加了如下代码:

defaultConfig {
   multiDexEnabled true
   ...
}

并导入了 MultiDex 库,使用:

and imported the MultiDex library with
depenencies {
   ...
   compile 'com.android.support:multidex:1.0.1'
   ...
}

我忘记在AndroidManifest.xml中添加它了

<application
   ...
   android:name="android.support.multidex.MultiDexApplication"
   ...
>
   ...
</application>

添加了那个部分后,它现在在 API 等级 19 上可以运行。


奇怪,这使我的应用程序可以通过Hockey App进行分发,之前我遇到了同样的错误。谢谢。 - ElliotM

1
在您的Gradle文件中使用以下代码。

defaultConfig {
   multiDexEnabled true
   ...
}

和依赖关系

 {
   ...
   compile 'com.android.support:multidex:1.0.1'
   ...
}

然后同步你的项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接