J'essaie de créer un script PHP pour obtenir la version de l'application à partir du fichier Android APK. Extraire le fichier XML à partir du fichier APK (zip), puis analyser XML est un moyen, mais je suppose que cela devrait être plus simple. Quelque chose comme PHP Manual, exemple # 3. Des idées pour créer le script?PHP: Comment obtenir la version du fichier .apk android?
Répondre
Si vous avez installé le SDK Android sur le serveur, vous pouvez utiliser l'exec de PHP (ou similaire) pour exécuter l'outil aapt
(dans $ANDROID_HOME/platforms/android-X/tools
).
$ aapt dump badging myapp.apk
Et la sortie devrait inclure:
package: name='com.example.myapp' versionCode='1530' versionName='1.5.3'
Si vous ne pouvez pas installer le SDK Android, pour une raison quelconque, vous devez analyser le format XML binaire Android. Le fichier AndroidManifest.xml
à l'intérieur de la structure zip de l'APK est et non.
Vous auriez besoin de porter un utility like AXMLParser de Java vers PHP.
Utilisez ce dans le CLI:
apktool if 1.apk
aapt dump badging 1.apk
Vous pouvez utiliser ces commandes en PHP en utilisant exec
ou shell_exec
.
J'ai créé un ensemble de fonctions PHP qui ne trouveront que le code de version d'un fichier APK. Ceci est basé sur le fait que le fichier AndroidMainfest.xml contient le code de version comme la première balise, et basée sur le AXML (format XML Android binaire) comme described here
<?php
$APKLocation = "PATH TO APK GOES HERE";
$versionCode = getVersionCodeFromAPK($APKLocation);
echo $versionCode;
//Based on the fact that the Version Code is the first tag in the AndroidManifest.xml file, this will return its value
//PHP implementation based on the AXML format described here: https://stackoverflow.com/questions/2097813/how-to-parse-the-androidmanifest-xml-file-inside-an-apk-package/14814245#14814245
function getVersionCodeFromAPK($APKLocation) {
$versionCode = "N/A";
//AXML LEW 32-bit word (hex) for a start tag
$XMLStartTag = "00100102";
//APK is esentially a zip file, so open it
$zip = zip_open($APKLocation);
if ($zip) {
while ($zip_entry = zip_read($zip)) {
//Look for the AndroidManifest.xml file in the APK root directory
if (zip_entry_name($zip_entry) == "AndroidManifest.xml") {
//Get the contents of the file in hex format
$axml = getHex($zip, $zip_entry);
//Convert AXML hex file into an array of 32-bit words
$axmlArr = convert2wordArray($axml);
//Convert AXML 32-bit word array into Little Endian format 32-bit word array
$axmlArr = convert2LEWwordArray($axmlArr);
//Get first AXML open tag word index
$firstStartTagword = findWord($axmlArr, $XMLStartTag);
//The version code is 13 words after the first open tag word
$versionCode = intval($axmlArr[$firstStartTagword + 13], 16);
break;
}
}
}
zip_close($zip);
return $versionCode;
}
//Get the contents of the file in hex format
function getHex($zip, $zip_entry) {
if (zip_entry_open($zip, $zip_entry, 'r')) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$hex = unpack("H*", $buf);
return current($hex);
}
}
//Given a hex byte stream, return an array of words
function convert2wordArray($hex) {
$wordArr = array();
$numwords = strlen($hex)/8;
for ($i = 0; $i < $numwords; $i++)
$wordArr[] = substr($hex, $i * 8, 8);
return $wordArr;
}
//Given an array of words, convert them to Little Endian format (LSB first)
function convert2LEWwordArray($wordArr) {
$LEWArr = array();
foreach($wordArr as $word) {
$LEWword = "";
for ($i = 0; $i < strlen($word)/2; $i++)
$LEWword .= substr($word, (strlen($word) - ($i*2) - 2), 2);
$LEWArr[] = $LEWword;
}
return $LEWArr;
}
//Find a word in the word array and return its index value
function findWord($wordArr, $wordToFind) {
$currentword = 0;
foreach ($wordArr as $word) {
if ($word == $wordToFind)
return $currentword;
else
$currentword++;
}
}
?>
hi @ CHeil402 comment obtenir la version –
aapt dump badging ./apkfile.apk | grep sdkVersion -i
Vous obtiendrez un lisible par l'homme forme.
sdkVersion:'14'
targetSdkVersion:'14'
Recherchez simplement aapt dans votre système si Android SDK est installé. mine est:
<SDKPATH>/build-tools/19.0.3/aapt
Le format de vidage est un peu étrange et pas le plus facile de travailler avec. Juste pour développer certaines des autres réponses, il s'agit d'un script shell que j'utilise pour analyser le nom et la version des fichiers APK.
aapt d badging PACKAGE | gawk $'match($0, /^application-label:\'([^\']*)\'/, a) { n = a[1] }
match($0, /versionName=\'([^\']*)\'/, b) { v=b[1] }
END { if (length(n)>0 && length(v)>0) { print n, v } }'
Si vous voulez juste la version alors évidemment cela peut être beaucoup plus simple.
aapt d badging PACKAGE | gawk $'match($0, /versionName=\'([^\']*)\'/, v) { print v[1] }'
Voici les variations appropriées pour les gawk et mawk (un peu moins durables dans le cas où les changements de format de sauvegarde, mais devrait être bien):
aapt d badging PACKAGE | mawk -F\' '$1 ~ /^application-label:$/ { n=$2 }
$5 ~ /^ versionName=$/ { v=$6 }
END{ if (length(n)>0 && length(v)>0) { print n, v } }'
aapt d badging PACKAGE | mawk -F\' '$5 ~ /^ versionName=$/ { print $6 }'
- 1. android installation du fichier apk
- 2. Nom du fichier lors du téléchargement sur Android APK
- 3. Obtenir le script PHP du côté serveur à partir de l'appel apk android
- 4. Android Market Upload fichier APK se bloque
- 5. Android apk génération
- 6. Comment obtenir la version d'un fichier gemspec?
- 7. mise à niveau fichier apk dans Android Market
- 8. Comment installer le fichier .apk en émulateur?
- 9. Android: Comment ajouter manuellement un fichier à apk?
- 10. Comment obtenir la version Apache
- 11. Ressources android dans apk
- 12. fichiers Emboutissage Android APK
- 13. Comment afficher la version du fichier TAP
- 14. Comment obtenir 19KB version Minified du fichier jquery?
- 15. comment ouvrir un fichier .ics dans la version Android 2.1?
- 16. Invoquer apk android à partir d'une autre apk
- 17. Zip à la carte SD à partir du fichier .APK
- 18. Version du fichier Vs. Version du produit
- 19. Impossible d'installer le fichier apk dans mon android mobile
- 20. Échec de l'installation du fichier apk par Package Installer dans Android?
- 21. Extrait ns: version du fichier wsdl en utilisant php?
- 22. Accès aléatoire au fichier livré avec Android apk
- 23. Comment un fichier .apk est-il signé
- 24. obtenir l'emplacement du fichier dans Android?
- 25. apk Android installer sur deviceanywhere
- 26. Est-il possible de décompiler un fichier .apk Android?
- 27. Obtenir le nom du fichier en PHP
- 28. Extraire Android .apk et lire le contenu du fichier XML dans res/layout
- 29. Comment puis-je déclencher une reconstruction de mon apk Android?
- 30. Obtenir le contenu du fichier php
Avez-vous la possibilité d'installer le SDK Android sur le serveur? –
Où se trouve le zip sur lequel vous voulez obtenir l'information? – 2ndkauboy
@Francesco: Sans Android SDK @ Kau-Boy: fichier zip (apk) est situé sur le serveur avec des scripts php Est-il possible de faire quelque chose comme dans le lien que j'ai posté (exemple # 3)? – Solata