java.lang.ClassNotFoundException:在路径dexpathlist上找不到类


139

我目前正在一个项目中,我必须使用纯本地ndk。当我尝试从Irrlicht引擎源运行helloworld示例时,它起作用了。然后,按照该示例的相同格式尝试在我的项目中使用它。但是我得到了:

03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]

在运行我的项目时。

这是我的main.cpp文件:

#include <android/log.h>
#include <jni.h>
#include <android_native_app_glue.h>
#include "android_tools.h"
#ifdef _IRR_ANDROID_PLATFORM_
void android_main(android_app* app)
{
__android_log_print(4 , "pom" , "nothing");
}

#万一

在Android.mk中:

LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json 
LOCAL_SRC_FILES :=  android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl 
LOCAL_STATIC_LIBRARIES := Irrlicht android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

我在AndroidManifest.xml中给了Activity名称:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.irrlicht.example1"
    android:versionCode="1"
    android:versionName="1.0">
...
<application android:icon="@drawable/irr_icon" android:label="HelloWorldMobile1" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true">
        <activity android:name="android.app.POMActivity"
        android:label="HelloWorldMobile1"
        android:launchMode="singleTask"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:clearTaskOnLaunch="true">
        <meta-data android:name="android.app.lib_name" android:value="HelloWorldMobile1" />                     

我在这里犯了什么错误?如有必要,我将发布完整代码。


1
您是否正在使用任何外部jar文件?
Siddharth_Vyas

@SiddharthVyas不,我没有在此使用外部jar文件。
Karthik Sivam

1
您的应用程序是否具有多种功能?如果是这样,那就解释了问题所在。
IgorGanapolsky

当我执行签名的apk时,不会发生此错误。只是调试
j2emanue'7

您找到可行的解决方案了吗?
贝诺巴布

Answers:


84

我尝试了所有可能的选项,但结果为零。最后,我找到了对我有帮助的正确解决方案。只是去禁用Instant Run转到File-> Settings-> Build,Execution,Deployment-> Instant Run->取消选中Instant Run复选框。运行您的应用一次,此apk文件即可正常工作。


11
这是Android Studio的正确答案。我不敢相信Instant Run仍然存在很多问题,以至于您必须关闭它才能避免令人讨厌的意外...
Ognyan '17

2
我一直在寻找这个答案几天,甚至几周!尽管不是很关键,但是这个问题一直困扰着我,没有给我带来和平。没想到即时运行是触发这种情况的人。通过adb启动时,我的应用程序运行良好,但通过apk手动安装时,始终与ClassNotFound运行时期望崩溃。
拉兹万·巴布

5
那不是我的解决方案。我禁用了即时运行
-Terranology

禁用后的选项。请重新启动您的Android Studio
Ashik Abbas

天哪,我不知道为什么即时运行是罪魁祸首,但的确如此,谢谢大家。
KingKongCoder

63

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

  1. 右键点击您的项目,然后选择属性
  2. 从左侧菜单中选择Java Build Path
  3. 选择订单和导出标签。
  4. 从列表中,确保选中了添加到项目中的库或外部jar 。
  5. 最后,清理您的项目并运行。

您也可以检查答案。


1
这是问题的正确解决方案。我已经用我的libgdx游戏测试了这一点,发现了与上述相同的错误。我通过使用手机(三星银河S6)生成的日志发现了这些错误。一旦应用了该解决方案,我所有的问题都解决了。

