Android ClassNotFoundException: no se encontró la clase en la ruta


97
10-22 15:29:40.897: E/AndroidRuntime(2561): FATAL EXCEPTION: main
10-22 15:29:40.897: E/AndroidRuntime(2561): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gvg.simid/com.gvg.simid.Login}: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.os.Looper.loop(Looper.java:137)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.main(ActivityThread.java:5103)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invokeNative(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.reflect.Method.invoke(Method.java:525)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.NativeStart.main(Native Method)
10-22 15:29:40.897: E/AndroidRuntime(2561): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.gvg.simid.Login" on path: DexPathList[[zip file "/data/app/com.gvg.simid-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.gvg.simid-1, /vendor/lib, /system/lib]]
10-22 15:29:40.897: E/AndroidRuntime(2561):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-22 15:29:40.897: E/AndroidRuntime(2561):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
10-22 15:29:40.897: E/AndroidRuntime(2561):     ... 11 more

No estoy realmente seguro de qué lo está causando, ya que se enumera correctamente en el manifiesto:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gvg.simid"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.READ_OWNER_DATA" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <uses-feature android:name="android.hardware.usb.host" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.gvg.simid.Login"
            android:label="@string/app_name" 
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

También agregué "Bibliotecas privadas de Android" para crear la ruta y la moví a la parte superior de "Ordenar y exportar", pero aún así me dio el mismo error.

EDITAR: reconstruí el proyecto por completo y no pude reproducir el error. No estoy seguro de qué lo estaba causando.


2
estás usando proguard?
Juangcg

Proguard no está habilitado.
Phito

Consulte esta publicación: stackoverflow.com/questions/10866431/…
Juangcg

intente ".Login" en android: name en su lugar, Android agregará el resto del prefijo por sí mismo si no puede detectarlo. Podría ser un problema de análisis extraño con Eclipse
Darryl Bayliss

@Juangcg Leí esa publicación antes de hacer esta, pero desafortunadamente todo lo que intenté desde allí no funcionó.
Phito

Respuestas:


76

Tuve el mismo problema para mi proyecto. Ocurrió debido al conflicto en la versión de la biblioteca de soporte de Android entre mi proyecto y el proyecto de la biblioteca que agregué en mi proyecto. Coloque la misma versión de la biblioteca de soporte de Android en su proyecto y los proyectos de biblioteca que incluyó y compile limpio ... Todo funcionará ...


3
¡¡¡Gracias hombre!!! Estaba seguro de que ya lo había hecho, ¡pero lo comprobé y las versiones eran diferentes! ¡Muchas gracias!
Rodrigo Venancio

2
comento esto para recordar la próxima vez que "actualice" el sdk, mire esta respuesta
Enrique San Martín

1
¿Alguna idea de por qué ocurre el problema si no uso bibliotecas de soporte?
Budda

33

Este siguiente método funcionó para mí

  • Haga clic derecho en su projecty seleccioneproperties
  • Se abrirá el panel "Propiedades para". Desde el menú de la izquierda, vaya a Java Build Path->Order and Export
  • De la lista a continuación, desmarque la casilla junto a "Android Dependencies"
  • Finalmente clean your projecty corre

8
Eso funcionó para mí. ¿Cuál es el significado de "Dependencias de Android" y por qué ayudó en este caso particular?
Oleg Gryb

¡Funcionó perfectamente para mí! ¡Muchas gracias!
prajitdas

7
¿Son estas instrucciones para eclipse? No puedo seguir estas instrucciones para Android Studio. ¿Cuál es mi project? Qué significa eso?
Adam Johns

1
Sí, estas instrucciones son para eclipse
Chris

2
Este enlace tiene pasos para Android Studio stackoverflow.com/questions/18533054/…
Joseph Selvaraj

13

Para aquellos de ustedes que están teniendo este problema en Android de estudio, que tenía el mismo problema después de una fusión y por alguna razón que sea aún persistió después cleany invalidate cash/restartoperaciones que me estaba volviendo loca.

Resulta que se puede solucionar ejecutando gradle build una vez desde la línea de comandos. Simplemente ejecute lo siguiente en el directorio del proyecto:

./gradlew assemble clean
./gradlew assemble

