2011-05-22 10 views
6

Empecé a usar Android Library Projects para consolidar mi código de versión gratuita y pago.¿Cómo usar la misma autoridad de ContentProvider en versiones gratuitas y de pago de la aplicación?

Aunque me he encontrado con un problema con ContentProvider. Dado que ContentProvider se define en la clase de la biblioteca, ambas aplicaciones usan la misma autorización. Esto significa que Android impide que se instale la segunda aplicación (en cualquier orden) debido a un error INSTALL_FAILED_CONFLICTING_PROVIDER.

05-22 11:14:40.563: WARN/PackageManager(102): Can't install because provider name com.cfms.android.podcast (in package com.cfms.android.podcastlite) is already used by com.cfms.android.podcastpaid 
05-22 11:14:40.563: WARN/PackageManager(102): Package couldn't be installed in /data/app/com.cfms.android.podcastlite-2.apk 

¿Cómo puedo solucionar este problema? Idealmente, me gustaría que las autoridades sean las mismas para cada versión de la aplicación, así que no tengo que poner muchas excepciones en la biblioteca de código común. Si eso no es posible, ¿cómo debo continuar?

Respuesta

6

Simplemente no es posible tener dos aplicaciones en el mismo dispositivo con diferentes proveedores que usan la misma autorización.

http://hustleplay.wordpress.com/2010/02/28/android-install_failed_conflicting_provider/

android duplicate provider authority.

Crearía un recurso de cadena diferente en cada aplicación, que luego se pasará a la biblioteca para crear el proveedor con la autorización correspondiente.

+4

Eso es lo que temía. Esto también significa que tendré que volver a trabajar todas las variables basadas en autoridad final estática en la inicialización de tiempo de ejecución. Era principalmente lo que intentaba evitar. – CodeFusionMobile

0

Podría intentar algo como esto?

http://ncsoftworks.com/forums/discussion/6/sharedpreferences-between-applications

Además, no es la autoridad de un solo proveedor de contenido de un nombre de carpeta Linux embebido privado? ¿Y no es un proveedor de contenido solo un archivo de base de datos SQLite dentro de esa carpeta privada?

¿Y no podemos compartir la misma carpeta entre las aplicaciones siempre que firmemos ambas aplicaciones con la misma clave y el mismo nombre del paquete de la aplicación creando así una identificación de usuario compartida?

En cualquier caso, estoy pensando en voz alta en este momento. Tendré que experimentar con esto. Solo estoy publicando esto para ahorrarme algo de tiempo en caso de que alguien encuentre el error en mis suposiciones (antes de que tenga tiempo para hacer el experimento).

Nota: he dicho nombre nombre del paquete de solicitud, no la actividad de paquetes. Según entiendo, las aplicaciones de Android generalmente contienen dos nombres de paquete (aunque el asistente de proyecto Eclipse New suele etiquetar ambos paquetes con el mismo nombre, creando así la impresión de que solo hay un nombre de paquete)

Cuestiones relacionadas