Android ClassNotFoundException: не нашел класс на пути

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" для создания пути и переместил его в начало "Order and Export", но он все равно дал мне ту же ошибку.

EDIT: я полностью восстановил проект и не смог воспроизвести ошибку. Не уверен, что это вызвало.

Ответ 1

У меня была такая же проблема для моего проекта. Это произошло из-за конфликта в версии библиотеки поддержки Android между моим проектом и проектом библиотеки, который я добавил в свой проект. Поместите ту же версию библиотеки поддержки Android в ваш проект и библиотечные проекты, которые вы включили, и очистите сборку... Все будет работать...

Ответ 2

Этот метод работал у меня. Щелкните правой кнопкой мыши на project и выберите properties. Откроется панель "Свойства для". В меню слева перейдите к Java Build PathOrder and Export. В списке ниже снимите флажок рядом с "Android Dependencies". Наконец clean your project и запустите.

Надеюсь, что это работает.

Ответ 3

Для тех из вас, кто имеет эту проблему в Android Studio, у меня была такая же проблема после слияния и по какой-то причине она сохранялась даже после операций clean и invalidate cash/restart, которые сводили меня с ума.

Оказывается, его можно исправить, выполнив gradle build один раз из командной строки. Просто запустите следующую директорию проекта:

./gradlew assemble clean
./gradlew assemble

Надеюсь, это сэкономит кому-то время, потраченное на то, что мне пришлось пройти.

Ответ 4

Если вы используете Eclipse, попробуйте Project → Clean

Ответ 5

У меня была такая же проблема, это сработало для меня

1) Полный путь активности в mainfest вместо относительного пути.

2) Удалите папку 'build' и очистите проект.

Ответ 6

Это происходит, если мы изменим путь сборки APP, это может быть в любом случае с добавлением или удалением или сменой библиотек или .jar файлов. Лучшее решение - Перезапустить Eclipse.

Ответ 7

Если вы получите эту ошибку при использовании новой функции Instant Run в Android Studio 2.0 и выше, это будет своего рода ошибка на их стороне.
Чтобы исправить это, вам придется останавливать свое приложение вручную на устройстве/эмуляторе, если оно не остановлено, а затем из Android Studio выберите Build Rebuild Project.
Затем нажмите кнопку Запустить или SHIFT + F10

Ответ 8

Для любого, у кого есть поддержка 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
    android:name="YourPakageName.EnableMultiDex"
    android:hardwareAccelerated="true"
    android:icon="@drawable/wowio_launch_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    tools:node="replace">

Ответ 9

Если вы используете Multidex на Android 4.4 и более ранних версиях, ваша проблема может заключаться в том, что ваш класс активности находится во втором файле dex и поэтому не найден системой Android.

Чтобы сохранить ваш класс активности в основном файле dex, смотрите эту страницу:

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


Чтобы узнать, какие классы находятся в файле dex, используйте Android Studio.

Просто перетащите апк в Android Studio. Вы должны увидеть свои файлы dex в apk explorer.

Затем выберите файл dex, чтобы увидеть, какие классы находятся внутри.


другой альтернативой является dexdump:

Вы можете проверить содержимое ваших файлов dex, содержащихся в вашем apk, используя команду dexdump, которую можно найти в

Android-SDK/Build-инструменты/27.0.3/dexdump

Для пользователей Windows, посмотрите этот инструмент, который я сделал, чтобы облегчить процесс

Ответ 10

В моем случае это был процесс минимизации Proguard, который удалил некоторые важные классы из моего рабочего apk.

Решением было отредактировать файл proguard-rules.pro и добавить следующее:

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

Ответ 11

1) Создайте папку libs в корне проекта

2) Скопируйте и вставьте файл jar в него
3) Настроить путь сборки (Добавить банку)
4) Очистить и запустить
приветствия: -)

Ответ 12

Поверьте мне или нет... Я опробовал почти каждый ответ, который я нашел здесь, в stackoverflow. Ничто не помогло бы, пока я не перезапустил машину. Моя Android-студия работает на Ubuntu 16.04 LTS.

Ответ 13

Я встретил ту же проблему, и я заметил, что образец кода был помещен в каталог "java" вместо каталога "src". После перемещения кода в src проблема была решена.

Также убедитесь, что каталог приложения разделен на несколько папок. например /main/com/site/appname/ не /main/com.site.appname/

Надеюсь, что он работает ~

Ответ 14

Я столкнулся с этой ошибкой один раз, когда я определил класс, который расширил представление, но ссылался на это пользовательское представление в файле макета с неправильным именем. Вместо <com.example.customview/> я включил <com.customview/> в файл макета XML.

Ответ 15

У меня была эта проблема в последнее время, и я использую Android Studio 0.8.4

Проблема заключалась в том, что я решил переименовать файл макета XML файла, который был вызван main.xml.

Щелкните правой кнопкой мыши по нему и выберите Рефакторинг → Переименовать. Прежде чем переименовывать его, обязательно снимите флажок "Поиск в комментариях и строках" и нажмите Рефакторинг.

Поскольку мой файл был первоначально назван "main", он переименовал критические пути в app.iml и build.gradle, главным образом java.srcDirs в build.gradle, так как путь определен как 'src/main/java'.

