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

У меня проблема, так как я обновил свое приложение на playstore. С момента этого обновления возникает исключение, но я не изменил ничего, связанного с этим исключением.

Stacktrace:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{de.opiatefuchs.onthejobtimerlight/de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity}: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access0(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.ClassNotFoundException: Didn't find class "de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity" on path: DexPathList[[zip file "/data/app/de.opiatefuchs.onthejobtimerlight-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.Instrumentation.newActivity(Instrumentation.java:1066)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226)
... 10 more
Suppressed: java.lang.ClassNotFoundException: de.opiatefuchs.onthejobtimerlight.OnTheJobTimerActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

дело в том, что моя версия приложения до запуска без проблем, и я не изменил ничего, связанного с этой деятельностью. Я только что добавил новый информационный диалог, который не имеет ничего общего с этой деятельностью. Это приложение является бесплатной версией lite, Ive сделал те же самые изменения на pro версия и там ничего не выбрасывается. Это работает, как и ожидалось. Единственная разница между pro и lite заключается в том, что я интегрировал Admob (по-новому) в версии lite и лицензию Google Play в версии pro. Но это я интегрировал с самого начала и не внес изменений в это. Я также не внес никаких изменений в манифест, я прочитал много сообщений здесь, но ничего не помогает.

Кажется ,что это просто происходит на версиях Android с 5.0. Кто-нибудь знает, что это проблема может вызвать или у кого-то такой же опыт? Возможно ли, что proguard просто уничтожил что-либо, запутав (также здесь нет изменений)?

Я не опубликовал код, потому что это не важно для этой проблемы, как я уже сказал, Я не внес изменений, связанных с этим исключением.

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

11 ответов


обновление

после долгого времени оказалось, что это должно иметь какое-то отношение к proguard. Я не могу сказать, что именно вызывает ошибка, но я попробовал немного, и это то, что я заметил (это в моем случае с Eclipse IDE):

  • Я должен закрыть каждую вкладку из проекта, который я хочу подписать
  • Я должен очистить проект и после очистки ничего не делать, кроме экспорта apk
  • внесение небольшого изменения в манифест, сохраните его и отменить изменение (и сохранить)
  • если в манифесте есть какой-либо класс с именем "YourClass" или ".YourClass", измените его на " com.вашпакет.в yourclass"

это четыре пункта, которые я сделал, а затем это сработало. Это выглядит подозрительно, но я думаю, что есть проблема с запутыванием. Потому что без этих точек я могу просто скомпилировать свой apk и установить его из eclipse. Для меня нет очевидной причины для такого поведения. Также имя пакета работает без изменений, если я только установлю его из eclipse. Надеюсь, эти моменты могут кому-то помочь.


Если вы манифестируете имя пакета в порядке, Если вы заключенных проект, и в file explorer переименовал ваш проект но после импорта вы снова сталкиваетесь с этой проблемой единственный способ здесь -

УДАЛИТЬ ЭТУ ПАПКУ .Gradle в.

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


Я только что сменил gradle с com.андроид.инструменты.сборка: gradle: 2.2.2 to com.андроид.инструменты.сборка: gradle: 2.2.0,и проблема в порядке!


для меня это произошло, когда имя пакета (имя каталога) изменен.

Я понял, что папка "build" волшебным образом поддерживает промежуточные файлы для сборки проекта. Я удалил папку" build "в папке" app". Теперь gradle пришлось переделать все файлы с новым именем пакета. Теперь он работает правильно.


Я думаю, что это имеет какое-то отношение к multidex и нескольким именам пакетов, если у вас есть несколько модулей . Очистите проект и удалите все сборки/ папки.


tl; dr: это, по-видимому, вызвано сочетанием относительного и абсолютного объявления в AndroidManifest.xml. Я думаю, что лучшее решение-использовать относительную нотацию при объявлении <application .../>, <activity .../>, <receiver .../> и <service .../>в своем AndroidManifest.xml.

Полное Описание:

у меня была эта проблема слишком долго, это было потому, что я использовал как абсолютный, так и относительный <application .../>, <activity .../>, <receiver .../> и <service .../> заявления в мой AndroidManifest.xml. Вот что я сделал чтобы исправить это:

вы AndroidManifest.xml убедитесь, что есть package: свойство указано правильно, это должен быть точный абсолютный путь, например:

<manifest
    package="com.my.absolute.package.path"
    xmlns:android="http://schemas.android.com/apk/res/android">...</manifest>

теперь, когда у вас есть правильный абсолютный путь, указанный в вашей <manifest .../> раздел, вам нужно будет использовать относительный путь для всех <application .../>, <activity .../>, <receiver .../> и <service .../>'s, определяемым в AndroidManifest.xml.

примеры:

<application
    android:name=".BaseApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".activity.SomeActivity"
        android:configChanges="orientation"
        android:label="@string/app_name"
        android:parentActivityName=".activity.ParentActivity"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activity.ParentActivity"/>
    </activity>

    <activity
        android:name=".activity.MyActivity"
        android:configChanges="orientation"
        android:label="@string/app_name"
        android:parentActivityName=".activity.ParentActivity"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme"
        />

    <receiver
        android:name=".receivers.MyReceiver"
        android:enabled="true"
        android:exported="false">
    </receiver>

    <service
        android:name=".services.MyService"
        android:enabled="true"
        android:exported="false"
        />
</application>

конечно, также быть обязательно очистите проект.


иногда, когда мы генерируем подписанный файл apk, если у нас есть проблема с библиотекой зависимостей(дубликат библиотеки jar), эта ошибка может произойти. Проверьте путь сборки и удалите дубликат библиотеки и проверьте, не проверена ли какая-либо библиотека на вкладке заказ и экспорт.


причина в том, что android не может найти конкретную активность в dexpath.

поэтому мы должны предоставить весь путь действий в "файле манифеста".

например, ваше имя действия - "SplashActivity", и оно есть в " com.имя_пакета.пакет." Поэтому мы должны предоставить полное имя пакета этой деятельности.

com.packagename.package.SplashActivity

У меня была похожая проблема, вот мое решение:

  1. измените имя приложения в AndroidManifest на полный путь
  2. Очистить Проект
  3. Перестроить Проект
  4. построить APK

добавил

compile "com.android.support:support-core-utils:25.3.1"
compile 'com.android.support:support-v4:25.3.1'

Я получил аналогичную ошибку после изменения имени каталога, просто переименовав имя каталога и импортировав. Не в состоянии установить больше. Ни повторно включить отладку USB, ни перестроить работу проекта.

Я решаю его, создав новый проект и вручную скопируйте весь соответствующий контент в новый проект.