【问题标题】:ClassNotFoundException: Didn't find class "com.example.classname" on path: DexPathListClassNotFoundException:在路径上找不到类“com.example.classname”:DexPathList
【发布时间】:2016-06-13 20:17:45
【问题描述】:

并非总是如此,但有时我在运行我的应用程序时会在 logcat 中看到此异常

原因:java.lang.ClassNotFoundException:在路径上找不到类“com.example.classname”:DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib, /system/lib]]

应用程序不会崩溃,并且这个com.example.classname 存在于我的项目中。 我正在使用 android studio 2.2,我正在为我们的项目使用 multidex。 我怀疑这个问题是因为multidex。

知道如何解决这个异常吗?

我们的 build.gradle 文件很大。 我正在添加它的一部分

     compileSdkVersion 23
        buildToolsVersion '23.0.3'

        defaultConfig {
            minSdkVersion 17
            targetSdkVersion 22
    multiDexEnabled true
    ......
    }
dependencies {
    compile 'com.android.support:multidex:1.0.1'
        testCompile('org.robolectric:shadows-multidex:3.0') {
            exclude group: 'org.robolectric', module: 'robolectric'
        }
}

并在自定义应用程序类中

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

【问题讨论】:

  • 能否发布与应用程序、build.gradle 文件和自定义应用程序相关的清单部分(如果有的话)?
  • 你能显示你启用multiDexEnabledbuild.gradle文件吗?
  • 为什么在依赖项中添加了这两个库?
  • shadows-multidex 用于 robolectric。 stackoverflow.com/questions/26512170/…
  • 在 as 和 robolectric 等依赖方中添加 multidex... 依赖项 { compile 'com.android.support:multidex:1.0.1' }

标签: android android-multidex


【解决方案1】:

尝试在您的应用程序类中使用这几行代码

extend android.app.Application

这肯定会起作用:

由于内存不足,android创建了两个dex文件,所以

   attachBaseContext() 

处理这个问题

   @Override
     protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
       }

在你的应用程序的 gradle 中

    defaultConfig {
    applicationId "com.example.YourApplication"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"

    multiDexEnabled true

    }

   dexOptions {
    javaMaxHeapSize "4g"
    }

【讨论】:

  • Multidex 已启用,但使用 attachBaseContext() 函数将解决此问题
  • 但是你怎么知道还没有完成呢?我只是说,您似乎在猜测并提供了启用 multidex 所需的步骤,即使问题说已经完成
  • 我在我的许多项目和同事中多次看到这个问题,他们已经在他们的 gradle 中启用了他们的 multidexEnabled true,但是通过在 Application 类中添加 attachBaseContext() 函数解决了他们的问题。由于 Android 创建了多个 dex 文件,因此 classnotfound excption 来了
  • 当然,但无论如何这是启用 Multidex 的必要步骤。仅将这一行添加到 Gradle 仅意味着 Gradle 将支持 multidex 构建。
  • 此外,如果 android:name="android.support.multidex.MultiDexApplication" 在清单中,扩展 Application 类并不是完全必要的
猜你喜欢
  • 2015-07-01
  • 2017-10-21
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 2016-02-04
  • 2017-09-12
相关资源
最近更新 更多