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.access$800(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, я сделал то же самое в версии pro, и ничего не выбрасывается. Это работает так, как ожидалось.
Единственное отличие между pro и lite заключается в том, что я интегрировал Admob (по-новому) в облегченной версии и лицензии Google Play в про версии. Но это я интегрировал с самого начала и не внес изменения в это.
Я также не внес никаких изменений в манифест, я прочитал много сообщений здесь, но ничего не помогает.
Похоже, что это происходит в версиях Android с 5.0. Может ли кто-нибудь понять, что эта проблема может вызвать или имеет кого-то одно и то же? Возможно ли, что proguard просто уничтожил что-либо, запутывая (также здесь, никаких изменений)?
Я не написал код, потому что это не важно для этой проблемы, например, я сказал, что не сделал изменений, связанных с этим исключением.
Этот вопрос отмечен как дубликат, но он не является. Комментарий со ссылкой не исправляет мою проблему, все библиотеки проверяются и интегрируются правильно. Кроме того, я не использую NDK.
Ответы
Ответ 1
Update
Спустя долгое время выяснилось, что это должно иметь какое-либо отношение к proguard. Я не могу сказать, что именно вызывает ошибка, но я немного попробовал, и это то, что я заметил (это в моем случае с Eclipse IDE):
- Мне нужно закрыть каждую вкладку из проекта, который я хочу подписать
- Мне нужно очистить проект и после очистки ничего не делать, кроме экспорта apk
- внесение небольшого изменения в манифест, сохранить его и отменить изменение (и сохранить)
- если в манифесте есть какой-либо класс с именем "YourClass" или ".YourClass", измените его на "com.yourpackage.yourClass"
Это четыре момента, которые я сделал, и затем это сработало. Это выглядит подозрительно, но я думаю, что есть проблема с запутыванием. Потому что, не делая этих точек, я могу просто скомпилировать свой apk и установить его из eclipse. Для меня нет очевидной причины такого поведения.
Кроме того, имя пакета работает без изменений, если я его установлю только из eclipse.
Надеюсь, эти моменты помогут кому-то.
Ответ 2
Если вы укажете имя пакета в порядке,
Если вы завершите проект,
и в файле explorer переименован ваш проект
но после импорта одного из них вы снова сталкиваетесь с этой проблемой
единственный способ здесь -
УДАЛИТЬ, ЧТО FOLDER .gradle.
Этот файл можно найти в папке проекта с помощью проводника файлов.
Он имеет файлы артефактов, которые содержат это старое название проекта.
После повторного открытия проекта в Android Studio папка будет воссоздана автоматически.
Ответ 3
Я только что изменил свой gradle с com.android.tools.build:gradle:2.2.2 на com.android.tools.build:gradle:2.2.0, и проблема в порядке!
Ответ 4
Для меня это произошло, когда было изменено имя пакета (имя каталога).
Я понял, что папка "build" волшебным образом поддерживает промежуточные файлы для сборки проекта. Я удалил папку "build" в папке "app" . Теперь gradle пришлось переделать все файлы с новым именем пакета. Теперь он работает правильно.
Ответ 5
Я думаю, что это имеет какое-то отношение к multidex и нескольким именам пакетов, если у вас несколько модулей. Очистите проект и удалите все сборки/папки.
Ответ 6
Иногда, когда мы создаем подписанный файл apk, если у нас есть проблема с библиотекой зависимостей (дублировать библиотеку jar), тогда эта ошибка может произойти. Проверьте путь сборки и удалите дублируемую библиотеку и проверьте, не проверена ли какая-либо библиотека на вкладке "Экспорт" и "Экспорт".
Ответ 7
Я получал схожую ошибку.
я получил решение здесь.
Если ваш файл манифеста не является правильным, следуйте этим
Ответ 8
tl; dr: Это, по-видимому, вызвано сочетанием как относительного, так и абсолютного объявления в AndroidManifest.xml
. Я считаю, что лучшим решением является использование относительных обозначений при объявлении <application .../>
, <activity .../>
, <receiver .../>
и <service .../>
в AndroidManifest.xml
.
Полное объяснение:
У меня была эта проблема для TOO LONG, потому что я использовал как абсолютные, так и относительные объявления <application .../>
, <activity .../>
, <receiver .../>
и <service .../>
в моем AndroidManifest.xml
. Вот что я сделал, чтобы исправить это:
В AndroidManifest.xml
убедитесь, что в разделе <manifest .../>
указано свойство package:
, указанное правильно, оно должно быть точным абсолютным путем, например:
<manifest
package="com.my.absolute.package.path"
xmlns:android="http://schemas.android.com/apk/res/android">...</manifest>
Теперь, когда у вас есть правильный абсолютный путь, указанный в разделе <manifest .../>
, вам нужно будет использовать относительный путь для всех <application .../>
, <activity .../>
, <receiver .../>
и <service .../>
, определенных в вашем 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>
Конечно, также обязательно очистите проект.
Ответ 9
Причина в том, что андроид не смог найти конкретную активность в dexpath.
Итак, мы должны предоставить весь путь действий в "файле манифеста".
например, ваше имя активности - "SplashActivity", и оно присутствует в "com.packagename.package". Поэтому мы должны предоставить полное имя пакета этого действия.
com.packagename.package.SplashActivity
Ответ 10
У меня была аналогичная проблема, здесь мое решение:
- Измените имя приложения в AndroidManifest на полный путь
- Очистить проект
- Проект перестройки
- Сборка APK
Ответ 11
Я добавил
compile "com.android.support:support-core-utils:25.3.1"
compile 'com.android.support:support-v4:25.3.1'
Ответ 12
Я получил аналогичную ошибку после изменения имени моего каталога, просто переименуя имя каталога и импорт. Не удалось установить больше. Ни повторная активация USB-отладки, ни восстановление проекта не выполняются.
Я решаю его, создавая новый проект и вручную копируя весь соответствующий контент в новый проект.