2011-02-10 10 views
23

Soy nuevo en Android y estoy casi listo para lanzar una primera versión de mi aplicación :)cómo administrar la versión de depuración y versión en el dispositivo Android?

Al probar la versión de apk firmada en mi teléfono, se niega a instalar porque la versión de depuración está instalada con la firma de depuración

Así que tengo que desinstalar la versión de depuración pero borra toda mi base de datos (y se lo hará a mis amigos que lo están probando).

¿Hay alguna forma de administrar una depuración y una versión de lanzamiento de la misma aplicación sin perder datos?

+0

estaría muy interesado en una solución para esto también. Sin embargo, estoy bastante seguro de que, a menos que cambien los nombres de los paquetes, esto no será posible. :/ – Victor

Respuesta

4

No estoy al tanto de ninguna manera fácil de hacer moverse por la instalación/reinstalación proceso, por lo que sus opciones incluyen ...

  • Comprar un segundo dispositivo para la prueba (algunos dispositivos Android son muy baratos ahora , especialmente en eBay)
  • utilice el emulador para probar

veo el mismo tema, pero es de esperar, por lo que utiliza el teléfono durante dev depuración, y la tableta para las pruebas de producción. Cuando estoy cerca de un lanzamiento, pruebo la versión de producción en ambos dispositivos y el emulador.

Con sus probadores, le aconsejo que siempre les dé versiones de lanzamiento, pero puede incluir un registro extenso para ayudar con los problemas. Las versiones de depuración son utilizadas solo por usted y versiones de lanzamiento por ellos. Si les proporciona a los probadores una versión de lanzamiento, usan y acumulan datos, cuando se actualicen a la próxima versión, los datos pueden conservarse (o actualizarse, si cambia el esquema) para migrar sus datos.

No veo la necesidad de que sus probadores utilicen las versiones de versión de depuración &.

+0

es porque proporciono un menú de depuración con algunas acciones avanzadas solo disponibles cuando se firma la aplicación wish debug signature –

+0

En ese caso, le sugiero que agregue una bandera booleana en su compilación para incluir o no ese menú, y ponerlo en su producción de construcción. Otra opción es "esconderlo" en la interfaz de usuario, tal vez como una pulsación larga en el logotipo de la aplicación, algo que la mayoría de la gente no hará, pero si desea que personas específicas tengan acceso a él, pueden hacerlo. Luego, cuando finalice la prueba, realice una versión de producción adecuada y elimínela. –

+3

@Geobert Creo que es una mala idea enviar versiones de depuración a probadores, mucho mejor enviarles lanzamientos de producción. Les proporciona una experiencia más cercana al resultado final, p. se asegura de que están probando una versión que está utilizando la clave MapView de producción, por ejemplo.Las compilaciones de depuración son para usted, producción para sus probadores y usuarios finales –

2

¿Por qué desinstalar la aplicación? Normalmente, la instalación de la nueva versión de la misma aplicación (identificada por el ID del paquete) conserva todos los datos de la aplicación.

EDITAR: para conservar los datos de la aplicación a mano, cópielos de /data/data/my.package.name/... a un lugar seguro, luego restaure cuando sea necesario.

+1

La misma aplicación sobrescribirá la anterior mientras se guardan los datos, sí, pero no puede instalar una segunda aplicación con el mismo paquete, pero sí una firma diferente, como @Geobert. Entonces eso es lo que sucede. – Nanne

+0

No cambié la identificación del paquete pero no se instala. Desinstalé la versión de depuración y luego instalé la versión uno. Luego, cuando traté de iniciar en modo de depuración desde eclipse, dice: –

+0

[2011-02-10 18:11:24 - radis] Cargando radis.apk en el dispositivo '10006609c6cb' [2011-02-10 18:11: 24 - radis] Instalando radis.apk ... [2011-02-10 18:11:25 - radis] Falló la reinstalación debido a diferentes firmas de aplicaciones. [2011-02-10 18:11:25 - radis] Debe realizar una desinstalación completa de la aplicación. ADVERTENCIA: ¡Esto eliminará los datos de la aplicación! [2011-02-10 18:11:25 - radis] Ejecute 'adb uninstall fr.geobert.Radis' en un shell. [2011-02-10 18:11:25 - radis] ¡Lanzamiento cancelado! –

29

Muchos proyectos de Android están empezando a utilizar el sistema de compilación gradle (hicimos la transición cuando comenzamos a usar Android Studio). Afortunadamente, gradle hace que sea muy sencillo instalar simultáneamente una versión de desarrollo y otra de lanzamiento, cada una con sus propios datos independientes.La cubierta Android docs esto, sólo tiene que añadir un applicationIdSuffix a su depuración tipo de generación, así:

android { 
    buildTypes { 
     debug { 
      applicationIdSuffix ".debug" 
     } 
    } 
} 
+0

No soy tan familiar (todavía) con gradle, pero al menos de acuerdo con lo que he leído hasta ahora, creo que esta debería ser la respuesta aceptada, ya que es la mejor solución para la pregunta del OP. – Andre

+0

Si usa permisos, deberá agregar algunos trucos más: https://blog.grandcentrix.net/how-to-install-different-app-variants-on-one-android-device/ – Gavriel

2

Gracias @ Evan su solución funciona perfecto:

android { 
    buildTypes { 
     debug { 
      applicationIdSuffix ".debug" 
     } 
    } 
} 

Para añadir "(DEBUG)" para el título de su aplicación cuando se ejecuta en modo de depuración, colocar este código en onCreate de su actividad:

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
    //The .debug specified in gradle 
    if (pInfo.packageName.equals("YOUR_PACKAGE_NAME_HERE.debug")) { 
     setTitle(getTitle() + " (DEBUG)"); 
} 
0

para mí, yo también tenía que añadir:

<permission                    
     android:name="${applicationId}.permission.C2D_MESSAGE"         
     android:protectionLevel="signature" />             

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 

De lo contrario, ambos recibirían el mismo permiso C2D_MESSAGE que resultó en:

Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=<your applicationId>.permission.C2D_MESSAGE pkg=<your applicationId>] 
Cuestiones relacionadas