Espero que le ahorre a alguien la pérdida de tiempo y la frustración por la que tuve que pasar.


También funcionó para mí
davedave

12

Tuve el mismo problema, esto funcionó para mí

1) Ruta completa de actividad en mainfest en lugar de ruta relativa.

2) Elimine la carpeta 'build' y limpie el proyecto.


Eliminar la carpeta de compilación funcionó para mí. Perdí algunas horas en este tema, gracias
Guy S

También funcionó para mí. Gracias.
Dushyant Suthar

Este es el verdadero negocio. XD
noob-Sci-Bot

9

Si está utilizando Eclipse, intente Proyecto -> Limpiar


Funciona para Android Studio - Limpiar / Reconstruir proyecto y ejecutar
frcake

8

Si agregó un nuevo Library Projectmódulo a su proyecto de Android y lo está usando Kotlinen su biblioteca , no olvide agregar

apply plugin: 'kotlin-android'

al principio del archivo Gradle de su módulo. Android Studio no agrega esta línea cuando creó un nuevo módulo y esto puede desperdiciar sus horas como yo.

Editar: Después de un tiempo, luché con este problema nuevamente y esta vez olvidé agregar mi módulo como una dependencia del proyecto. :)


Lo resolvió para mí y solo quería publicar una respuesta. ¿Quién pasa a la página dos sobre SO para encontrar una solución?
Kuno

Este problema ocurre cuando usamos el proyecto de biblioteca Java ... esta solución solucionó mi problema
Devrath

Esto me ayudó, gracias :)
Sreekanth Karumanaghat hace

7

Esto sucede si cambiamos Build Path de la APP, esto puede ser en cualquier caso Agregar o Eliminar o Cambiar Bibliotecas o archivo .jar. La mejor solución es reiniciar el Eclipse.


6

Si recibe este error mientras usa la nueva función Instant Run en Android Studio 2.0 y superior, entonces se trata de algún tipo de error de su lado.
Para solucionar este problema, tendrá que detener su aplicación manualmente en el dispositivo / emulador si no se detiene, luego seleccione desde Android Studio BuildRebuild Project.
Luego haga clic en el botón Ejecutar o MAYÚS + F10


6

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 a continuación

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 AndroidManifest.xmlescriba este className dentro de la etiqueta de la 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">

ohhhhh mahn ... respuesta perfecta ... vi esta respuesta pero nadie ha votado, así que descuidé esto y busqué respuestas votadas pero no funcionó ... finalmente probé esta y la obtuve, gracias mahn. :) :) :) :)
Sachin Varma

me alegro de haber ayudado :)
Manohar Reddy

2
El punto principal es extender la aplicación desde la MultiDexApplicationclase en lugar de Application.
VSB

Gracias. Ya tenía alguna Aplicación en Manifiesto. Se extendió MultiDexApplicationy la excepción desapareció en Android 4.4.
CoolMind

6

Si está utilizando Multidex en Android 4.4 y versiones anteriores, su problema podría ser que su clase de actividad esté ubicada en el segundo archivo dex y, por lo tanto, no la encuentre el sistema Android.

Para mantener su clase de actividad en el archivo dex principal, consulte esta página:

https://developer.android.com/studio/build/multidex.html#keep


Para encontrar qué clases se encuentran en un archivo dex, use Android Studio .

Simplemente arrastre y suelte su apk en Android Studio. Debería poder ver sus archivos dex en el explorador de apk.

Luego, seleccione el archivo dex para ver qué clases hay dentro.


otra alternativa es dexdump:

Puede verificar el contenido de sus archivos dex contenidos en su apk usando el comando dexdump que se puede encontrar en

android-sdk / build-tools / 27.0.3 / dexdump

Para los usuarios de Windows, vea esta herramienta que hice para facilitar el proceso


1
Cuando vincule su propia herramienta, asegúrese de declarar que la posee .
LW001

5

En mi caso, fue el proceso de minificación de proguard el que eliminó algunas clases importantes de mi apk de producción.

La solución fue editar el archivo proguard-rules.pro y agregar lo siguiente:

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

3

1) Cree la carpeta libs en la raíz del proyecto
2) Copie y pegue el archivo jar en él
3) Configure la ruta de compilación (Agregar jar)
4) Limpie y ejecute

