2009-05-20 9 views
3

J'ai apporté beaucoup de changements à mon application: schéma de base de données, graphique, code, etc. Le plus gros est le nom du paquet que j'ai renommé en un nom différent. L'applicatgio a le même nom et le même identifiant dans le fichier manifeste.xml et l'apk a le même nom, avec la même signature numérique.Pourquoi la mise à jour d'une application Android peut-elle apparaître deux fois?

Néanmoins, lorsque vous utilisez ./adb install -r myapp.apk, myapp apparaît deux fois dans le menu. Bien sûr, puisque la base de données est stockée dans un répertoire en utilisant le nom du paquet comme nom, l'utilisateur a l'impression que ses données sont perdues.

Comment puis-je empêcher cela, et si je ne peux pas, comment puis-je automatiser la migration?

J'ai plusieurs indices: demander à l'utilisateur de désinstaller l'ancienne application, copier la base de données de l'ancien fichier vers le nouveau, etc.

Répondre

3

La réponse directe est l'application apparaissent deux fois parce que Android Market et Android OS voir deux paquets différents comme deux applications différentes. Le code peut être identique, mais si les packages sont différents, les applications sont complètement différentes.

Android Market identifie les applications par leur nom de package. Je suppose que c'est parce que le système d'exploitation suit les programmes par paquet ... il est logique que vous ne vouliez pas que deux paquets avec exactement le même nom soient installés, comment le système d'exploitation pourrait-il savoir lequel appeler? Par conséquent, si vous installez un package portant le même nom qu'un package déjà installé, le système d'exploitation l'affichera en tant que mise à niveau du package et autorisera le nouveau programme à accéder aux anciennes données utilisateur.

Vous indiquez que les packages partagent le même ID, je suppose qu'il s'agit d'un ID utilisateur. Cela vous permet de partager des données entre les packages. Plus d'informations ici:

http://developer.android.com/guide/topics/security/security.html#userid

Recommandation: RELEASE une petite mise à niveau vers votre ancien paquet fournissant tout ce que la colle est nécessaire pour laisser partager des données de avec votre nouveau package. Ensuite, libérez votre nouveau paquet avec le code pour importer les données d'utilisateur de l'ancien paquet (besoin du même UserId et signature). La transition serait transparente pour l'utilisateur (pas de sauvegarde et d'importation manuelle).

+1

La seule partie désordonnée est maintenant vous avez un programme pour l'utilisateur à désinstaller ... J'espère qu'ils désinstallent le bon. Désinstallation par programme, ma prochaine question SO. – Will

+0

Soyez également intéressé par ce problème. –

1

La signature de l'application doit être la même. Si vous avez importé le projet dans une autre Eclipse, construisez-le et téléchargez-le sur le marché, vous verrez 2 applications distinctes.

Questions connexes