2011-02-10 3 views
23

Je suis nouveau sur Android dev et je suis presque prêt à sortir une première version de mon application :)comment gérer la version de débogage et la version sur un périphérique Android?

En testant l'apk signé sur mon téléphone, il refuse d'installer car la version de débogage est installée avec la signature de débogage.

Je dois donc désinstaller la version de débogage mais elle supprime toute ma base de données (et elle le fera à mes amis qui le testent).

Existe-t-il un moyen de gérer une version de débogage et une version de la même application sans perdre de données?

+0

Je serais très intéressé par une solution pour cela aussi. Cependant, je suis assez certain qu'à moins de changer les noms des paquets, cela ne sera pas possible. :/ – Victor

Répondre

4

Je ne suis pas au courant d'aucun moyen facile de faire contourner la désinstallation/réinstallation processus, afin que vos options incluent ...

  • Acheter un second dispositif de test (certains appareils Android sont vraiment pas cher maintenant , en particulier sur eBay)
  • utilisez l'émulateur pour tester

Je vois la même question, mais il est à prévoir, donc j'utiliser le téléphone pour le débogage dev, et la tablette pour les tests de production. Quand je suis proche d'une version, je teste la version de production sur les deux appareils et l'émulateur. Avec vos testeurs, je vous conseille de toujours leur fournir des versions, mais vous pouvez inclure une journalisation complète pour résoudre les problèmes. Les versions de débogage sont ensuite uniquement utilisées par vous, et les versions de publication par eux. Si vous fournissez une version de test aux testeurs, ils utilisent et accumulent des données lorsqu'ils passent à la version suivante. Les données peuvent être conservées (ou mises à jour si vous modifiez le schéma) pour migrer leurs données.

Je ne vois pas le besoin pour vos testeurs d'utiliser les versions de débogage &.

+0

c'est parce que je fournis un menu de débogage avec quelques actions avancées seulement disponible quand l'application est signée souhaite que la signature de débogage –

+0

Dans ce cas, je vous suggère d'ajouter un drapeau booléen dans votre build pour inclure ou non ce menu. votre build de production. Une autre option est de le «cacher» dans l'interface utilisateur, peut-être en appuyant longuement sur le logo de l'application, ce que la plupart des gens ne feront pas, mais si vous voulez que certaines personnes y aient accès, ils le peuvent. Ensuite, lorsque les tests sont terminés, vous effectuez une version de production appropriée et supprimez-la. –

+3

@Geobert Je pense que c'est une mauvaise idée d'envoyer des versions de débogage aux testeurs, mieux vaut leur envoyer des versions de production. Cela leur donne une expérience plus proche du résultat final, par ex. s'assure qu'ils testent une version qui utilise la clé MapView de production, par exemple.Les builds de débogage sont pour vous, la production pour vos testeurs et les utilisateurs finaux –

2

Pourquoi désinstaller l'application? Normalement, l'installation de la nouvelle version de la même application (identifiée par l'ID du package) conserve toutes les données de l'application.

EDIT: pour conserver les données de l'application à la main, copiez-les à partir de /data/data/my.package.name/... dans un endroit sûr, puis restaurez-les si nécessaire.

+1

La même application va remplacer l'ancienne tout en gardant les données, oui, mais vous ne pouvez pas installer une deuxième application avec le même paquet, mais une signature différente, comme l'a @Geobert. Donc c'est ce qui arrive. – Nanne

+0

Je n'ai pas changé l'identifiant du paquet mais il ne l'a pas installé. J'ai désinstallé la version de débogage puis installe la version un. Puis quand j'ai essayé de lancer en mode de débogage de l'éclipse, il est dit: –

+0

[2011-02-10 18:11:24 - radis] Téléchargement de radis.apk sur l'appareil '10006609c6cb' [2011-02-10 18:11: 24 - radis] Installation de radis.apk ... [2011-02-10 18:11:25 - radis] La réinstallation a échoué en raison des différentes signatures d'application. [2011-02-10 18:11:25 - radis] Vous devez effectuer une désinstallation complète de l'application. AVERTISSEMENT: Ceci supprimera les données d'application! [2011-02-10 18:11:25 - radis] Veuillez exécuter 'adb uninstall fr.geobert.Radis' dans un shell. [2011-02-10 18:11:25 - radis] Lancement annulé! –

29

De nombreux projets Android commencent à utiliser le système de compilation Gradle (nous avons fait la transition lorsque nous avons commencé à utiliser Android Studio). Heureusement, gradle rend très simple l'installation simultanée d'une version de développement et d'une version, chacune avec ses propres données indépendantes.La couverture Android docs cela, il suffit d'ajouter un applicationIdSuffix à votre type de version de débogage comme ceci:

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

Je ne suis pas très familier (encore) avec gradle, mais au moins d'après ce que j'ai lu jusqu'ici, je pense que cela devrait être la réponse acceptée, puisque C'est la meilleure solution à la question du PO. – Andre

+0

Si vous utilisez des autorisations, vous devrez ajouter quelques astuces: https://blog.grandcentrix.net/how-to-install-different-app-variants-on-one-android-device/ – Gavriel

2

Merci @ Evan fonctionne votre solution parfaite:

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

Pour ajouter "(debug)" à titre de votre application lors de l'exécution en mode débogage, placez ce code dans votre activité de onCreate:

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

pour moi, j'ai aussi besoin d'ajouter:

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

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

Sinon, les deux recevraient la même autorisation de C2D_MESSAGE qui a abouti à:

Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=<your applicationId>.permission.C2D_MESSAGE pkg=<your applicationId>] 
Questions connexes