cheers :-)


3

Créame o no ... Probé casi todas las respuestas que había encontrado aquí en stackoverflow. Nada ayudaría, hasta que reinicié la máquina. Mi Android Studio funciona en Ubuntu 16.04 LTS.


Lo mismo aquí, intente todo y reinicie siguiendo su comentario. Vi en mi salida una referencia a un nombre de clase refactorizado que "No se pudo encontrar" a pesar de que borré toda la carpeta de compilación ... recién iniciando Android
Alwin Kesler

2

Enfrenté este error una vez cuando definí una clase que extendía una vista pero se refería a esta vista personalizada en el archivo de diseño con el nombre incorrecto. En lugar de <com.example.customview/>, lo había incluido <com.customview/>en el archivo de diseño XML.


2

Enfrenté el mismo problema y lo resolví haciendo lo siguiente:

En el menú de construcción, seleccione

1- Proyecto limpio.

2- Construye APK.


Siempre paso horas buscando una solución en SO y resulta que Limpio -> Construir es todo lo que tenía que hacer.
Shishir Shetty

2

Encontré el mismo problema y me di cuenta de que el código de muestra estaba en el directorio "java" en lugar del directorio "src". Después de mover el código a src, se solucionó el problema.

También asegúrese de que el directorio de la aplicación esté dividido en varias carpetas. p.ej/main/com/site/appname/ no/main/com.site.appname/

Espero que funcione ~


¡Clavaste el problema que tenía en la cabeza! No dormir lo suficiente, ni siquiera me di cuenta de que las clases estaban en la carpeta de Java :)
bran.io

2

Enfrento el mismo problema, y ​​después de mucho trabajo y búsqueda, descubrí la solución: simplemente limpié el proyecto y luego construí la apk. -Build-> Clean Project -Build-> Build APK (s) Espero que sea útil .....


1

Tuve este problema recientemente y estoy usando Android Studio 0.8.4

El problema fue el hecho de que decidí cambiar el nombre de un archivo de diseño de menú XML que se llamó main.xml.

Haga clic derecho sobre él y elija Refactor -> Cambiar nombre . Antes de cambiarle el nombre, asegúrese de desmarcar "Buscar en comentarios y cadenas" y presione Refactor .

Debido a que mi archivo originalmente se llamaba 'principal' , cambió el nombre de las rutas críticas en app.iml y build.gradle, principalmente java.srcDirs en build.gradle, ya que la ruta se define como 'src/main/java'.

Espero que esto ayude a cualquiera que pueda estar experimentando este problema.


1

Tuve este problema después de actualizar desde la versión 18. Después de la actualización tuve lo siguiente: Project Build Target era 5.01, targetSDKVersion = 21

Pero: herramientas de compilación aún eran de Android 4.3.1 (18) Lo que noté fue que las aplicaciones que derivaban sus actividades de ActionBarActivity se bloquearon con el error anterior y las que aún no se ejecutaron.

Entonces, la solución simple fue usar las últimas herramientas de compilación del SDK de Android 21.1.2 lugar de solo las de las herramientas de compilación de SDK de Android 18, que de alguna manera parecen ser las predeterminadas.

Entonces, el culpable parece la biblioteca Appcompat, que utilizo para la compatibilidad con versiones anteriores de Actionbar.

Y, por cierto : usando la biblioteca appcompat tuve que configurar / arreglar: $SDKInstallDIR$\Android\android-sdk\extras\android\support\v7\appcompat\project.properties target=android-21(que se recomendó en alguna otra publicación útil y que tiene un valor de 19 por defecto))


1

Tuve el mismo problema en Windows. Había cambiado el nombre de la ruta del proyecto a algo que contenía un espacio.

Asegúrese de que la ruta a su proyecto no contenga un espacio.


¿De qué camino estás hablando?
Quality Catalyst

1

Solución mencionada aquí -> La solución Multidex Issue funcionó para mí. A continuación se muestra lo que se debe agregar al contexto de la aplicación:

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

0

Tuve este problema, planteado por varias causas, pero veo esto en su stacktrace " **Unable to instantiate activity ComponentInfo{...}: java.lang.ClassNotFoundException: Didn't find class "..." on path: DexPathList[[**", encontré una diferencia en mi .classpathantes de que deje de funcionar.

 <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