Я надеюсь, что это поможет любому, кто может столкнуться с этой проблемой.

Ответ 16

У меня была эта проблема после обновления с версии 18. После обновления у меня было следующее: Project Build Target был 5.01, targetSDKVersion = 21

Но: Build Tools по-прежнему с Android 4.3.1 (18) Я заметил, что те приложения, которые извлекали свои действия из ActionBarActivity, столкнулись с вышеупомянутой ошибкой тех, которые еще не выполнялись.

Таким образом, простым решением было использование последних 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))

Ответ 17

У меня была такая же проблема в Windows. Я переименовал путь в проект в нечто, содержащее пробел.

Убедитесь, что путь к вашему проекту не содержит пробела.

Ответ 18

Я столкнулся с той же проблемой и решил ее, выполнив следующее:

В меню сборки выберите

1- чистый проект.

2- Сборка APK.

Ответ 19

Решение, упомянутое здесь, → Решение Multidex Issue работало для меня. Ниже приведено то, что нужно добавить в контекст приложения:

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

Ответ 20

Если вы добавили новый Library Project качестве модуля в проект Android и используете Kotlin в своей библиотеке , не забудьте добавить

apply plugin: 'kotlin-android'

к началу файла модуля вашего модуля. Android Studio не добавляет эту строку, когда вы создали новый модуль, и это может тратить ваши часы, как и я.

Ответ 21

У меня была эта проблема, вызванная несколькими причинами, но я вижу это в вашем стеке "**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>

Теперь это работает! =)

Ответ 22

У меня была такая же точная проблема. Как предположил @weiweia, переместите код из каталога java в src для меня. Я также удалил Android Dependencies из Project → Properties → Java Build Path → Order and Export и включил только проекты библиотеки на экране Android.

Ответ 23

У меня была эта проблема довольно долгое время, и, как и все остальные, вышеприведенные ответы не касались моего проекта.

В моем проекте я связал проект с моим проектом, и он бросал ClassDefNotFoundError каждый раз, когда исполнялся какой-то код для другого проекта.

Итак, это было мое решение. Я перешел к свойствам проекта моего проекта и Java Build Path. Нажав "Source" -tab и "источник ссылок" из src-папки другого проекта в свой собственный проект и назвал новую папку "core-src".

Надежды на это решение помогают кому-то

Ответ 24

У меня была такая же проблема. Я использую 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">

Я исправил проблему, перейдя на версию Code 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 не любит более низкое имя версии с более высоким кодом версии?

Я нашел следующее на http://developer.android.com/guide/topics/manifest/manifest-element.html#vname

Android: VersionCode Внутренний номер версии. Этот номер используется только для определения того, является ли одна версия более поздней, чем другая, с более высокими номерами, указывающими более поздние версии. Это не номер версии, показанный пользователям; это число задается атрибутом versionName. Значение должно быть задано как целое число, например "100". Вы можете определить его, как хотите, до тех пор, пока каждая последующая версия имеет большее число. Например, это может быть номер сборки. Или вы можете перевести номер версии в формате "x.y" в целое число, закодировав "x" и "y" отдельно в нижнем и верхнем 16 битах. Или вы можете просто увеличить число на каждый каждый раз, когда будет выпущена новая версия.

Android: versionName Номер версии, показанный пользователям. Этот атрибут может быть задан как необработанная строка или как ссылка на ресурс строки. Строка не имеет другой цели, кроме как показывать ее пользователям. Атрибут versionCode содержит значимый номер версии, используемый внутри.

Ответ 25

На всякий случай кто-то сталкивается с той же проблемой, что и я, и нет ответ здесь помогает.

Для меня причина заключалась в том, что рефакторинг студии Android не работает. Я переместил внутренний класс вне класса, который был View и поэтому также был xml, где был установлен прямой путь. Этот путь не будет реорганизованный студией! И никакая ошибка не будет брошена.

Надеюсь, это поможет кому угодно. Приветствия.

Ответ 26

В нашем случае мы хотели скомпилировать версию Vagrant и имели ту же ошибку. Мы зафиксировали его clean project и rebuild project в меню "Сборка"

Ответ 27

Я только что перезапустил устройство и запустил приложение. Он работал без каких-либо проблем. Надеюсь, это поможет кому-то:)

Ответ 28

Я нашел эту ошибку в Android Studio, когда я попытался выполнить отладку в устройстве с API 23, поэтому я проверил Android Studio, и я заметил, что я не установил это версия API 23. После установки я решил проблему.

Ответ 29

У меня была эта проблема несколько раз, и часто я не делал что-то явно неправильное с зависимостями.

Всегда полезно проверить, присутствует ли этот класс "не найден" в последнем apk. Если это так, как это было в моих случаях, проблема обычно такова:

Это не то, что данный класс не найден, но он не может быть загружен, потому что его суперкласс отсутствует.

Проверьте, доступен ли класс, который вы продлеваете, и затем попытайтесь исправить вашу сборку script или зависимости соответственно.

Ответ 30

Я также столкнулся с той же проблемой, мы можем решить это, сделав что-то вроде

1- Удалите приложение.

2- Перестройте проект.

3- Очистите проект.

4 Недействительность и перезапуск проекта из файла → аннулировать и перезапустить.