25
我无法从项目的右键单击中找到属性。可能是我愚蠢。:(
Zin Min

12
我也找不到属性,任何人都想出了如何导航到列出的页面
Skyler,2017年

9
这是Eclipse IDE的解决方案。Android Studio中没有默认的“ project.properties”文件。可以创建它。
Bot

提供的解决方案仅适用于Eclipse IDE。
mnsalim

47

在您的情况下,这似乎是个问题。清单中活动的相对路径不正确:

<activity android:name="android.app.POMActivity"

替换为:

<activity android:name=".POMActivity"

要么

<activity android:name="com.irrlicht.example1.POMActivity"

31

删除设备上的应用程序并清理项目对我有用


2
这也对我产生了反应。我用Android Studio打开了android文件夹,然后构建-> clean项目。用react-native run-android
pinguinos

和上面的评论一样,它起作用了!谢谢 !
Elegya

24

我应该看看

dex错误

但是花了半天时间解决了这个问题。
我通过遵循android开发人员页面的说明来解决此问题: https //developer.android.com/studio/build/multidex.html

首先将其添加到gradle.build文件:

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

 dependencies {
     compile 'com.android.support:multidex:1.0.0'
 }

然后MultiDexApplication,按照上述链接中的说明,用该类扩展Application类(或在AndroidManifest.xml或重写中声明应用程序类attachBaseContext()如果无法扩展应用函数)。

就是这样,它解决了问题。


1
仅当您通过参考计数限制(56k)时,添加multi-dex才有用,并且在Lollipop之前非常不稳定且非常不可靠。不得已时,应使用它来解决问题。
milosmns

那么根据您的解决方案应该是什么
Akash Bisariya '16

我只是说Multi-dex带来的麻烦多于帮助,开发人员网站上明确指出。如果有的话,我不会在这里寻找答案,是吗?
milosmns's

1
好的,谢谢您的信息,如果您找到了一个好的解决方案,请在这里更新,这将是一个很大的帮助。
阿卡什

2
在上面的依赖项中添加这一行对我有用。
gadildafissh

23

只需尝试清理项目重建项目


1
在“构建”菜单下。选择Build-> Clean Project,然后选择Build- > Rebuild Project
kangkyu

这意味着该应用仅在本地崩溃,而崩溃也发生在发行版中,因此这并不是真正的解决方案。
David

22

当您在布局中具有如下自定义视图时,也会发生此异常:

<com.example.MyView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

并且您将视图的包名称从“ com.example” 更改为其他名称,但是您忘记了在布局中也进行更改。


出于其他原因,这很有帮助。检查您的拼写。我有一个拼写错误的类名,导致了原来的问题。
Berry Wing


12

我通过./gradlew --stop在android studio终端中使用:命令解决了它。执行此命令后,请清理并重建项目。


11
  1. 删除bin文件夹
  2. 更改库的顺序
  3. 清理并重建

为我工作。


10

对于拥有multidex的任何人,请启用此功能

内部build.gradle

apply plugin: 'com.android.application'

android {
 defaultConfig {
      multiDexEnabled true
  }
 dexOptions {
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:multidex:1.0.1'
}

EnableMultiDex像下面这样写一个类

import android.content.Context;
import android.support.multidex.MultiDexApplication;

public class EnableMultiDex extends MultiDexApplication {
    private static EnableMultiDex enableMultiDex;
    public static Context context;

    public EnableMultiDex(){
        enableMultiDex=this;
    }

    public static EnableMultiDex getEnableMultiDexApp() {
        return enableMultiDex;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

    }
}

并在Application标签内AndroidManifest.xml写入这个className

 <application
    android:name="YourPakageName.EnableMultiDex"
    android:hardwareAccelerated="true"
    android:icon="@drawable/wowio_launch_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    tools:node="replace">

enableMultiDex影响如何?就我而言javaMaxHeapSize "4g"没有帮助。
CoolMind

@CoolMind它只是一个扩展的应用程序类MultiDexApplication。如果您要使用多dex,则很有必要
Manohar Reddy

同意。我使用MultiDexApplicationattachBaseContext(请参阅developer.android.com/studio/build/multidex)。
CoolMind

8

我多次遇到此问题,并且通过禁用Instant Run来解决所有问题。


尝试了多种解决方案,这个小东西解决了问题,令人难以置信!
FraK

@FraK,评分最高的解决方案包含此建议。尽管我已经取消了Instant Run的检查(几年来它带来了许多错误)。
CoolMind

7

我们不需要自定义的Application类扩展MultiDexApplication。相反,我们可以在AndroidManifest.xml上拥有这样的名称

<application
android:name="android.support.multidex.MultiDexApplication"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

并在build.gradle(Module:app)上,

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

dependencies {
     ... 
     compile 'com.android.support:multidex:1.0.2'
}

谢谢。


当我尝试在android 4.3上运行应用程序时,更改应用程序名称对我
有用

6

当您使用multidex时,请尝试使用MultiDexAppication而不是Application扩展您的应用程序类,并覆盖低于5.0的Android所需的以下方法(因为5.0和更高版本对multidex的支持)

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

并在依赖项中添加此

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

如果从扩展,则应该重写此方法Application。在这种情况下为什么要覆盖MultiDexAppication
CoolMind

4

只需将您的文件夹名称从更改liblibs

然后,您将在项目中看到一些错误标记,以解决此问题。

Properties > Java Build Path > libraries

上面有红色标记删除所有的图书馆,然后apply > ok >,经过 清理项目。塔达看魔术:)


文件夹名称仅是libs
Killer

4

就我而言,这个问题是由于Kotlin引起的。在我现有的代码中,有一个用Kotlin编写的类。我构建了该应用程序,将其安装,并且在第一个活动打开的应用程序崩溃。在logcat中显示此错误。然后,我在应用gradle文件中从Kotlin网站更新了我的Kotlin版本。再次构建应用程序,然后运行良好。


哇,我有一个99%的科特琳项目该怎么办?:)
CoolMind