HE AÑADIDO la línea:

<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>

Esta es la versión final:

  <?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

¡Ahora funciona! =)


0

Tuve exactamente el mismo problema. Como sugirió @weiweia, mover el código del directorio java a src funcionó para mí. También eliminé las Dependencias de Android de Proyecto -> Propiedades -> Ruta de compilación de Java -> Ordenar y exportar, y me aseguré de incluir solo los proyectos de biblioteca en la pantalla de Android.


0

Tuve este problema durante bastante tiempo y, como todos los demás, las respuestas anteriores no se aplicaron a mi proyecto.

En mi proyecto, había vinculado un proyecto a mi proyecto y arrojaba ClassDefNotFoundError cada vez que se ejecutaba algún código para el otro proyecto.

Entonces esta fue mi solución. Fui a las propiedades del proyecto de mi proyecto y Java Build Path. Presioné la pestaña "Fuente" y el "vínculo fuente" de la carpeta src del otro proyecto a mi propio proyecto y nombré una nueva carpeta "core-src".

Espera que esta solución ayude a alguien


0

Tuve el mismo problema. Estoy usando Xamarin.Android.

El problema en mi caso fue que cambié el versionCode y versionName.

No tuve ningún problema cuando los puse así:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="pac.ka.ge" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">

El problema apareció cuando lo cambié a esto (versionCode 2 y versionName 0.0.1):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="0.0.1" android:installLocation="auto">

Solucioné el problema cambiando a versionCode 2 y versionName 1.0.0.1, así:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" pac.ka.ge " android:versionCode="2" android:versionName="1.0.0.1" android:installLocation="auto">

No estoy seguro de por qué esto fue un problema, tal vez a Android no le gusta un nombre de versión inferior con un código de versión superior

Encontré lo siguiente en http://developer.android.com/guide/topics/manifest/manifest-element.html#vname

android: versionCode Un número de versión interno. Este número se usa solo para determinar si una versión es más reciente que otra, y los números más altos indican versiones más recientes. Este no es el número de versión que se muestra a los usuarios; ese número lo establece el atributo versionName. El valor debe establecerse como un número entero, como "100". Puedes definirlo como quieras, siempre que cada versión sucesiva tenga un número mayor. Por ejemplo, podría ser un número de compilación. O puede traducir un número de versión en formato "xy" a un entero codificando la "x" y la "y" por separado en los 16 bits inferiores y superiores. O simplemente puede aumentar el número en uno cada vez que se lanza una nueva versión.

android: versionName El número de versión que se muestra a los usuarios. Este atributo se puede establecer como una cadena sin formato o como una referencia a un recurso de cadena. La cadena no tiene otro propósito que mostrarse a los usuarios. El atributo versionCode contiene el número de versión significativo utilizado internamente.


0

En caso de que alguien se enfrente al mismo problema que yo y ninguna respuesta sugerida aquí ayude.

Para mí, la causa fue que la refactorización del estudio de Android tiene errores. Moví una clase interna fuera de una clase, que era una Vista y, por lo tanto, también tenía un xml, donde se estableció la ruta directa. ¡Este camino no será refactorizado por Studio! Y no se lanzará ningún error.

Espero que esto ayude a alguien. Salud.


0

En nuestro caso, queríamos compilar la versión de Vagrant y tuvimos el mismo error. Lo arreglamos por clean projecty rebuild projecten el menú Construir


0

Acabo de reiniciar el dispositivo y ejecutar la aplicación. Funcionó sin problemas. Espero que esto ayude a alguien :)


0

Encontré este error en Android Studio cuando intenté depurar en un dispositivo con API 23 , así que verifiqué Android Studio y noté que no había instalado esta versión de API 23 . Después de la instalación, resolví el problema.


0

Tuve este problema varias veces y, a menudo, no hice algo obviamente mal con las dependencias.

Siempre es una buena idea verificar si esta clase 'no encontrada' está presente en la apk final. Si es así, como sucedió en mis casos, el problema suele ser:

No es que no se encuentre la clase dada, pero no se puede cargar porque falta su superclase.

Verifique si la clase que extiende está disponible y luego intente arreglar su script de compilación o dependencias en consecuencia.

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.