Comment puis-je obtenir par programme le code de version ou le nom de version de mon apk à partir du fichier AndroidManifest.xml après l'avoir téléchargé et sans l'installer.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xx.xxx"
android:versionCode="1"
android:versionName="1.1" >
Par exemple, je veux vérifier si une nouvelle version est téléchargée sur mon service IIS, après l'avoir installée sur l'appareil, s'il ne s'agit pas d'une nouvelle version, je ne veux pas l'installer.
android
android-manifest
apk
Big.Child
la source
la source
./aapt d badging release.apk | grep -Po "(?<=\sversion(Code|Name)=')([0-9.]+)"
2.6M
l'espace disque, vous pouvez également écrire un analyseur pour analyser le fichier apk avecAXMLResource
qui coûtera environ52k
. Reportez-vous à Java parse xml avec un espace de noms non déclaréRéponses:
La suite a fonctionné pour moi à partir de la ligne de commande:
REMARQUE: aapt.exe se trouve dans un
build-tools
sous-dossier du SDK. Par exemple:la source
aapt
trouve dans build-tools / XX dans le sdk.~/Library/Developer/Xamarin/android-sdk-macosx/build-tools/{version}
platformBuildVersionName
qui est imprimé lorsque j'utilise cette commande et pourquoi est-elle vide?aapt dump badging %1 pause
pour faire glisser et déposer n'importe quella source
apk
contenu sans installer l'application? @PatrickChoSi vous utilisez la version 2.2 et supérieure d' Android Studio, dans Android Studio, utilisez Build → Analyze APKpuis sélectionnez le fichier AndroidManifest.xml.
la source
programmatically
Cela répond à la question en renvoyant uniquement le numéro de version. Toutefois......
L'objectif, comme indiqué précédemment, devrait être de savoir si l'apk sur le serveur est plus récent que celui installé AVANT de tenter de le télécharger ou de l'installer. Le moyen le plus simple de le faire est d'inclure le numéro de version dans le nom de fichier de l'apk hébergé sur le serveur, par exemple
myapp_1.01.apk
Vous devrez établir le nom et le numéro de version des applications déjà installées (si elles sont installées) afin de faire la comparaison. Vous aurez besoin d'un périphérique rooté ou d'un moyen d'installer le binaire aapt et busybox s'ils ne sont pas déjà inclus dans la rom.
Ce script obtiendra la liste des applications de votre serveur et la comparera avec toutes les applications installées. Le résultat est une liste marquée pour la mise à niveau / l'installation.
Comme quelqu'un a demandé comment le faire sans utiliser aapt. Il est également possible d'extraire des informations apk avec apktool et un peu de script. Cette méthode est plus lente et pas simple sous Android, mais fonctionnera sous Windows / Mac ou Linux tant que vous avez une configuration apktool fonctionnelle.
Pensez également à un dossier de dépôt sur votre serveur. Téléchargez des apks dessus et une tâche cron les renomme et les déplace vers votre dossier de mise à jour.
la source
Pour le moment, cela peut être fait comme suit
En général, ce sera:
la source
Je peux maintenant récupérer avec succès la version d'un fichier APK à partir de ses données XML binaires.
C'est dans cette rubrique que j'ai obtenu la clé de ma réponse (j'ai également ajouté ma version du code de Ribo): Comment analyser le fichier AndroidManifest.xml dans un package .apk
De plus, voici le code d'analyse XML que j'ai écrit, spécifiquement pour récupérer la version:
Analyse XML
Comparaison de version (vu comme SystemPackageTools.compareVersions dans l'extrait de code précédent) REMARQUE: Ce code est inspiré de la rubrique suivante: Moyen efficace de comparer les chaînes de version en Java
J'espère que ça aide.
la source
Pour le scénario de mise à niveau, une approche alternative pourrait être de disposer d'un service Web fournissant le numéro de version actuelle et de le vérifier au lieu de télécharger l'intégralité de l'apk juste pour vérifier sa version. Cela économiserait de la bande passante, serait un peu plus performant (beaucoup plus rapide à télécharger qu'un apk si l'ensemble de l'apk n'est pas nécessaire la plupart du temps) et beaucoup plus simple à implémenter.
Dans la forme la plus simple, vous pourriez avoir un simple fichier texte sur votre serveur ...
http://some-place.com/current-app-version.txt
À l'intérieur de ce fichier texte, il y a quelque chose comme
puis téléchargez ce fichier et vérifiez la version actuellement installée.
Construire une solution plus avancée à cela serait d'implémenter un service Web approprié et d'avoir un appel d'API au lancement qui pourrait renvoyer des json, c'est
http://api.some-place.com/versionCheck
-à- dire :la source
la source