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
У меня была похожая проблема, вот мое решение:
- измените имя приложения в AndroidManifest на полный путь
- Очистить Проект
- Перестроить Проект
- построить APK
добавил
compile "com.android.support:support-core-utils:25.3.1"
compile 'com.android.support:support-v4:25.3.1'
Я получил аналогичную ошибку после изменения имени каталога, просто переименовав имя каталога и импортировав. Не в состоянии установить больше. Ни повторно включить отладку USB, ни перестроить работу проекта.
Я решаю его, создав новый проект и вручную скопируйте весь соответствующий контент в новый проект.