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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.ClassNotFoundException:在路径上找不到类: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");
}

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

我在这做什么错?如有必要,我会发布完整的代码。

答案

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

另一答案

对于任何拥有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标记内

 <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">
另一答案

我多次遇到这个问题,并且通过禁用Instant Run解决了这个问题。

另一答案

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

./gradlew clean

要么

./gradlew cleanBuildCache

或者用于窗户

gradlew cleanBuildCache

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

另一答案

我们不需要具有扩展MultiDexApplication的自定义Application类。相反,我们可以在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'
}

谢谢。

另一答案

当您使用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看到魔术:)

另一答案

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

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

另一答案

我只是在三星Lollipop设备上遇到了这次崩溃,这个solution为我工作。

dexOptions {
     preDexLibraries false
}

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

另一答案

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

另一答案

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

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

我有一个问题,如果我运行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

另一答案

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

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

您也可以查看this的答案。

另一答案

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

-keep class com.yourpackage_name。** {*; }

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

另一答案

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

另一答案

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

另一答案

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

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

debug {
            minifyEnabled false

        }
另一答案

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

另一答案

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

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers
另一答案

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

另一答案

在我的情况下,我使用旧的命名空间库,而我的项目设置使用androidx一个。

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

另一答案

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

<activity android:name="<full_path>.ActivityName" />
另一答案

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

<activity 

以上是关于java.lang.ClassNotFoundException:在路径上找不到类:dexpathlist的主要内容,如果未能解决你的问题,请参考以下文章