java.lang.ClassNotFoundException: no se encontró la clase en la ruta: dexpathlist


139

Actualmente estoy trabajando en un proyecto en el que tengo que usar ndk puramente nativo. Funcionó cuando intento ejecutar un ejemplo de helloworld desde la fuente del motor Irrlicht. Luego trato de usarlo en mi proyecto siguiendo el mismo formato de ese ejemplo. Pero tengo:

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]]

mientras ejecuto mi proyecto.

Aquí está mi archivo 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");
}

#terminara si

en 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)

Y he dado el nombre de la actividad en 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" />                     

¿Cuál es el error que estoy haciendo aquí? Publicaré el código completo si es necesario.


1
¿Estás utilizando algún archivo jar externo?
Siddharth_Vyas

@SiddharthVyas No, no estoy usando archivos jar externos en esto.
Karthik Sivam

1
¿Su aplicación es multi-dexed? Si es así, eso explica el problema.
IgorGanapolsky

cuando hice un apk firmado, este error no sucedió. solo debug
j2emanue

¿Encontraste una solución que funcione?
Benobab

Respuestas:


84

Intenté todas las opciones posibles pero el resultado es cero. Finalmente encontré la solución correcta que es útil para mí. Simplemente deshabilite la Ejecución instantánea Vaya a Archivo -> Configuración -> Compilación, Ejecución, Implementación -> Ejecución instantánea -> Desmarque la casilla de verificación para la ejecución instantánea . Ejecute su aplicación una vez y este archivo apk funciona correctamente.


11
Esta es la respuesta correcta para Android Studio. No puedo creer que Instant Run siga teniendo tantos errores que hay que apagarlo para evitar sorpresas desagradables ...
Ognyan

2
¡He estado buscando esta respuesta durante días, incluso semanas! Aunque no es crítico, este problema ha estado en el fondo de mi mente, sin darme paz. Nunca pensé que la carrera instantánea fue la que provocó esto. Mi aplicación funcionó bien cuando se lanzó a través de adb, pero siempre se bloqueó con la expulsión de tiempo de ejecución de ClassNotFound cuando la instalé manualmente a través de apk.
Răzvan Barbu

55
Esa no es la solución para mí. Había deshabilitado la ejecución instantánea
Terranology

Después de deshabilitado las opciones. Reinicie su estudio de Android
Ashik Abbas

Dios mío, no sé por qué la ejecución instantánea es la culpable, pero de hecho lo es, gracias amigo.
KingKongCoder

63

Tuve un problema similar, aquí está mi solución:

  1. Haga clic derecho en su proyecto y seleccione Propiedades .
  2. Seleccione Java Build Path en el menú de la izquierda.
  3. Seleccione la pestaña Orden y Exportar .
  4. De la lista, asegúrese de que las bibliotecas o los frascos externos que agregó a su proyecto estén marcados .
  5. Finalmente, limpia tu proyecto y ejecuta.

También puede verificar esta respuesta.


1
Esta es la solución correcta a la pregunta. He probado esto con mi juego libgdx con los mismos errores encontrados que el anterior. Encontré estos errores al usar el registro generado con mi teléfono (samsung galaxy S6). Una vez que apliqué esta solución, se resolvieron todos mis problemas.

25
No puedo encontrar Propiedades con el botón derecho del proyecto. Puede ser que soy estúpido. :(
Zin Min

12
Tampoco puedo encontrar propiedades, nadie sabe cómo navegar a la página que aparece en la lista
Skyler

9
Esta es una solución para el IDE de Eclipse. No hay un archivo 'project.properties' predeterminado en Android Studio. Sin embargo, se puede crear.
Bot

La solución proporcionada solo es aplicable para Eclipse IDE.
mnsalim

47

Esto parece ser un problema en su caso. La ruta relativa de su actividad en manifiesto no es correcta:

<activity android:name="android.app.POMActivity"

reemplace esto con:

<activity android:name=".POMActivity"

o

<activity android:name="com.irrlicht.example1.POMActivity"

31

La eliminación de la aplicación en el dispositivo y la limpieza del proyecto me funcionan


2
Esto funcionó para mí también con reaccionar nativo. Abrí la carpeta de Android con Android Studio y luego construí -> proyecto limpio. Reconstruido conreact-native run-android
pinguinos

Hizo lo mismo que el comentario anterior y funcionó! Gracias !
Elegya

24

Debería entender el problema con solo ver

errores dex

Pero tardó medio día en solucionar el problema.
Arreglo esto siguiendo las instrucciones de la página de desarrolladores de Android: https://developer.android.com/studio/build/multidex.html

Primero agregue esto al archivo gradle.build:

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}

 dependencies {
     compile 'com.android.support:multidex:1.0.0'
 }

Luego, extienda la clase de aplicación con la MultiDexApplicationclase como se indica en el enlace anterior (o declare la clase de aplicación AndroidManifest.xmlo anule la attachBaseContext()función si no es posible extender la clase de aplicación).