您能否检查一下,与Kotlin版本是否与您的基础Android Studio兼容。这只是一个猜测。看一看
哈里。Naeem,

我有AS 3.3.1和Kotlin 1.3.21。他们是最新稳定的。对不起,我想,上面和下面介绍的所有解决方案都不适合我的情况。
CoolMind

4

一种可能的原因是Apps AndroidManifest.xml文件中的活动路径不正确。使用如下完整的相对路径在AndroidManifest.xml中注册活动。

<activity android:name="<full_path>.ActivityName" />

3

在尝试了给定的答案之后,我发现了导致相同异常的另一个原因,即我必须通过以下方式将要使用的库手动添加到主库中

Right click on my main library > 
Properties > 
Android > 
Go to the very bottom of the screen and click (Add) > 
Select my other library that caused the crash >
Apply

在此解决方案之前,我在Eclipse中的.java文件中使用了“修复项目设置”,但这没有用,因此我不得不在此处手动添加它并起作用


3

我仅在Samsung Lollipop设备上遇到此崩溃,并且该解决方案对我有用。

dexOptions {
     preDexLibraries false
}

我在此发布此答案,因为此问题是当前导致此崩溃的Google排名最高的搜索结果,而以上答案均不适用于我。


它没有帮助我(三星Galaxy S4,Android 5.0.1)。
CoolMind

2

以下解决方案为我工作...

我尝试了上述所有操作,但仍然没有使我的应用程序运行。我有在本地版本Gradle 4+和android studio的最新版本上运行的react-native应用程序。

我有一个问题,如果我运行react-native run-android,它会失败,并说无法找到MainApplication类...即ClassNotFoundException

更新gradle.properties以使用编译器D8时,我能够解决该问题。

我补充说:

android.enableD8 = true

到我的gradle.properties

此处的文档详细信息:https : //android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html


1
Android Studio 3.1+默认使用此dex编译器
Lennon Spirlandelli,

2

Ashik abbas Answer(禁用Instant Run)对我有用,但是我需要Instant Run,最后我找到了对我有用的解决方案。只需禁用minifyEnabled即可。去的build.gradle(模块:应用程序)调试块和禁用minifyEnabled

debug {
            minifyEnabled false

        }

1

根据我的理解,由于即时功能,当我从输出中复制apk并将其放入sdcard时,由于即时功能,我在将android studio 2.1更新至2.3之后遇到了问题。对于这个问题,我从构建选项中构建apk并在android studio中构建apk。


1

如果已启用minifyEnabled,则shrinkResources在应用程序gradle文件中为true。您需要在proguard-rules.pro文件中添加以下行

-保留com.yourpackage_name类。** {*; }

因为最小化已删除了我们APK文件中的一些重要类。


这不是一个好的解决方案,因为它会将所有源文件排除在资源缩减之外。只能仅排除真正需要的文件,否则会增加apk大小。
Yannick

1

我以前有这个问题,这里的评论过去很有帮助,但这次没有。我检查了我的proguard配置,并删除了以下几行,然后它起作用了,因此proguard可以处理此错误:

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers

1

就我而言,我在使用androidx one设置项目时使用了旧的名称空间库。

解决方案是android.support.design.widget.BottomNavigationView用合适的组件替换组件,以摆脱支持库:com.google.android.material.bottomnavigation.BottomNavigationView


1

就我而言,我在中定义了Activity Manifest.xml,却忘记创建any activity。因此,我创建了Activity并在其中定义了它,manifest并且错误解决了!



0

对我来说,问题是在我创建签名的APK后出现的。为了修复它,我使用“运行/构建” APK生成了一个新的调试apk。之后,Run(cmd + r)再次运行,没有出现此错误。


0

我面临着同样的问题。我尝试了一天的一切,但没有任何效果。导致问题的依赖项是使用较低的编译sdk,目标sdk和最小sdk。我为该项目创建了库模块,复制了所有源并将sdk版本与应用程序sdk版本进行匹配。最后,它像魅力一样运作。


0

我遇到了同样的错误,有些答案在一个新手问题上误导了我。我的自定义视图描述符中的软件包错误,如下所示。希望对您有所帮助。

<com.my.app.wrong.package.MyActivity
    android:id="@+id/myActivity"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="8dp"
    android:gravity="left" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.