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

时间:2014-03-14 08:20:13

标签: java android c++ 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 <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");
}

#ENDIF

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" />                     

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

39 个答案:

答案 0 :(得分:74)

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

答案 1 :(得分:64)

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

  1. 右键单击您的项目,然后选择属性
  2. 从左侧菜单中选择 Java Build Path
  3. 选择订单和导出标签。
  4. 从列表中确保您添加到项目中的库或外部jar已已选中
  5. 最后,清理您的项目&amp;运行。
  6. 您还可以查看this回答。

答案 2 :(得分:36)

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

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

将其替换为:

<activity android:name=".POMActivity"

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

答案 3 :(得分:21)

删除设备上的应用程序和清理项目工作

答案 4 :(得分:20)

我应该只看到

来理解这个问题
  

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'
 }

然后按照上述链接的指示,使用AndroidManifest.xml类扩展Application类(或在attachBaseContext()中声明应用程序类或覆盖MultiDexApplication函数。

这就是全部,它解决了这个问题。

答案 5 :(得分:19)

如果布局中包含自定义视图,也会发生此异常,如下所示:

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

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

答案 6 :(得分:11)

  1. 删除bin文件夹
  2. 更改图书馆的顺序
  3. 清理并重建
  4. 为我工作。

答案 7 :(得分:11)

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

答案 8 :(得分:11)

试试清洁项目&amp; 重建项目

答案 9 :(得分:10)

对于任何拥有multidex enable的人来说,写这个

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标记

 <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">

答案 10 :(得分:8)

我多次遇到此问题,并且通过停用即时运行来解决所有问题。

答案 11 :(得分:7)

只需清洁您的项目即可。它对我有用。

答案 12 :(得分:7)

如果项目刚刚编译,您可以尝试使用以下命令清除缓存:

./gradlew clean

./gradlew cleanBuildCache

或用于Windows

gradlew cleanBuildCache

https://developer.android.com/studio/build/build-cache.html

答案 13 :(得分:6)

对于现在遇到此问题的任何人,使用android studio 4.0及更高版本,您只需启用here中提到的Java 8

android {
    defaultConfig {
            ...
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

答案 14 :(得分:6)

我们不需要具有扩展 MultiDexApplication 的自定义应用程序类。相反,我们可以在 AndroidManifest.xml

上使用此功能
#project_tasks/edit.html.erb
<h1>Editing Project</h1>

<%= render 'form', project: @project %>

<div id='project_task_listing'></div>

<%= link_to 'Show', @project %> |
<%= link_to 'Back', projects_path %>

<script>
  $(function(){
    $.ajax({
        //make ajax request to action: 'index', controller: 'ProjectTasks' and in response update div with id 'project_task_listing'
    });
  });
<script>

以及 build.gradle (模块:应用),

<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">

感谢。

答案 15 :(得分:5)

当您使用multidex时,请尝试使用MultiDexAppication而不是Application扩展您的应用程序类,并覆盖以下方法,这需要Android 5.0以下(因为5.0及以上支持multidex)

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

并在依赖项中添加此

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

答案 16 :(得分: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

在此解决方案之前,我使用了&#34;修复项目设置&#34;来自eclipse中的.java文件,但这不起作用,所以我不得不在这里手动添加它并且它起作用

答案 17 :(得分:3)

我只是在三星Lollipop设备上发生了这次崩溃,这个solution对我有用。

dexOptions {
     preDexLibraries false
}

我在这里发布这个答案是因为这个问题目前是谷歌此次崩溃中排名最高的搜索结果,上述答案都不适合我。

答案 18 :(得分:3)

就我而言,这个问题是因为Kotlin而产生的。在我现有的代码中,有一个写Kotlin的类。我构建了应用程序,它已经安装,并且一旦第一个活动打开应用程序就崩溃了。在logcat中显示此错误。然后我在app gradle文件中从Kotlin网站更新了我的Kotlin版本。再次构建应用程序然后它运行良好。

答案 19 :(得分:3)

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

即可

然后,您将在项目中看到一些错误标记,以解决此问题,点击项目&gt;

Properties > Java Build Path > libraries

删除所有带有红色标记的库,然后在清理项目后删除apply > ok >。 TADA看到了魔力:)

答案 20 :(得分:2)

以下解决方案对我有用......

我尝试了上面提到的所有内容,但仍未启动我的应用。 我有最新版本的gradle 4+和android studio运行的react-native app。

我遇到的问题是,如果我运行react-native run-android,那么问题就是失败了,说它无法找到MainApplication类......即ClassNotFoundException

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

我补充说:

android.enableD8 =真

到我的gradle.properties

Doc详细信息: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

答案 21 :(得分:1)

如果在应用gradle文件中将minifyEnabledshrinkResources设置为true。您需要在proguard-rules.pro文件中添加以下行

  

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

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

答案 22 :(得分:1)

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

<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" />

答案 23 :(得分:1)

Ashik abbas answer(禁用即时运行)对我有用,但是我需要即时运行,最后我找到了对我有用的解决方案。 只需禁用 minifyEnabled 。 转到 debug 块中的 build.gradle(模块:应用),并禁用 minifyEnabled

debug {
            minifyEnabled false

        }

答案 24 :(得分:1)

根据我的说法,我在更新android studio 2.1到2.3后得到问题由于即时功能,当我从输出复制apk并放入sdcard时,我的应用程序将无法运行。 对于这个问题,我在android studio中构建apk构建apk。

答案 25 :(得分:1)

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

答案 26 :(得分:1)

在我的案例中,我在Manifest.xml中定义了活动,却忘记创建任何activity。 所以我创建了Activity并在manifest中定义了它,我的错误就解决了!

答案 27 :(得分:0)

对我来说,我最终要做的是禁用minifyEnabled falseshrinkResources false

答案 28 :(得分:0)

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

答案 29 :(得分:0)

Flipper不适用于0.61.x,因此在initializeFlipper(this)中注释/删除MainApplication.java应该可以解决问题。

冷丸。

答案 30 :(得分:0)

我要使用@hofs,但要显示应将minifyEnabled放在哪里。

在Module Gradle中,在 Debug 块中添加 minifyEnabled false 对我有用。

 android {
    compileSdkVersion 28
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.korechi.roamioapp"
        minSdkVersion 23
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
          minifyEnabled false
        }
    }

}

答案 31 :(得分:0)

这类似于我的问题-将Kotlin文件添加到全Java应用程序后,当我访问使用Kotlin文件的视图时,我的应用程序一直崩溃。我关闭了Android Studio并重新启动它,它提示我“未配置Kotlin,您要配置吗?”,这提示了我。

这最终是在我的项目classpath文件中添加以下build.gradle行:

buildscript {
   ...
   dependencies {
      ...
      classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
      ...
   }
   ...
}

答案 32 :(得分:0)

这解决了我的情况:

就我而言,我在下面遇到了异常(请注意,我的应用程序类在引起异常,而不是我的活动):

ClassNotFoundException: Didn't find class "com.example.MyApplication" on path: DexPathList

我仅在等于或低于API 19的设备上遇到此异常,原因是我正在扩展MultiDexApplication()类并同时覆盖attachBaseContext!当我移除attachBaseContext后,一切都步入正轨。

class MyApplication : MultiDexApplication() {

override fun onCreate() {
    super.onCreate()
    // ...
}

override fun attachBaseContext(base: Context?) {
    super.attachBaseContext(base)
    MultiDex.install(this)
}

因此,如果您碰巧遇到我这样的情况(不太可能),则无需同时扩展MultiDexApplication()和覆盖attachBaseContext,就可以执行以下操作之一足够。

答案 33 :(得分:0)

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

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

答案 34 :(得分:0)

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

解决方案是将android.support.design.widget.BottomNavigationView组件替换为从支持库com.google.android.material.bottomnavigation.BottomNavigationView中逃脱的正确组件。

答案 35 :(得分:0)

您还可以看到Class not found when Unmarshalling Android Intent ParcelableAndroid E/Parcel﹕ Class not found when unmarshalling (only on Samsung Tab3),但是这些主题都没有帮助我。我什至重写了一个可包裹的课程。

答案 36 :(得分:0)

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

答案 37 :(得分:0)

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

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

答案 38 :(得分:-1)

删除“ android / app / .settings”文件夹

删除“ android / .settings”文件夹

删除“ android / .build”文件夹

删除“ android / .idea”文件夹

yarn react-native运行android