java.lang.ClassNotFoundException:未在路径中找到类:dexpathlist

Karthik Sivam 08/21/2017. 13 answers, 93.384 views
java android android c++ android-ndk android-ndk

我目前正在开发一个项目,我必须使用纯粹的本地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 #include #include #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名称:

...                 

我在这里犯的错误是什么? 如果需要的话,我会发布完整的代码。

4 Comments
Siddharth_Vyas 03/14/2014
你在使用任何外部的jar文件吗?
Karthik Sivam 03/14/2014
@SiddharthVyas不,我没有在这里使用外部的jar文件。
1 Igor Ganapolsky 08/09/2016
你的应用程序是多重dexed? 如果是这样,那么这就解释了这个问题。
j2emanue 07/05/2017
当我做了一个签名的apk这个错误没有发生。 只是调试

13 Answers


mnsalim 05/23/2017.

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

  1. 右键单击您的项目并选择Properties
  2. 从左侧菜单中选择Java Build Path
  3. 选择Order and Export标签。
  4. 从列表中确认已添加到项目中的库或外部罐被checked
  5. 最后,清理你的项目并运行。

你也可以检查这个答案。

4 comments
1 FoxDonut 11/06/2016
这是问题的正确解决方案。 我已经用我的libgdx游戏测试了这个,发现了和上面一样的错误。 我通过使用手机生成的日志(三星Galaxy S6)发现了这些错误。 一旦我应用了这个解决方案,我所有的问题都解决了。
2 Zin Min 03/25/2017
我无法从右键项目中找到属性。 可能是我很愚蠢。 :(
2 user3036320 04/19/2017
请显示android studio解决方案...
2 Skyler 07/08/2017
我找不到任何属性,任何人都不知道如何导航到列出的页面

Sushil 03/14/2014.

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

 

将其替换为:

 

要么

 
1 comments
1 Karthik Sivam 03/14/2014
我已经尝试了两个,它显示了相同的例外。

Akash Bisariya 03/06/2017.

我应该通过观​​察来了解问题

dex errors

但是花了半天的时间来解决这个问题。
我通过遵循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声明应用程序类或override attachBaseContext()函数)。

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

4 comments
1 milosmns 08/30/2016
只有当您通过引用计数限制(56k)时,添加多指数才有用,并且在棒棒糖之前它very不稳定且very不可靠。 这应该用来解决问题作为最后的手段。
Akash Bisariya 08/30/2016
那么根据你的解决方案应该是什么
milosmns 08/30/2016
我只是说,multi-dex会导致更多的麻烦,而不是它的帮助,这在开发者网站上已经清楚地说明了。 如果我有一个,我不会在这里寻找答案,对吧?
Akash Bisariya 08/30/2016
好的谢谢你的信息,请在这里更新,如果你找到了一个好的解决方案,这将是一个很大的帮助。

V. Kalyuzhnyu 07/07/2016.

删除设备上的应用程序和清理项目对我来说很合适


crazyjune 06/13/2014.
  1. 删除bin文件夹
  2. 改变图书馆的顺序
  3. 清洁和重建

为我工作。


Ali Gürelli 10/13/2016.

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


Redman 01/05/2017.

对于任何有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();

    }
} 

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

 

Ashik Abbas 07/26/2017.

我尝试了所有可能的选择,但结果为零。 最后,我找到了对我有帮助的正确解决方案。 只需去禁用即时运行转到文件 - >设置 - >生成,执行,部署 - >即时运行 - >取消选中即时运行的复选框 。 运行你的应用程序一次,这个apk文件正常工作..


Walking Code 05/05/2014.

只需将您的文件夹名称从lib更改为libs

然后你会在你的项目中看到一些错误标记,解决这个问题点击项目>

Properties > Java Build Path > libraries

删除所有上面带有红色标记的库,然后在clean your project之后apply > ok > 。 TADA看到神奇:)

1 comments
Shubham 10/27/2015
文件夹名称只是libs

Tere Bentikh 09/29/2015.

在我尝试给出的答案后,我发现了另一个相同的异常的原因,我不得不添加我手动使用我的主库库

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文件中使用了“Fix Project setup”,但这不起作用,所以我不得不在这里手动添加它,并且它工作正常


dees91 11/21/2016.

如果在删除一些gradle依赖项后收到此错误,请检查清单并确保删除了与该依赖项相对应的所有条目。

1 comments
Petter Friberg 11/21/2016
请不要为多个问题添加相同的答案 。 回答最好的一个,并将其余标记为重复。 请参阅为几个问题添加重复答案是否可接受?

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

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

并在依赖添加此

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

Shivegeeky 06/23/2017.

根据我的理解,我将android studio 2.1升级到2.3之后的问题由于即时功能,我的应用程序不会运行时,我从输出复制apk并放入SD卡。 对于这个问题,我从构建选项构建apk在android studio中构建apk。

Related questions

Hot questions

Language

Popular Tags