簡體   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