繁体   English   中英

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

[英]java.lang.ClassNotFoundException: Didn't find class on path: dexpathlist

我目前正在做一个项目,我必须使用纯原生 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" />                     

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

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

我遇到了类似的问题,这是我的解决方案:

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

您也可以查看答案。

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

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

将其替换为:

<activity android:name=".POMActivity"

或者

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

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

我应该通过看到来理解问题

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()函数)。

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

只需尝试Clean Project & Rebuild Project

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

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

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

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

./gradlew clean

或者

./gradlew cleanBuildCache

或用于窗户

gradlew cleanBuildCache

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

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

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

为我工作。

对于任何启用 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 Application 标签中写入这个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">

对于现在遇到此问题的任何人,使用 android studio 4.0+,您只需启用此处提到的 java 8

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

我们不需要自定义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'
}

谢谢。

我多次遇到这个问题,它们都通过禁用Instant Run来解决。

当您使用 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'

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

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

Properties > Java Build Path > libraries

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

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

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

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

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

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 文件中的“修复项目设置”,但这不起作用,所以我不得不在这里手动添加它并且它起作用了

我只在三星棒棒糖设备上遇到这种崩溃,这个解决方案对我有用。

dexOptions {
     preDexLibraries false
}

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

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

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

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

我尝试了上面提到的所有内容,但仍然没有让我的应用程序运行。 我有在最新版本的 gradle 4+ 和 android studio 上运行的本机应用程序。

我遇到的问题是,如果我运行 react-native run-android,它会失败,并显示无法找到 MainApplication 类...即 ClassNotFoundException

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

我补充说:

android.enableD8=真

到我的 gradle.properties

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

根据我的理解,我在将 android studio 2.1 更新到 2.3 后遇到了这个问题,因为当我从输出复制 apk 并放入 SD 卡时,我的应用程序将无法运行。 对于这个问题,我从构建选项构建 apk 在 android studio 中构建 apk。

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

-保持类com.yourpackage_name.** { *; }

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

我以前遇到过这个问题,这里的评论在过去有所帮助,但这次没有。 我检查了我的 proguard 配置,然后删除了以下几行,然后它就可以工作了,因此 proguard 可能与此错误有关:

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

我有同样的错误,一些答案在新手问题上误导我。 我的自定义视图描述符中包含错误的包,如下所示。 我希望它对某人有所帮助。

<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回答(禁用Instant Run )对我有用,但我需要Instant Run ,最后我找到了对我有帮助的解决方案。 只需禁用minifyEnabled 转到调试块中的build.gradle(Module: app)并禁用minifyEnabled

debug {
            minifyEnabled false

        }

在我的例子中,我使用了旧的命名空间库,而我的项目是使用 androidx one 设置的。

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

这与我的问题类似——在将 Kotlin 文件添加到全 Java 应用程序后,当我访问使用 Kotlin 文件的视图时,我的应用程序不断崩溃。 我关闭了 Android Studio 并重新启动它,它提示我一条消息“Kotlin 未配置,您要配置吗?”,然后解决了我的问题。

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

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

就我而言,我在Manifest.xml定义了 Activity 并忘记创建任何activity 所以我创建了 Activity 并在manifest定义它,我的错误解决了!

我和@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
        }
    }

}

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

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

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

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

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

清凉丸。

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


将 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;

src->main->kotlin........ MainActivity.kt package your_package

import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.android.FlutterFragmentActivity

class MainActivity:FlutterFragmentActivity() { }

这解决了我的情况:

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

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 ,执行其中一个操作就足够了。

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

或者

删除“android/.settings”文件夹

或者

删除“android/.build”文件夹

或者

删除“android/.idea”文件夹

纱线反应原生运行android

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM