例外: 在 path: dexpathlist 上没有找到 class

我目前正在进行一个项目,其中我必须使用纯本地 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" />

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

255943 次浏览

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

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

取而代之的是:

<activity android:name=".POMActivity"

或者

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

我也遇到过类似的问题,这是我的解决办法:

  1. 右键单击您的项目并选择 物业
  2. 从左边的菜单中选择 Java 构建路径
  3. 选择 订购及出口选项卡。
  4. 从列表中确保添加到项目中的库或外部 jar 是 检查过了
  5. 最后,清理您的项目并运行。

你也可以检查 这个的答案。

只需将文件夹名从 lib更改为 libs,

然后您将在项目中看到一些错误标记,以解决此右键单击 project >

返回文章页面

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

  1. 删除垃圾箱文件夹
  2. 改变图书馆的秩序
  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

在此解决方案之前,我使用了。Java 文件,但这不工作,所以我不得不手动添加到这里,它的工作

我只要看一看就能明白这个问题

德克斯错误

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

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

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


// Enabling multidex support.
multiDexEnabled true
}


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

然后使用上面链接中指示的 MultiDexApplication类扩展 Application 类(或者在 AndroidManifest.xml中声明应用程序类,如果不能扩展应用程序类,则重写 attachBaseContext()函数)。

就这样,问题解决了。

删除设备上的应用程序和清理工程为我工作

我的解决方案是: 在 android 演播室终端中执行 ./gradlew --stop命令。之后只要清理和重建项目。

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

对于任何使用 multidex 激活的用户,请编写以下代码

建造,分级

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
android:name="YourPakageName.EnableMultiDex"
android:hardwareAccelerated="true"
android:icon="@drawable/wowio_launch_logo"
android:label="@string/app_name"
android:largeHeap="true"
tools:node="replace">

当你使用 multidex 时,试着用 MultiDexApplication 代替 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'

根据我的理解,我得到的问题后,更新 android 工作室2.1至2.3,由于即时功能,我的应用程序将不会运行时,我复制的 apk 从输出和放入 sdcard。 对于这个问题,我建立的 apk 从构建选项做构建 apk 在 android 工作室。

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

如果项目正在编译之前,您可以尝试使用以下方法清除缓存:

./gradlew clean

或者

./gradlew cleanBuildCache

或者窗户

gradlew cleanBuildCache

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

试试 清洁工程重建计划

如果在布局中有这样的 自定义视图,也会出现这种异常:

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

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

我们不需要有定制的 申请类,它扩展了 多功能手环应用程序。相反,我们可以像这样在 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">

随着 建造,分级(模块: 应用程序)的播放,

defaultConfig {
...


// Enabling multidex support.
multiDexEnabled true
}


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

谢谢。

我只有在三星棒棒糖设备上才会出现这种崩溃,而这个 解决方案对我很有用。

dexOptions {
preDexLibraries false
}

我把这个问题的答案贴在这里,因为这个问题是目前谷歌搜索结果中排名最高的问题,以上的答案都不适合我。

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

下面的解决方法对我有效..。

我尝试了上面提到的所有方法,但仍然无法让我的应用程序运行。 我有反应-本地应用程序运行在最新版本的4 + 和 android 工作室。

我遇到了这样的问题,如果我运行 response-national run-android,那么它就会失败,并且说它不能找到 MainApplication 类... 即 ClassNotFoundException

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

我补充道:

AbleD8 = true

我的等级,财产

文件详情: Https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html

我多次面对这个问题,他们都解决了禁用 即时运行

在我看来,这个问题的出现是因为 Kotlin。在我现有的代码中,有一个类是用 Kotlin 编写的。我创建了这个应用程序,它安装后,第一个活动打开的应用程序就崩溃了。在 logcat 中显示了这个错误。然后我用 app gradle 文件从 Kotlin 网站上更新了我的 Kotlin 版本。再次构建应用程序,然后它工作得很好。

如果你启用 minifyEnabledshrinkResources为真在你的应用程序级别文件。您需要在 proguard-rules.pro文件中添加以下行

