2012-02-07 37 views
8

He estado felizmente refabricando el código de diferentes versiones de la misma aplicación (paga/gratis) en proyectos de biblioteca de Android para que las aplicaciones reales simplemente puedan personalizar la biblioteca y reducir la duplicación de código.Proyecto de biblioteca Android: ¿cómo obtener contexto?

Una cosa que estoy empezando a preguntar es ¿qué significa getApplicationContext() dentro del código de la biblioteca? ¿Es el mismo ApplicationContext que uno obtendría de las aplicaciones secundarias? ¿Qué sucede cuando accedo al SharedPreferences desde el proyecto de la biblioteca getApplicationContext() en lugar de la aplicación original getApplicationContext()? ¿El archivo SharedPreferences será el mismo o diferente?

¿Qué pasaría si hubiera utilizado la actividad para acceder al SharedPreferences? ¿Importa que la actividad ahora sea una actividad de biblioteca y no la aplicación original? ¿Es el SharedPreferences lo mismo?

Gracias por aclarar.

Respuesta

13

Cuando el APK se envasa a continuación, todas las clases serán pertenecen a la aplicación principal.

llame a getApplicationContext(). GetPackageName() y devolverá el nombre del paquete de la aplicación, y no el paquete de la biblioteca.

Tengo la misma configuración para una aplicación gratuita/paga y no tuve problemas cuando cambié mis clases a un proyecto de biblioteca.

Sin embargo, debe verificar sus archivos xml (manifiesto, widgets, etc.) para usar el nombre completo del paquete de su proyecto de biblioteca.

+0

Hice algunas pruebas y vi que SharedPreferences no se ve afectado. Y también veo que getPackageName() devuelve el paquete de la aplicación secundaria. Google ha proporcionado documentación limitada para las bibliotecas. Gracias por confirmar. – amit

+0

En mi caso, las Preferencias Compartidas se vieron afectadas y 'getPackageName()' devolvió en cada caso los mismos resultados. Pero había una diferencia en 'context.toString()' –

1

Un proyecto de biblioteca es casi como tener todo el código en un proyecto. Hay un par de cosas para tener en cuenta relacionadas con los espacios de nombres, pero en general funciona muy bien.

p. Ej. Su biblioteca tiene su propio espacio de nombres

Biblioteca nombre del paquete = uk.co.lib aplicación principal nombre del paquete = uk.co.app

Actividades en la biblioteca que desee acceder tro de la aplicación principal tiene que ser agregado al manifiesto de la aplicación. Actividad denominada A en proyecto de biblioteca se añadiría a manifestarse en aplicación principal de la siguiente manera:

<activity android:name="uk.co.lib.A"> 

Acceso a las preferencias compartidas, etc darían el mismo resultado ya sea de espacio de nombres y volverían las preferencias de la aplicación.

Sólo hay una aplicación para que sólo hay un Application Context

Cuestiones relacionadas