Java.lang.ClassNotFoundException: Не нашел класс на пути: dexpathlist
В настоящее время я работаю над проектом, в котором я должен использовать исключительно собственный ndk. Он работал, когда я пытаюсь запустить пример helloworld из источника двигателя Irrlicht. Затем я пытаюсь использовать его в своем проекте, следуя тому же формату этого примера. Но я получил:
03-14 01:40:05.308: E/AndroidRuntime(799): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.irrlicht.example1/android.app.POMActivity}: java.lang.ClassNotFoundException: Didn't find class "android.app.POMActivity" on path: DexPathList[[zip file "/data/app/com.irrlicht.example1-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.irrlicht.example1-2, /system/lib]]
во время запуска моего проекта.
Вот мой файл main.cpp:
#include <android/log.h>
#include <jni.h>
#include <android_native_app_glue.h>
#include "android_tools.h"
#ifdef _IRR_ANDROID_PLATFORM_
void android_main(android_app* app)
{
__android_log_print(4 , "pom" , "nothing");
}
#endif
в Android.mk:
LOCAL_PATH := $(call my-dir)/..
IRRLICHT_PROJECT_PATH := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := Irrlicht
LOCAL_SRC_FILES := /home/karthik/Android/Essentials/ogl-es/lib/Android/libIrrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloWorldMobile1
LOCAL_CFLAGS := -D_IRR_ANDROID_PLATFORM_ -pipe -fno-exceptions -fno-rtti -fstrict-aliasing
LOCAL_C_INCLUDES := -I ../../include -I /home/karthik/Android/Essentials/ogl-es/include -I /home/karthik/Android/json/jsoncpp-src-0.5.0/libs/linux-gcc-4.8 -I /home/karthik/Android/json/jsoncpp-src-0.5.0/include/json
LOCAL_SRC_FILES := android_tools.cpp main.cpp
LOCAL_LDLIBS := -lEGL -llog -lGLESv1_CM -lGLESv2 -lz -landroid -ldl
LOCAL_STATIC_LIBRARIES := Irrlicht android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
И я дал имя Activity в AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.irrlicht.example1"
android:versionCode="1"
android:versionName="1.0">
...
<application android:icon="@drawable/irr_icon" android:label="HelloWorldMobile1" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true">
<activity android:name="android.app.POMActivity"
android:label="HelloWorldMobile1"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:clearTaskOnLaunch="true">
<meta-data android:name="android.app.lib_name" android:value="HelloWorldMobile1" />
Какая ошибка я здесь делаю? Я буду публиковать полный код, если это возможно.
Ответы
Ответ 1
Я пробовал все возможные варианты, но результат равен нулю. Наконец, я нашел правильное решение, которое мне полезно. Просто перейдите в режим "Мгновенный запуск" Перейти к Файл → Параметры → Сборка, выполнение, развертывание → Мгновенный запуск → Снимите флажок для мгновенного запуска. Запустите приложение один раз, и этот файл apk работает правильно.
Ответ 2
У меня была аналогичная проблема, здесь мое решение:
- Щелкните правой кнопкой мыши на своем проекте и выберите Свойства.
- Выберите Путь сборки Java в меню слева.
- Выберите вкладку Заказ и Экспорт.
- В списке убедитесь, что отмечены библиотеки или внешние банки, добавленные в проект.
- Наконец, очистите проект и запустите.
Вы также можете проверить этот ответ.
Ответ 3
Это, кажется, проблема в вашем случае. Относительный путь вашей активности в манифесте неверен:
<activity android:name="android.app.POMActivity"
замените это на:
<activity android:name=".POMActivity"
или
<activity android:name="com.irrlicht.example1.POMActivity"
Ответ 4
Я должен понять проблему, просто увидев
ошибки dex
Но для решения проблемы потребовалось полдня.
Я исправляю это, следуя инструкции на странице разработчиков Android:
https://developer.android.com/studio/build/multidex.html
Сначала добавьте это в файл gradle.build:
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
Затем расширьте класс Application классом MultiDexApplication
, как указано в приведенной выше ссылке (или объявите класс приложения в AndroidManifest.xml
или переопределите функцию attachBaseContext()
, если невозможно расширить класс приложения).
Это все и решило проблему.
Ответ 5
Удаление приложения на устройстве и очистка проектных работ для меня
Ответ 6
Это исключение может также возникать, если в вашем макете пользовательский вид выглядит следующим образом:
<com.example.MyView
android:layout_width="match_parent"
android:layout_height="match_parent" />
и вы измените представление представления из "com.example" на что-то другое, но вы также забудете изменить его в макете.
Ответ 7
Я решил это, используя команду ./gradlew --stop
в терминале android studio. После выполнения этой команды очистите и перестройте проект.
Ответ 8
Просто попробуйте Очистить проект и Перестроить проект.
Ответ 9
- удалить папку с папкой
- изменить порядок библиотек
- очистить и перестроить
работал у меня.
Ответ 10
Для любого, у кого есть поддержка 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">
Ответ 11
Если проект компилировался непосредственно перед этим, вы можете попытаться очистить кеш, используя:
./gradlew clean
или же
./gradlew cleanBuildCache
или для окон
gradlew cleanBuildCache
https://developer.android.com/studio/build/build-cache.html
Ответ 12
Я сталкивался с этой проблемой несколько раз, и все они были решены отключением Instant Run.
Ответ 13
Просто очистите свой проект. Меня устраивает.
Ответ 14
Когда вы используете multidex, попробуйте расширить класс приложения с помощью MultiDexAppication вместо приложения и переопределить ниже метод, который требуется для Android ниже 5.0 (поскольку поддержка 5.0 и выше для мультидекса)
@Override
protected void attachBaseContext(Context base)
{
super.attachBaseContext(base);
MultiDex.install(BaseApplication.this);
}
и в зависимостях добавьте это
compile 'com.android.support:multidex:1.0.1'
Ответ 15
Нам не нужно настраивать класс Application, который расширяет MultiDexApplication. Вместо этого мы можем иметь это на AndroidManifest.xml
<application
android:name="android.support.multidex.MultiDexApplication"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
И вместе с этим на build.gradle (Модуль: приложение),
defaultConfig {
...
// Enabling multidex support.
multiDexEnabled true
}
dependencies {
...
compile 'com.android.support:multidex:1.0.2'
}
Благодарю.
Ответ 16
Просто измените имя своей папки с lib
на libs
,
Затем вы увидите некоторые ошибки в своем проекте, чтобы разрешить этот rightClick в проекте >
Properties > Java Build Path > libraries
:
Удалите всю библиотеку с красными метками на ней, затем apply > ok >
после этого очистите проект. TADA видит магию:)
Ответ 17
после того, как я попробовал данные ответы, я выяснил еще одну причину того же Исключения, что мне пришлось добавить библиотеку, которую я использую вручную в свою основную библиотеку через
Right click on my main library >
Properties >
Android >
Go to the very bottom of the screen and click (Add) >
Select my other library that caused the crash >
Apply
до этого решения я использовал "Fix Project setup" изнутри .java файла в eclipse, но это не сработало, поэтому мне пришлось добавить его вручную здесь, и он работал
Ответ 18
Я получал этот сбой только на устройствах Samsung Lollipop, и это решение работало для меня.
dexOptions {
preDexLibraries false
}
Я публикую этот ответ здесь, потому что этот вопрос в настоящее время является самым высоким результатом поиска в Google для этого сбоя, и ни один из приведенных выше ответов не помог мне.
Ответ 19
В моем случае эта проблема возникла из-за Котлина. В моем существующем коде был класс, который был написан Kotlin. Я собрал приложение, оно установилось и, как только открылось первое действие, приложение рухнуло. в logcat эта ошибка была показана. Затем я обновил свою версию Kotlin с веб-сайта Kotlin в файле приложения gradle. Снова создайте приложение, и тогда оно работало нормально.
Ответ 20
Следующее решение сработало для меня...
Я попробовал все, что упомянуто выше, но все еще не запустил свое приложение. У меня есть приложение-родное приложение, работающее на последней версии Gradle 4+ и Android Studio.
У меня была проблема, при которой, если я запускаю реактив-нативный запуск-android, он терпел неудачу с проблемой, говоря, что он не может найти класс MainApplication... т.е. ClassNotFoundException
Мне удалось решить эту проблему, когда я обновил свои gradle.properties для использования компилятора D8.
Я добавил:
android.enableD8 = TRUE
к моему gradle.properties
Подробности документа здесь: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html
Ответ 21
Если вы включили minifyEnabled
и shrinkResources
в значение true в файле приложения вашего приложения. Вам нужно добавить следующую строку в файл proguard-rules.pro
-keep class com.yourpackage_name. ** {*; }
потому что минификация удалена некоторые важные классы в нашем файле apk.
Ответ 22
Если вы получили эту ошибку после удаления некоторой зависимости gradle, проверьте свой манифест и убедитесь, что вы удалили все записи, соответствующие этой зависимости.
Ответ 23
В соответствии с моим недоумением я получаю эту проблему после установки версии 2.1 для Android версии 2.1 до 2.3 из-за мгновенной функции, которую мое приложение не запускает, когда я копирую apk из вывода и помещаю его в SD-карту.
Для этой проблемы я создаю apk из опции сборки make build apk в студии android.
Ответ 24
У меня была эта проблема раньше, и комментарии здесь помогли в прошлом, но на этот раз это не так. Я проверил свою конфигурацию ProGuard и удалил следующие строки, после чего она сработала, поэтому ProGuard может иметь отношение к этой ошибке:
-optimizationpasses 5
-overloadaggressively
-repackageclasses ''
-allowaccessmodification
-dontskipnonpubliclibraryclassmembers
Ответ 25
У меня была та же самая ошибка, и некоторые ответы вводят меня в заблуждение относительно проблемы новичка. У меня был неправильный пакет в моем дескрипторе пользовательского представления, как показано ниже. Надеюсь, это кому-нибудь поможет.
<com.my.app.wrong.package.MyActivity
android:id="@+id/myActivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="8dp"
android:gravity="left" />
Ответ 26
Ответ Ашика Аббаса (отключить Мгновенный Бег) работает на меня, но мне нужен Мгновенный Бег, в конце концов я нашел решение, которое полезно для меня. просто отключите minifyEnabled. перейдите к build.gradle(Module: app) в блоке отладки и отключите minifyEnabled:
debug {
minifyEnabled false
}
Ответ 27
В моем случае я использовал старую библиотеку пространств имен, в то время как мой проект был настроен с использованием androidx.
Решением было заменить компонент android.support.design.widget.BottomNavigationView
подходящим для выхода из библиотеки поддержки: com.google.android.material.bottomnavigation.BottomNavigationView
.
Ответ 28
Для меня проблема появилась после того, как я создал подписанный APK. Чтобы исправить это, я сгенерировал новый отладочный apk с помощью Run/Build APK. После этого Run (cmd + r) снова работает без этой ошибки.
Ответ 29
Я столкнулся с той же проблемой. Я перепробовал все возможное за день, но ничего не получалось. Зависимость, которая вызывала проблему, использовала нижнюю компиляцию sdk, target sdk и min sdk. Я создал библиотечный модуль для проекта, скопировал все исходники и сопоставил версии SDK с версиями SDK приложения. И наконец это сработало как шарм.
Ответ 30
Вы также можете видеть, что класс не найден, когда Unmarshalling Android Intent Parcelable или Android E/Parcel ﹕ Класс не найден, когда unmarshalling (только на Samsung Tab3), но никакие советы из этих тем мне не помогли. Я даже переписал класс для продажи.