- keep class com.yourpackage _ name. * * { * ; }

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

我以前有这个问题,这里的评论在过去有帮助,但这次没有。我检查了我的前卫配置和 i 被移除了以下行,然后它工作,所以前卫可以有一些与这个错误:

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

我也面临着同样的问题,我尝试了一天所有可能的方法,但是没有一个奏效。 导致问题的依赖关系是使用较低的编译 sdk、目标 sdk 和 min sdk。我为该项目创建了库模块,复制了所有源代码,并将 sdk 版本与应用程序 sdk 版本进行了匹配。最后它像魔咒一样奏效了。

我也犯了同样的错误,一些答案在一个新手问题上误导了我。我在自定义视图描述符中出现了错误的包,如下所示。我希望能帮到别人。

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

Ashik abbas 回答(禁用 即时运行)为我工作,但我需要 即时运行,最后我找到了解决方案,这对我是有帮助的。 关掉 MinifyEnable。 转到 调试区的 Gradle (模块: app)并禁用 MinifyEnable:

debug {
minifyEnabled false


}

在我的例子中,我在使用 androidxone 建立项目时使用了旧的名称空间库。

解决方案是用从支持库转义的正确组件 com.google.android.material.bottomnavigation.BottomNavigationView替换 android.support.design.widget.BottomNavigationView组件。

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

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

这解决了我的案子:

在我的例子中,我得到了下面的异常(注意我的应用程序类导致了异常,而不是我的活动) :

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,只需执行下列操作之一即可。

这与我的问题类似——在向一个 all Java 应用程序添加了一个 Kotlin 文件后,当我访问一个使用 Kotlin 文件的视图时,我的应用程序不断崩溃。我关闭了 Android Studio 并重新启动它,它提示我说“ Kotlin 未配置,是否配置?”这就解决了我的问题。

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

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

在我的例子中,我在 Manifest.xml中定义了 Activity,而忘记创建任何 activity。 所以我创建了 Activity 并在 manifest中定义了它,我的错误得到了解决!

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

或者

删除“安卓/. 设置”文件夹

或者

删除“ android/. build”文件夹

或者

删除“ android/. idea”文件夹

还有

纱线反应-本机运行仿真机器人

对于那些现在遇到这个问题的人来说,使用 android Studio 4.0 + ,你只需要启用前面提到的 给你中的 java 8即可

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

我使用@hofs,但是显示应该放在哪里 minifyEnable。

在模块级别,添加 启用假调试块将为我工作。

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


}

Flipper 不能在 0.61.x上工作,所以在 MainApplication.java中注释掉/删除 initializeFlipper(this)就可以了。

冷静药丸。

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

打开“ AndroidManifest”文件并检查错误
或者
检查您是否已经声明了该活动名称(当我们复制 + 粘贴活动类时会忘记该名称)。

在我的例子中,我用“ ctrl”+ “ shift”+ “ R”命令替换了所有出现“ com”的地方,这也改变了清单中活动的名称(以 com 开始)。


将 Java 代码转换为 Kotlin 代码可能会导致这个问题,因此在项目中配置 Kotlin 可能会消除这个问题

我尝试了大多数缓存相关的答案-但没有工作,

RCA

 I created broadcast receiver with android studio tool, and it didn't give correct package name,

实际[由 Android Studio 添加]

 package com.example.app;
 

意料之中

 package com.example.app.all_sms_reader;

科特林。 MainActivity.kt 打包您的 _ package

导入 io.flutter.invdding.android 导入 io.flutter.invdding.android

类 MainActivity: flutterFragmentActivity (){ }

当命名空间与包不匹配时会发生此问题:

注意: 如果您正在更改您的应用程序包,请遵循以下步骤:

  1. 右键单击 java > New > package 创建你想要的新包。
  2. 然后从以前的包中选择所有代码并将其放入新包中。Android 工作室将为您重构。
  3. Gradle (: app)并将名称空间更改为您最近创建的新包。
  4. 清理和重建项目,您的问题将得到解决。