2011-09-07 29 views
17

Mientras sigo desarrollando mi aplicación y pruebo en un teléfono real, necesito tener la versión de lanzamiento en el mismo teléfono, con fines de demostración (la versión de lanzamiento es mucho más receptiva, gracias a no-logs) .¿Cómo tener la versión Debug and Release apk en el mismo dispositivo?

El problema es que la única manera de hacer que dos aplicaciones coexistan en el mismo dispositivo en Android es tener diferentes nombres de paquetes.

Pero los nombres de paquetes requieren la re-factoring y un montón de correcciones manuales propagar ... por no hablar de que esto confunde el control de versiones ...

Idealmente, Eclipse + ADT permitirían añadiendo una variable modificador que generaría automáticamente un nombre de paquete diferente para depurar/liberar y permitiría tal coexistencia, pero no pude encontrar ningún mecanismo que permita hacer eso.

¿Conoces alguna forma de solucionar este problema?

Las soluciones e ideas creativas son bienvenidas.

Respuesta

0

Puede intentar this technique usando ant, Jenkins y quizás otras herramientas para automatizar el cambio de nombre de paquete según lo sugerido por @LAS_VEGAS.

Aunque no es lo que solicitó, this cool code snippet puede ayudarlo a averiguar en tiempo de ejecución si su código está depurado o liberado.

Otro intento interesante de este tipo se puede encontrar en this thread. Aunque no estoy seguro si funciona en Android.

2

La única forma que conozco es cambiar el nombre del paquete en el archivo de manifiesto de la aplicación. Eclipse debe manejar todo el cambio de nombre de código para usted.

+0

¡Guau! Eso casi funcionó. Agregué una 'd' al final del nombre del paquete en el archivo de manifiesto, limpié el proyecto para reconstruir y Eclipse no se quejó en absoluto. Felizmente procedí a ejecutarlo pero luego se "cerró a la fuerza". Resulta que mi aplicación utiliza la reflexión (fábrica de clases) y a Android no le gustó la discrepancia entre el nombre del paquete del manifiesto y el nombre del paquete .java. +1 por estar tan cerca. – an00b

+0

si su compilación de lanzamiento tiene una ofuscación proguard activada, y si agregó algunas _rules_personadas a proguard.cfg, también pueden contener el nombre del paquete.Además, si creó widgets de Vista personalizados y los agregó en algún diseño XML, también se nombran con el paquete. – superjos

2

¿Podría poner todo su código en Library Project y luego simplemente tener dos proyectos normales, que tengan diferentes nombres de paquetes e incluir el proyecto de la biblioteca en ambos?

Esto debería mantener todos los códigos en un solo lugar. Lo más probable es que los proyectos normales solo necesiten un archivo de manifiesto válido que apunte a las actividades en el proyecto de la biblioteca.

+0

El Proyecto de Biblioteca también tiene registro de depuración ... (IOW, un Proyecto de Biblioteca requiere construcción condicional al igual que la aplicación). Esta solución no funciona para mí, pero +1 para la sugerencia creativa. – an00b

4

uso de Android Studio porque Gradle hacer su vida mucho más fácil - sólo tiene que utilizar applicationIdSuffix

android { 
    ... 
    buildTypes { 
    release {...} 
    debug { 
     applicationIdSuffix '.debug' 
    } 
    } 
} 

Para más ir here.

0

En Android Studio, agregue variantes de compilación utilizando Product Flavors que se pueden personalizar fácilmente para varios entornos y probar varias aplicaciones paralelas de la misma aplicación. Consulte este enlace para obtener más información: Configuring Gradle

Cuestiones relacionadas