2010-02-09 25 views
6

Mi aplicación Android se puede dividir en una capa de interfaz de usuario del cliente y una capa API. Me gustaría implementarlos como "aplicaciones" separadas para que la capa API pueda reutilizarse.Android: ¿Cómo usar "uses-library"?

En Eclipse, los escribo como 2 proyectos independientes de Android. En el proyecto de interfaz de usuario del cliente, declaro el proyecto API en su ruta de compilación (Proyecto -> Properies -> Ruta de compilación de Java -> Proyectos).

Al implementar el proyecto de interfaz de usuario del cliente a través de Eclipse (en mi teléfono G1 real), también despliega automáticamente el proyecto API (empaquetado en APK).

Sin embargo, al iniciar la aplicación de interfaz de usuario del cliente, llegué a este error:

Uncaught handler: thread main exiting due to uncaught exception 
java.lang.VerifyError: myapp.android.testuiclient.Main 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1472) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1097) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:123) 
    at android.app.ActivityThread.main(ActivityThread.java:4203) 
    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:791) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
    at dalvik.system.NativeStart.main(Native Method) 

Mirando a su alrededor, que parece que debería declarar usos-biblioteca con aplicación en el archivo de manifiesto para el cliente de interfaz de usuario.

La pregunta es, ¿qué debo poner en android: name for uses-library? La guía Dev dice "el nombre de la biblioteca", pero ¿cuál es el nombre de la biblioteca? (quiero decir, en mi API "aplicación", no he declarado ningún nombre de biblioteca en ningún lugar.)

Respuesta

10

No creo que <uses-library> sea relevante aquí.

Las opciones son:

  1. implementar su "biblioteca" como un frasco, que se incluirán en otros proyectos en tiempo de compilación. Siempre que su biblioteca no intente definir recursos, se encuentra en buena forma. Vea los proyectos de CWAC en mi github page para ejemplos de cómo configurar esto.

  2. Implemente su "biblioteca" como una APK por separado que contiene un servicio remoto, definido mediante AIDL. No intente combinar sus rutas de compilación como lo hace actualmente en Eclipse, sino seguir las reglas de AIDL y que cada proyecto utilice una definición común de AIDL. También deberá organizar que sus usuarios instalen ambos APK.

  3. Implemente su "biblioteca" como un APK por separado que contiene un ContentProvider. No intente combinar sus rutas de compilación como lo está haciendo actualmente en Eclipse, sino más bien seguir las reglas ContentProvider y hacer que el cliente acceda al proveedor a través de un ContentResolver y un Uri definido. También deberá organizar que sus usuarios instalen ambos APK.
+1

Gracias! Por lo que se ve, la opción 1 es la más aplicable. Echaré un vistazo a tus proyectos para referencia. –

+0

Hola CommonsWare, he visto su proyecto CWAC-Cache. 1. Veo que usa Ant build.xml para compilar y ensamblar el JAR. Para que otro proyecto utilice ese JAR, ¿cómo se configura en Eclipse para que (a) en el momento de la codificación/compilación, la dependencia se resuelva y (b), en el momento de la implementación, se compilen en un solo APK y se implementen? ? 2. Supongo que CWAC-Cache no debe ejecutarse de forma independiente (¿estoy en lo cierto?). En ese caso, ¿por qué todavía necesita configurar una Actividad en AndroidManifest.xml con una acción PRINCIPAL y una categoría LANZADOR? Es eso requerido? –

+0

Simple: No uso Eclipse. :-) CWAC-Cache tiene una actividad de demostración de muestra (si compila el APK), pero su función principal es el objetivo 'ant jar' para crear el JAR del código de caché real que otros proyectos pueden usar. La tarea 'ant jar' omite el código de demostración (aislado en un subpaquete' .demo'). – CommonsWare