当前位置: 首页 > 知识库问答 >
问题:

java.lang.NoClassDefFoundError当运行应用程序与Android 5.1与Android Studio 2.2RC

弘志勇
2023-03-14

当使用Android 6.0或Android 7.0设备时,我的应用程序构建和运行正常,但当运行任何Android 5.1设备(未测试更低版本)时,它会失败,出现以下异常:

09-06 11:50:46.100 29601-29601/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: me.myapp.main, PID: 29601
                                               java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzab;
                                                   at com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source)
                                                   at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
                                                   at android.app.ActivityThread.installProvider(ActivityThread.java:5084)
                                                   at android.app.ActivityThread.installContentProviders(ActivityThread.java:4679)
                                                   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4619)
                                                   at android.app.ActivityThread.access$1500(ActivityThread.java:155)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1378)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                   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:905)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
                                                Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzab" on path: DexPathList[[zip file "/data/app/me.myapp.main-1/base.apk"],nativeLibraryDirectories=[/data/app/me.myapp.main-1/lib/arm, /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 com.google.firebase.provider.FirebaseInitProvider.zza(Unknown Source) 
                                                   at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source) 
                                                   at android.app.ActivityThread.installProvider(ActivityThread.java:5084) 
                                                   at android.app.ActivityThread.installContentProviders(ActivityThread.java:4679) 
                                                   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4619) 
                                                   at android.app.ActivityThread.access$1500(ActivityThread.java:155) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1378) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:135) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:5343) 
                                                   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:905) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
                                                Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.common.internal.zzab
                                                   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)
                                                        ... 15 more
                                                Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

我已经确保在我的gradle文件中包含了所有必要的库(在本例中,日志显示了一个google库,但其他库也出现了这种情况)。我还确保启用了Multidex,并尝试清理和重建项目,删除应用程序并重新安装。

我已经分离出一些可能导致碰撞的条件:

  • 即时运行已禁用

我正在使用Android Studio 2.2RC

编辑:稳定版2.2仍在使用

共有3个答案

洪经义
2023-03-14

确保您使用的是谷歌的更新版本。Androidgms

使缓存无效,然后在应用程序中进行更改:gradle文件

implementation 'com.android.support.constraint:constraint-layout:1.1.2'
//noinspection GradleCompatible
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:23.4.0'
implementation 'com.android.support:design:23.4.0'
implementation 'com.google.android.gms:play-services-maps:15.0.1'
implementation 'com.parse.bolts:bolts-tasks:1.4.0'
implementation 'com.parse:parse-android:1.13.0'
implementation 'com.android.support:multidex:1.0.3'

这对我有用

宰父子安
2023-03-14

Android 5.1有100个dex文件的任意限制

一种可能的解决方法是禁用preDexLibraries,这样可以减少类的数量。apk中包含的dex文件。

添加

android {
    dexOptions {
        preDexLibraries false
    }
}

到应用的build.gradle文件

郑波
2023-03-14

这里是我们在runtime/dex_文件中看到的内容。复写的副本

bool DexFile::OpenFromZip(...) {
    ...
    while (i < 100) {
        std::string name = StringPrintf("classes%zu.dex", i)
        ...
    }
    ...
}

所以如果你有超过100个dex文件,你会得到这个NoClassDefFoundError。

跟踪程序中存在此行为的问题:

https://code.google.com/p/android/issues/detail?id=234367 https://code.google.com/p/android/issues/detail?id=170485

可以通过禁用预索引来避免此错误。所以你可以把

subprojects {
    project.plugins.whenPluginAdded { plugin ->
        if ("com.android.build.gradle.AppPlugin".equals(plugin.class.name)) {
            project.android.dexOptions.preDexLibraries = false
        } else if ("com.android.build.gradle.LibraryPlugin".equals(plugin.class.name)) {
            project.android.dexOptions.preDexLibraries = false
        }
    }
}

在根构建中。格雷德尔档案。

 类似资料:
  • 问题内容: 我正在尝试围绕我的烧瓶应用程序为办公室中的菜鸟创建一个简单的tkinter GUI窗口。我希望脚本按以下顺序执行这些任务: 启动Flask Web服务器 用一个按钮打开一个tkinter GUI窗口。当按下时,该按钮将打开应用程序的索引页面(例如http://127.0.0.1:5000) 关闭tkinter gui窗口时终止flask Web服务器 到目前为止,这是我所拥有的,但是该

  • 我想在JavaFX应用程序中使用Selenium WebDriver,我想获得一个网页的截图,并在JavaFX应用程序中的ImageView中显示它。 此代码完全可以拍摄网页截图并保存: 为了在JavaFX应用程序中使用保存的屏幕截图,我试图对这个类进行一些简单的修改,使其成为一个JavaFX应用程序。 以下是修改后的代码: 这是一个最简单的JavaFX应用程序,在main方法中有一些代码,当我运

  • 我创建了一个依赖于OpenJDK 11和JavaFX的HelloWorldJava小应用程序。该应用程序打包在jar文件中,只有在我的系统上单独安装Java11和JavaFX时才能运行。 现在,我想将我的jar转换成一个自包含的Java应用程序,其中包括JavaFX和一个功能齐全的Java运行时环境。这将允许我在不安装OpenJDK 11的情况下运行我的应用程序(这会带来技术障碍,例如正确设置路径

  • 例如。 这应该运行一个简单的hello world应用程序,摘自oracle文档。然而,当我‘运行’这个代码,没有窗口打开。取而代之的是打开一个名为“Java”的应用程序。看起来'java'只是一个位于'jdk1.8.0_25.jdk/contents/home/bin'中的'UNIX可执行文件‘。应用程序'java'绝对不显示任何东西,并且在没有强制退出的情况下无法关闭。 我在MacBook上运

  • 我是Android开发的新手。我能够使这个应用程序在Android5.1中工作,但是,当我试图在Android4.1中部署这个应用程序时,它在主活动本身就会崩溃。我理解它,因为我使用的是矢量图像和Android4.1不兼容它。为了克服这一点,我设置了如下所述的代码: 我现在收到这个错误 代码文件 XML文件 请帮助我调试这个。我有点被困住了,需要你的帮助。