Eso es todo y resolvió el problema.


1
Agregar multi-dex es útil solo cuando pasa el límite de recuento de referencia (56k), y es muy inestable y poco confiable antes de Lollipop. Esto debería usarse para solucionar problemas como último recurso.
milosmns

entonces, ¿cuál debería ser la solución según usted
Akash Bisariya

Solo digo que multi-dex causa más problemas de los que ayuda, lo cual se afirma claramente en el sitio web del desarrollador. No estaría aquí buscando una respuesta si tuviera una, ¿verdad?
milosmns

1
Ok, gracias por la información. Actualice aquí si encuentra una buena solución, sería de gran ayuda.
Akash Bisariya

2
Agregar la línea en las dependencias anteriores lo hizo por mí.
gadildafissh

23

Simplemente pruebe Clean Project & Rebuild Project .


1
En el menú "Construir". Seleccione Build -> Clean Project y luego Build -> Rebuild Project
kangkyu

Esto implicaría que la aplicación solo se bloquea localmente, pero el bloqueo también se produce en una versión de lanzamiento, por lo que esta no es realmente una solución.
David

22

Esta excepción también puede ocurrir cuando tiene una vista personalizada en su diseño como esta:

<com.example.MyView
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

y cambia el nombre del paquete de la vista de "com.example" a algo diferente, pero también olvida cambiarlo en el diseño.


Esto fue útil por una razón diferente. Corrige tu ortografía. Tenía un nombre de clase mal escrito que causaba el problema original.
Berry Wing


12

Lo resolví usando: ./gradlew --stopcomando en la terminal de Android Studio. Después de ejecutar este comando, limpie y reconstruya el proyecto.


11
  1. eliminar la carpeta bin
  2. cambiar el orden de las bibliotecas
  3. limpiar y reconstruir

trabajó para mi.


10

Para cualquiera que tenga habilitado multidex, escriba esto

dentro de 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'
}

escribe una clase EnableMultiDexcomo abajo

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();

    }
}

y en AndroidManifest.xmlescribir este className dentro de la etiqueta Aplicación

 <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">

¿Cómo enableMultiDexafecta? En mi caso javaMaxHeapSize "4g"no ayudó.
CoolMind

@CoolMind Es solo una clase de aplicación que se extiende MultiDexApplication. Es necesario si desea utilizar multidex
Manohar Reddy

De acuerdo. Yo uso cualquiera MultiDexApplicationo attachBaseContext(vea developer.android.com/studio/build/multidex ).
CoolMind

8

Enfrenté este problema varias veces y todos se resolvieron deshabilitando la ejecución instantánea .


Intenté múltiples soluciones, esta pequeña cosa resolvió el problema, ¡increíble!
FraK

@FraK, la solución más valorada contiene este consejo. Aunque ya había desmarcado Instant Run (varios años ha traído muchos errores).
CoolMind

7

No necesitamos tener una clase de aplicación personalizada que extienda MultiDexApplication . En cambio, podemos tener esto en 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">

Y junto con esto en build.gradle (Módulo: aplicación),

defaultConfig {
      ...

      // Enabling multidex support.
      multiDexEnabled true
}

dependencies {
     ... 
     compile 'com.android.support:multidex:1.0.2'
}

Gracias.


Cambiar el nombre de la aplicación funcionó para mí cuando intentaba ejecutar la aplicación en Android 4.3
h8pathak

6

Cuando esté usando multidex, intente extender su clase de aplicación con MultiDexAppication en lugar de Application y anule el siguiente método que se requiere para Android por debajo de 5.0 (porque 5.0 y superior admite el multidex)

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

y en dependencias agregue esto

compile 'com.android.support:multidex:1.0.1'

Deberíamos anular este método si nos extendemos desde Application. ¿Por qué deberíamos anular en un caso de MultiDexAppication?
CoolMind

4

Simplemente cambie el nombre de su carpeta de liba libs,

Luego verá algunas marcas de error en su proyecto, para resolver este derecho Haga clic en proyecto>

Properties > Java Build Path > libraries :

Elimine toda la biblioteca con marcas rojas y apply > ok >luego limpie su proyecto . TADA ve la magia :)


el nombre de la carpeta es solo libs
Killer

4

En mi caso, este problema surgió debido a Kotlin. En mi código existente había una clase escrita en Kotlin. Construí la aplicación, se instaló y tan pronto como se abrió la primera actividad, la aplicación se bloqueó. en el logcat se mostraba este error. Luego actualicé mi versión de Kotlin del sitio web de Kotlin en el archivo gradle de la aplicación. Construya la aplicación nuevamente y funcionó bien entonces.


Wow, tengo un proyecto de 99% de Kotlin ¿Qué hacer? :)
CoolMind

¿Puede verificar? La versión de Kotlin es compatible con su Android Studio subyacente. Es solo una suposición. echa un vistazo
Harry .Naeem

