【问题标题】:Android Runtime Exception: Didn't find class on path: DexPathListAndroid 运行时异常:在路径上找不到类:DexPathList
【发布时间】:2017-08-13 23:48:28
【问题描述】:

我从 GitHub 下载了这段代码,看看我是否可以自定义它以适用于我正在处理的项目。我只希望是我的最后一个问题,但我完全陷入了这个错误。我可以构建和运行应用程序,但它在启动时崩溃。

我在这里遇到了许多类似的问题,并根据解决方案进行了更改,但它们似乎对我不起作用。我是这方面的新手,任何帮助将不胜感激。请……任何人。 :)

我正在使用 Android Studio。

这是我的 build.gradle 文件。我启用了 MultiDex 并添加了对遗留库的支持。这些都是其他解决方案中的建议。

import java.util.regex.Pattern

//apply plugin: 'android'
apply plugin: 'com.android.application'

buildscript {
    repositories {
        //mavenCentral()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
    }
}

ext.multiarch=false

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    for (subproject in getProjectList()) {
        compile project(subproject)
    }

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

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        useLibrary 'org.apache.http.legacy'
    }

    defaultConfig {
        versionCode Integer.parseInt("" + getVersionCodeFromManifest() + "0")

        //Enabling Multidex Support
        multiDexEnabled true

        compileSdkVersion 23

        buildToolsVersion "23.0.1"
    }



    if (multiarch || System.env.BUILD_MULTIPLE_APKS) {
        productFlavors {
            armv7 {
                versionCode defaultConfig.versionCode + 2
            ndk {
                    abiFilters "armeabi-v7a", ""
                }
            }
            x86 {
                versionCode defaultConfig.versionCode + 4
                ndk {
                    abiFilters "x86", ""
                }
            }
            all {
                ndk {
                    abiFilters "all", ""
                }
            } 
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

}

task wrapper(type: Wrapper) {
    gradleVersion = '1.12'
}

def getVersionCodeFromManifest() {
    def manifestFile = file(android.sourceSets.main.manifest.srcFile)
    def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
    def matcher = pattern.matcher(manifestFile.getText())
    matcher.find()
    return Integer.parseInt(matcher.group(1))
}

def getProjectList() {
    def manifestFile = file("project.properties")
    def pattern = Pattern.compile("android.library.reference.(\\d+)\\s*=\\s*(.*)")
    def matcher = pattern.matcher(manifestFile.getText())
    def projects = []
    while (matcher.find()) {
      projects.add(":" + matcher.group(2).replace("/",":"))
    }
    return projects
}  

这是我的 Android 清单文件 -

<?xml version='1.0' encoding='utf-8'?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ford.fordcomplince"

    android:hardwareAccelerated="true"
    android:versionCode="1"
    android:versionName="0.1.0">

    <!--
    xmlns:android="http://schemas.android.com/tools"
    xmlns:tools="http://schemas.android.com/apk/res-auto"> -->

    <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission   android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


    <application
        android:name="android.support.multidex.MultiDexApplication"
        android:hardwareAccelerated="true"
        android:icon="@drawable/iicon"
        android:label="@string/app_name">

        <activity
            android:name=".FordCompliance"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
            android:label="@string/activity_name"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Black.NoTitleBar"
            android:windowSoftInputMode="adjustResize">
        <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".EnableMultiDex">

        </activity>

    </application>


    <uses-sdk
        android:minSdkVersion="21"
        android:targetSdkVersion="23" />

</manifest>

我创建了一个扩展 MultiDexApplication 的 MultiDex.java 文件

package com.ford.therightway;

/**
 * Created by SK on 2/20/2017.
 */

import android.support.multidex.MultiDexApplication;

public class EnableMultiDex extends MultiDexApplication{

}

这是我的错误输出 -

$ adb shell am start -n "com.ford.fordcomplince/com.ford.fordcomplince.FordCompliance" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 连接到设备 emulator-5554 上的进程 3449 W/System:ClassLoader 引用了未知路径:/data/app/com.ford.fordcomplince-1/lib/x86 I/InstantRun:Instant Run Runtime 已启动。 Android包是com.ford.fordcomplince,真正的应用类是android.support.multidex.MultiDexApplication。 W/System:ClassLoader 引用了未知路径:/data/app/com.ford.fordcomplince-1/lib/x86 I/MultiDex:2.1.0 版本的 VM 支持 multidex I/MultiDex:安装 I/MultiDex:VM 有 multidex 支持,MultiDex 支持库被禁用。 D/AndroidRuntime:关闭虚拟机 E/AndroidRuntime: 致命异常: main 进程:com.ford.fordcomplince,PID:3449 java.lang.RuntimeException:无法实例化活动 ComponentInfo{com.ford.fordcomplince/com.ford.fordcomplince.FordCompliance}:java.lang.ClassNotFoundException:在路径上找不到类“com.ford.fordcomplince.FordCompliance”: DexPathList[[zip 文件“/data/app/com.ford.fordcomplince-1/base.apk”],nativeLibraryDirectories=[/data/app/com.ford.fordcomplince-1/lib/x86, /vendor/lib, /系统/库]] 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.ClassNotFoundException:在路径上找不到类“com.ford.fordcomplince.FordCompliance”:DexPathList [[zip file“/data/app/com.ford.fordcomplince-1/base.apk”] ,nativeLibraryDirectories=[/data/app/com.ford.fordcomplince-1/lib/x86, /vendor/lib, /system/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:469) 在 android.app.Instrumentation.newActivity(Instrumentation.java:1067) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 抑制:java.lang.ClassNotFoundException:在路径上找不到类“com.ford.fordcomplince.FordCompliance”:DexPathList [[dex 文件“/data/data/com.ford.fordcomplince/files/instant-run/dex/ slice-slice_9-classes.dex", dex 文件 "/data/data/com.ford.fordcomplince/files/instant-run/dex/slice-slice_8-classes.dex", dex 文件 "/data/data/com. ford.fordcomplince/files/instant-run/dex/slice-slice_7-classes.dex", dex 文件 "/data/data/com.ford.fordcomplince/files/instant-run/dex/slice-slice_6-classes.dex ", dex 文件 "/data/data/com.ford.fordcomplince/files/instant-run/dex/slice-slice_5-classes.dex", dex 文件 "/data/data/com.ford.fordcomplince/files/instant -run/dex/slice-slice_4-classes.dex”,dex文件“/data/data/com.ford.fordcomplince/files/instant-run/dex/slice-slice_3-classes.dex”,dex文件“/data /data/com.ford.fordcomplince/files/instant-run/dex/slice-slice_2-classes.dex”,dex文件“/data/data/com.ford.fordcomplince/files/instant-run/dex/slice- slice_1-classes.dex", dex 文件 "/data/data/com.for d.fordcomplince/files/instant-run/dex/slice-slice_0-classes.dex”,dex文件“/data/data/com.ford.fordcomplince/files/instant-run/dex/slice-com.android.support -multidex-1.0.1_363eddd5c2a30ea4be2abc16117d383bb67b8a0f-classes.dex"],nativeLibraryDirectories=[/data/app/com.ford.fordcomplince-1/lib/x86, /vendor/lib, /system/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 在 com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90) 在 com.android.tools.fd.runtime.IncrementalClassLoader.findClass(IncrementalClassLoader.java:62) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:511) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 12 更多 抑制:java.lang.ClassNotFoundException:com.ford.fordcomplince.FordCompliance 在 java.lang.Class.classForName(本机方法) 在 java.lang.BootClassLoader.findClass(ClassLoader.java:781) 在 java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 13 更多 原因:java.lang.NoClassDefFoundError: Class not found using the boot class loader;没有可用的堆栈跟踪 I/Process:发送信号。 PID:3449 SIG:9 应用程序终止。

【问题讨论】:

    标签: android


    【解决方案1】:

    你可以禁用android studio的即时运行功能,看看是否仍然出现错误。即时运行可能会导致奇怪的问题

    【讨论】:

      猜你喜欢
      • 2014-08-27
      • 2018-08-08
      • 1970-01-01
      • 2016-02-04
      • 2017-09-12
      • 2014-05-29
      • 2015-07-01
      • 2018-12-30
      相关资源
      最近更新 更多