52 votes

Mise à jour automatique pour les applications Android (privées)

Je suis l'élaboration d'un non-public de l'application pour Android, c'est à dire l'application ne sera pas disponible dans le global Marché Android. L'application sera installée sur un nombre limité de clients, par exemple en utilisant un fichier apk. Comment puis-je activer une auto-mise à jour de la fonctionnalité de cette application?

- Je voir les différentes options possibles (je ne sais pas si ceux-ci sont techniquement difficile, voire impossible à mettre en œuvre ou s'il y a des fonctionnalités existantes qui peuvent être réutilisés):

  • À chaque lancement de l'application vérifie si une nouvelle version existe (en demandant un serveur), si les téléchargements de la nouvelle apk et se renouvelle avec la nouvelle version.
  • L'utilisation (ou la développer?) un séparé application ou un service qui procède à la mise à jour-vérification et remplacement des processus.
  • L'utilisation (ou la développer?) un marché privé de l'application qui a une auto-option de mise à jour. Cette option est similaire à la deuxième, mais plus générique: Le marché de l'app serait connecté à un référentiel, c'est à dire qu'il serait en mesure de gérer un nombre arbitraire de (privé) des applications.

Je préfère la première option depuis la mise à jour automatique de la fonctionnalité est incluse dans l'application qui a besoin de moins d'efforts de développement.

18voto

tcbrazil Points 660

janjonas, dans la société où je travaille, nous avons eu un problème similaire avec Windows Mobile 6.x, et nous utilisons à peu près la même solution pointé par EboMike:

enter image description here

L'application principale vérifier si il est mis à jour, à l'encontre d'un WebService. Il reçoit la version actuelle et l'URL où télécharger la nouvelle version, si nécessaire. L'application principale, puis démarrez l'application de mise à jour, en passant l'URL, et à cesser de fumer.

Le programme de mise à jour télécharger le nouveau programme, via HTTP, en montrant à l'utilisateur l' % téléchargé. L'utilisateur peut annuler le téléchargement à tout moment, de manière contrôlée, et la mise à jour peut greffe de cette annulation.

Depuis que la nouvelle application est téléchargée, la mise à exécution de la nouvelle application, et de cesser de fumer.

6voto

EboMike Points 39257

Je pense que la première option est la moins quantité de travail pour vous, et en fait la plus propre de l'un de trop, car il va à travers le bon canal de l'utilisation d'Android intégré dans le programme d'installation du package qui inclut la notification de l'utilisateur et la possibilité pour l'utilisateur d'interrompre l'installation si vous le souhaitez.

Vous l'avez déjà tous les énoncés - rechercher une nouvelle version sur un serveur (ce serait gentil de donner à l'utilisateur la possibilité de désactiver cette fonction), et si il y a une nouvelle version, vous pouvez soit juste un lien vers l'URL avec l'APK (qui seront, autant que je me souvienne, utilisez le navigateur du gestionnaire de téléchargement pour le télécharger), ou vous pouvez télécharger votre application et pointez l'objectif de votre fichier local. En utilisant le lien HTTP est techniquement moins de travail et plus propre - plus vous laissez le système d'exploitation n', le mieux - sauf s'il y a une raison de ne pas.

2voto

Certaines des autorisations que nous allons utiliser pour ce faire sont les suivantes:

<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Laissez-moi vous expliquer un peu... La dernière, WRITE_EXTERNAL_STORAGE, est auto-explicatif. Avec ACCESS_SUPERUSER, nous allons dire au système que nous avons l'intention d'utiliser les privilèges de root. READ_EXTERNAL_STORAGE seront nécessaires dans l'avenir pour que votre application pour lire les fichiers sur la carte SD.

En supposant que vous avez téléchargé le fichier, et que tous ces appareils peuvent être enracinées (nombre limité de clients, pas sur le Jeu, etc.), vous pouvez faire ceci:

String filePath = Environment.getExternalStorageDirectory().toString() + "/your_app_directory/your_app_filename.apk";
Process installProcess = null;
int installResult = -1337;

try {
    installProcess = Runtime.getRuntime().exec("su -c pm install -r " + filePath);
} catch (IOException e) {
    // Handle IOException the way you like.
}

if (installProcess != null) {
    try {
        installResult = installProcess.waitFor();
    } catch(InterruptedException e) {
        // Handle InterruptedException the way you like.
    }

    if (installResult == 0) {
        // Success!
    } else {
        // Failure. :-/
    }
} else {
    // Failure 2. :-(
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X