Después de convertir una aplicación que funciona perfectamente en una biblioteca (incluida su clase de actividad), intento crear una aplicación que use toda esa biblioteca simplemente superclasificando la actividad de la biblioteca:No se pudo instanciar la actividad ... Causado por ClassNotFoundException
package com.example.baseapp.paid;
import android.os.Bundle;
import com.example.baseapp.LibActivity;
public class PaidActivity extends LibActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
Eclipse se basa esta aplicación recién "rediseñado" sin ningún error, pero cuando intento ejecutarlo, me sale una excepción:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.baseapp.paid/com.example.baseapp.paid.PaidActivity}: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.example.baseapp.paid.PaidActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.baseapp.paid-1.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
... 11 more
no tengo ni idea de por qué esto está ocurriendo ya que el error para "Clase no encontrada" cuando th La clase e es exactamente la clase derivada construida (¡sin errores!) y ahora intenta ejecutarse.
¿Cómo soluciono esto?
¿Qué me estoy perdiendo?
EDITAR (respondiendo a la pregunta por @CaspNZ):
Ésta es la AndroidManifest.xml del proyecto de biblioteca:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.baseapp"
android:versionCode="5"
android:versionName="1.1.2">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
y este es el AndroidManifest.xml de la aplicación, utilizando el Proyecto de biblioteca:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.baseapp.paid"
android:versionCode="5"
android:versionName="1.1.2">
<uses-sdk android:minSdkVersion="8" />
<uses-library android:name="AppLibrary" />
<uses-permission android:name="android.permission.INTERNET"/>
<application android:icon="@drawable/icon">
<activity android:name=".PaidActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.example.baseapp.LibActivity" android:label="com.example.baseapp.LibActivity:string/rx_label">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="EditPreferences"
android:label="com.example.baseapp.LibActivity:string/app_name">
</activity>
</application>
</manifest>
Agradecería cualquier sugerencia al intentar solucionar este problema ya que esta es la primera vez que pruebo ng para usar un proyecto de biblioteca y no estoy familiarizado con los "trucos" involucrados para que esto funcione.
¿Utiliza proguard? ¿Está tu clase dentro de tu archivo dex? (Puede usar dexdump de la distribución de Android para averiguarlo, classes.dex está en su apk). – Snicolas
@Snicolas Esto está en modo de depuración, entonces no ProGuard. No sé (todavía) qué buscar en dexdump. Sin embargo, hice algunos progresos desde que publiqué y descubrí que el factoring de Eclipse funciona para mí la mayor parte del tiempo, pero también funciona en mi contra de vez en cuando, al igual que en este caso en el que inyectó algo de basura en el AndroidManifest de la biblioteca. .xml. Lo arreglé pero todavía recibo el error. – an00b
@Snicolas Esto está relacionado con mi intento de implementar su primera sugerencia en [el otro hilo] (http://stackoverflow.com/questions/6324234/converting-an-existing-application-to-a-library). ¿Tengo que duplicar AndroidManifest.xml de la biblioteca para la aplicación derivada? – an00b