簡體   English   中英

Android ClassNotFoundException:未在路徑上找到類

[英]Android ClassNotFoundException: Didn't find class on path

10-22 15:29:40.897: E/AndroidRuntime(2561): FATAL EXCEPTION: main
10-22 15:29:40.897: E/AndroidRuntime(2561): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gvg.simid/com.gvg.simid.Login}: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Looper.loop(Looper.java:137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.main(ActivityThread.java:5103)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invokeNative(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invoke(Method.java:525)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.NativeStart.main(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
10-22 15:29:40.897: E/AndroidRuntime(2561):     ... 11 more

我不確定是什么原因造成的,因為它在清單中正確列出:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gvg.simid"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-feature android:name="android.hardware.usb.host" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.gvg.simid.Login"
            android:label="@string/app_name" 
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我還添加了“Android Private Libraries”來構建路徑,並將其移動到“Order and Export”的頂部,但它仍然給了我同樣的錯誤。

編輯:我完全重建了項目,但無法重現錯誤。 不知道是什么原因造成的。

我的項目遇到了同樣的問題。 發生這種情況是由於我的項目和我在項目中添加的庫項目之間的 android 支持庫版本沖突。 將相同版本的 android 支持庫放在您的項目和您包含的庫項目中並清理構建......一切都會正常......

以下方法對我有用

  • 右鍵單擊您的project並選擇properties
  • “屬性”面板將打開。 從左側菜單轉到Java Build Path -> Order and Export
  • 從下面的列表中取消選中"Android Dependencies"旁邊的框
  • 最后clean your project並運行

對於那些在 Android Studio 上遇到此問題的人,我在合並后遇到了同樣的問題,出於某種原因,它甚至在cleaninvalidate cash/restart操作invalidate cash/restart后仍然存在,這讓我發瘋。

事實證明,它可以通過從命令行運行一次 gradle build 來修復。 只需在項目目錄中運行以下命令:

./gradlew assemble clean
./gradlew assemble

我希望它可以為某人節省我不得不經歷的時間浪費和挫折。

我有同樣的問題,這對我有用

1) mainfest 中活動的完整路徑代替相對路徑。

2)刪除'build'文件夾並清理項目。

如果您將一個新的Library Project作為模塊添加到您的 Android 項目中,並且您在庫中使用Kotlin ,請不要忘記添加

apply plugin: 'kotlin-android'

到模塊的 Gradle 文件的頂部。 當您創建新模塊時,Android Studio 不會添加這一行,這可能會像我一樣浪費您的時間。

編輯:過了一段時間,我再次遇到了這個問題,這次我忘記添加我的模塊作為項目的依賴項。 :)

如果您使用的是 Eclipse,請嘗試 Project -> Clean

如果我們更改 APP 的構建路徑,就會發生這種情況,這可能發生在添加或刪除或更改庫或 .jar 文件的任何情況下。 最好的解決方案是重新啟動 Eclipse。

如果您在 Android Studio 2.0 及更高版本中使用新的即時運行功能時遇到此錯誤,那么這是他們這邊的某種錯誤。
要解決此問題,您必須在設備/模擬器上手動停止您的應用程序(如果它沒有停止)然后從 Android Studio 中選擇Build Rebuild Project
然后單擊運行按鈕或SHIFT+F10

對於任何啟用 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 4.4更早版本上使用Multidex ,您的問題可能是您的活動類位於第二個 dex 文件中,因此無法被 android 系統找到。

要將您的活動類保留在主 dex 文件中,請參閱此頁面:

https://developer.android.com/studio/build/multidex.html#keep


要查找 dex 文件中的類,請使用 Android Studio

只需將您的 apk 拖放到 Android Studio 中即可。 您應該能夠在 apk 資源管理器中看到您的 dex 文件。

然后選擇dex文件看看里面有什么類。


另一種選擇是 dexdump:

您可以使用dexdump命令檢查您的 apk 中包含的 dex 文件的內容,該命令可以在

android-sdk/build-tools/27.0.3/dexdump

對於 Windows 用戶,請參閱我為簡化過程而制作的這個工具

就我而言,是 proguard 縮小過程從我的生產 apk 中刪除了一些重要的類。

解決方案是編輯 proguard-rules.pro 文件並添加以下內容:

-keep class com.someimportant3rdpartypackage.** { *; }

1)在項目根目錄下創建libs文件夾
2)將jar文件復制粘貼進去
3)配置構建路徑(添加jar)
4)清潔和運行

歡呼:-)

當我定義一個擴展視圖但在布局文件中使用錯誤名稱引用此自定義視圖的類時,我曾遇到過此錯誤。 我在 XML 布局文件中包含了<com.customview/>而不是<com.example.customview/>

信不信由你......我幾乎嘗試了我在stackoverflow上找到的每個答案。 沒有任何幫助,直到我重新啟動機器。 我的 Android Studio 適用於 Ubuntu 16.04 LTS。

我遇到了同樣的問題,我注意到示例代碼放在目錄“java”而不是目錄“src”下。 將代碼移到src后,問題解決。

還要確保將應用程序目錄拆分為多個文件夾。 例如/main/com/site/appname/不是/main/com.site.appname/

希望有用~

我遇到了同樣的問題並通過執行以下操作解決了它:

從構建菜單中選擇

1-清潔項目。

2- 構建 APK。

我遇到了同樣的問題,經過大量工作和搜索,我找到了解決方案:我只是清理了項目,然后構建了 apk。 -Build->Clean Project -Build-> Build APK(s) 我希望它有用.....

我最近遇到了這個問題,我使用的是 Android Studio 0.8.4

問題是我決定重命名一個名為 main.xml 的 XML 菜單布局文件。