Tengo AS 3.3.1 y Kotlin 1.3.21. Son los últimos estables. Lo siento, supongo, todas las soluciones descritas arriba y abajo no son adecuadas para mi situación.
CoolMind

4

Una posible razón sería la ruta incorrecta de la actividad en el archivo Apps AndroidManifest.xml. Registre la actividad en su AndroidManifest.xml con la ruta relativa completa como se muestra a continuación.

<activity android:name="<full_path>.ActivityName" />

3

Después de probar las respuestas dadas, descubrí otra razón para la misma excepción, que tuve que agregar la biblioteca que estoy usando manualmente a mi biblioteca principal a través de

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

antes de esta solución, utilicé la "Configuración del proyecto Fix" desde el archivo .java en eclipse, pero esto no funcionó, así que tuve que agregarlo manualmente aquí y funcionó


3

Estaba recibiendo este bloqueo solo en dispositivos Samsung Lollipop y esta solución funcionó para mí.

dexOptions {
     preDexLibraries false
}

Estoy publicando esta respuesta aquí porque esta pregunta es actualmente el resultado de búsqueda mejor clasificado en Google para este bloqueo y ninguna de las respuestas anteriores funcionó para mí.


No me ayudó (Samsung Galaxy S4, Android 5.0.1).
CoolMind

2

La siguiente solución funcionó para mí ...

Intenté todo lo mencionado anteriormente pero aún no pude ejecutar mi aplicación. Tengo una aplicación nativa que se ejecuta en la última versión de gradle 4+ y android studio.

Tuve el problema donde si ejecuto react-native run-android estaba fallando con el problema que decía que no podía encontrar la clase MainApplication ... es decir, ClassNotFoundException

Pude resolver el problema cuando actualicé mi gradle.properties para usar el compilador D8.

Yo añadí:

android.enableD8 = true

a mi gradle.properties

Detalles del documento aquí: https://android-developers.googleblog.com/2017/08/next-generation-dex-compiler-now-in.html


1
Android Studio 3.1+ utiliza este compilador dex de forma predeterminada
Lennon Spirlandelli

2

La respuesta de Ashik abbas (deshabilitar Instant Run ) funciona para mí, pero necesito Instant Run , finalmente encontré una solución que me fue útil. solo deshabilita minifyEnabled . vaya a build.gradle (Módulo: aplicación) en el bloque de depuración y desactive minifyEnabled :

debug {
            minifyEnabled false

        }

1

Según tengo entendido, recibo el problema después de actualizar Android Studio 2.1 a 2.3 debido a la función instantánea que mi aplicación no se ejecutará cuando copie el apk de la salida y lo coloque en la tarjeta SD. Para este problema, construyo el apk desde la opción de compilación do build apk en el estudio de Android.


1

Si está habilitado minifyEnabledy shrinkResourcesverdadero en el archivo gradle de su aplicación. Necesita agregar la siguiente línea en el proguard-rules.proarchivo

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

porque la minificación se elimina algunas clases importantes en nuestro archivo apk.


Esta no es una buena solución porque excluye todos sus archivos de origen de la reducción de recursos. Solo excluya solo los archivos que son realmente necesarios, de lo contrario, inflará el tamaño de su apk.
Yannick

1

Tuve este problema antes y los comentarios aquí ayudaron en el pasado, pero esta vez no. he comprobado la configuración de mi Proguard y me quité las siguientes líneas y luego se trabajó de manera Proguard puede tener algo que ver con este error:

 -optimizationpasses 5
        -overloadaggressively
        -repackageclasses ''
        -allowaccessmodification
        -dontskipnonpubliclibraryclassmembers

1

En mi caso, utilicé la antigua biblioteca de espacio de nombres mientras mi proyecto se configuraba utilizando androidx one.

La solución fue la de sustituir android.support.design.widget.BottomNavigationViewcomponentes con el más adecuado para escapar de la biblioteca de soporte: com.google.android.material.bottomnavigation.BottomNavigationView.


1

en mi caso, defino la Actividad en Manifest.xmly olvidé crear alguna activity. ¡Así que creé Activity y lo definí manifesty mi error se resolvió!



0

Para mí, el problema apareció después de crear un APK firmado. Para solucionarlo, generé un nuevo apk de depuración usando Run / Build APK. Después de eso, Run (cmd + r) funciona nuevamente sin este error.


0

Estaba enfrentando el mismo problema. Intenté todo lo posible por un día, pero nada funcionó. La dependencia que estaba causando el problema era usar sdk de compilación inferior, sdk de destino y sdk min. Creé un módulo de biblioteca para el proyecto, copié todas las fuentes y comparé las versiones de SDK con las versiones de SDK de la aplicación. Y finalmente funcionó a las mil maravillas.


0

Tuve el mismo error y algunas respuestas me confunden en un tema de novato. Tenía el paquete incorrecto en mi descriptor de vista personalizada como a continuación. Espero que ayude a alguien.

<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" />
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.