右鍵單擊它並選擇Refactor --> Rename 在重命名之前,請務必取消選中“在注釋和字符串中搜索”並按下Refactor

因為我的文件最初被命名為'main' ,它重命名了 app.iml 和 build.gradle 中的關鍵路徑,主要是 build.gradle 中的 java.srcDirs,因為路徑被定義為'src/main/java'

我希望這可以幫助任何可能遇到此問題的人。

從版本 18 升級后我遇到了這個問題。升級后我有以下內容:Project Build Target is 5.01, targetSDKVersion=21

但是:構建工具仍然來自 Android 4.3.1 (18) 我注意到那些從 ActionBarActivity 派生他們的 Activity 的應用程序崩潰了,上面的錯誤仍然沒有運行。

因此,簡單的解決方法是使用最新的Android SDK Build Tools 21.1.2而不是僅使用 Android SDK Build Tools 18 的那些,這在某種程度上似乎是默認值。

所以罪魁禍首似乎是 Appcompat 庫,我用它來實現 Actionbar 的向后兼容性。

順便說一句:使用我必須設置/修復的 appcompat 庫: $SDKInstallDIR$\\Android\\android-sdk\\extras\\android\\support\\v7\\appcompat\\project.properties target=android-21 (在其他一些有用的帖子,默認值為 19))

我多次遇到這個問題,而且我經常沒有在依賴項上做一些明顯錯誤的事情。

檢查最終 apk 中是否存在此“未找到”類總是一個好主意。 如果是這樣,就像在我的情況下發生的那樣,問題通常是:

不是找不到給定的類,而是因為缺少超類而無法加載。

檢查您擴展的類是否可用,然后嘗試相應地修復您的構建腳本或依賴項。

我在 Windows 上遇到了同樣的問題。 我已將項目的路徑重命名為包含空格的內容。

確保項目的路徑不包含空格。

這里提到的解決方案 --> Multidex Issue 解決方案對我有用 以下是需要添加到應用程序上下文的內容:

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

我遇到了這個問題,由多種原因引起,但我在您的堆棧跟蹤中看到了這一點“ **Unable to instantiate activity ComponentInfo{...}: java.lang.ClassNotFoundException: Didn't find class "..." on path: DexPathList[[** ",在我的.classpath停止工作之前,我發現它存在差異。

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

我添加了以下行:

<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>

這是最終版本:

  <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

現在它起作用了! =)

我有同樣的問題。 正如@weiweia 建議的那樣,將代碼從 java 目錄移動到 src 對我有用。 我還從項目 --> 屬性 --> Java 構建路徑 --> 訂單和導出中刪除了 Android 依賴項,並確保僅在 Android 屏幕中包含庫項目。

我有這個問題已經有一段時間了,和其他人一樣,上面的答案不適用於我的項目。

在我的項目中,我將一個項目鏈接到我的項目,並且每次執行另一個項目的某些代碼時它都會拋出 ClassDefNotFoundError。

所以這是我的解決方案。 我去了我的項目和 Java Build Path 的項目屬性。 將另一個項目的 src 文件夾中的“源”選項卡和“鏈接源”按到我自己的項目中,並命名一個新文件夾“core-src”。

希望這個解決方案可以幫助某人

我有同樣的問題。 我正在使用 Xamarin.Android。

我的問題是我更改了 versionCode 和 versionName。

當我把它們設置成這樣時,我沒有問題:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pac.ka.ge" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">

當我將其更改為(versionCode 2 和 versionName 0.0.1)時出現問題:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="0.0.1" android:installLocation="auto">

我通過更改為 versionCode 2 和 versionName 1.0.0.1 解決了這個問題,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="1.0.0.1" android:installLocation="auto">

我不確定為什么這是一個問題,也許 Android 不喜歡較低的 versionName 和較高的 versionCode?

我在http://developer.android.com/guide/topics/manifest/manifest-element.html#vname上找到了以下內容

android:versionCode 內部版本號。 此數字僅用於確定一個版本是否比另一個版本更新,數字越大表示版本越新。 這不是向用戶顯示的版本號; 該數字由 versionName 屬性設置。 該值必須設置為整數,例如“100”。 您可以根據需要定義它,只要每個后續版本都有更高的編號。 例如,它可以是內部版本號。 或者,您可以通過將“x”和“y”分別編碼為低 16 位和高 16 位,將“xy”格式的版本號轉換為整數。 或者,您可以在每次發布新版本時簡單地將數字增加 1。

android:versionName 向用戶顯示的版本號。 此屬性可以設置為原始字符串或對字符串資源的引用。 除了向用戶顯示之外,該字符串沒有其他用途。 versionCode 屬性包含內部使用的重要版本號。

以防萬一有人遇到和我一樣的問題,這里沒有建議的答案有幫助。

對我來說,原因是 Android Studio 重構有問題。 我將一個內部類移到一個類之外,它是一個視圖,因此也有一個 xml,其中設置了直接路徑。 這條路徑不會被工作室重構! 並且不會拋出任何錯誤。

希望這可以幫助任何人。 干杯。

在我們的例子中,我們想要編譯 Vagrant 版本並且有同樣的錯誤。 我們通過clean project修復它並在構建菜單中rebuild project

我剛剛重新啟動了設備並運行了應用程序。 它沒有任何問題。 希望這對某人有所幫助:)

當我嘗試在帶有API 23的設備中進行調試時,我在Android Studio 中發現了這個錯誤,所以我檢查了 Android Studio,發現我沒有安裝這個 API 23 版本 安裝后,我解決了這個問題。

我也遇到了同樣的問題,我們可以通過做一些事情來解決這個問題

1-卸載應用程序。

2-重建項目。

3-清潔項目。

4-從文件中失效並重新啟動項目 - > invalidate並重新啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM