Estoy tratando de crear un script PHP para obtener la versión de la aplicación del archivo APK de Android. Extraer el archivo XML del archivo APK (zip) y luego analizar XML es una forma, pero creo que debería ser más simple. Algo así como PHP Manual, ejemplo n. ° 3. ¿Alguna idea de cómo crear el guion?PHP: ¿Cómo obtener la versión del archivo android .apk?
Respuesta
Si tiene instalado el SDK de Android en el servidor, puede usar el ejecutable de PHP (o similar) para ejecutar la herramienta aapt
(en $ANDROID_HOME/platforms/android-X/tools
).
$ aapt dump badging myapp.apk
Y la salida debe incluir:
package: name='com.example.myapp' versionCode='1530' versionName='1.5.3'
Si no puede instalar el SDK de Android, por cualquier razón, entonces tendrá que analizar formato binario XML de Android. El archivo AndroidManifest.xml
dentro de la estructura zip de APK es no texto sin formato.
Tendría que portar un utility like AXMLParser de Java a PHP.
Uso esto en la CLI:
apktool if 1.apk
aapt dump badging 1.apk
Puede utilizar estos comandos en PHP usando exec
o shell_exec
.
He creado un conjunto de funciones de PHP que encontrarán solo el código de versión de un APK. Esto se basa en el hecho de que el archivo AndroidMainfest.xml contiene el código de versión que la primera etiqueta, y en base a la axml (binario formato XML Android) como 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 cómo obtener el nombre de la versión –
aapt dump badging ./apkfile.apk | grep sdkVersion -i
Usted recibirá una legible por humanos formar.
sdkVersion:'14'
targetSdkVersion:'14'
Basta con buscar aapt en su sistema si tiene instalado el SDK de Android. mina está en:
<SDKPATH>/build-tools/19.0.3/aapt
El formato de volcado es un poco extraño y no el más fácil de trabajar. Solo para ampliar algunas de las otras respuestas, este es un script de shell que estoy usando para analizar el nombre y la versión de los archivos 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 solo quiere la versión, obviamente puede ser mucho más simple.
aapt d badging PACKAGE | gawk $'match($0, /versionName=\'([^\']*)\'/, v) { print v[1] }'
Éstos son variaciones adecuadas tanto para gawk y mawk (un poco menos duraderos en el caso de los cambios de formato de volcado, pero debe estar 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. Obtener el ícono del archivo APK, versión, nombre
- 2. Ubicación del archivo .apk
- 3. cómo obtener el archivo fuente desde el archivo apk
- 4. Obtener la versión del archivo en PowerShell
- 5. Cómo cambiar el nombre del archivo apk en android
- 6. ¿Cómo obtener la versión de PHP?
- 7. Archivo APK de Android: reactivar el archivo APK anterior en Google Play Store
- 8. Lectura de nombres de actividades del archivo apk en Android
- 9. Obtener el APK de la aplicación instalada
- 10. Android Market y el nombre del archivo APK
- 11. Obtener la versión del sistema operativo del dispositivo en Android programáticamente
- 12. cómo descargar archivos apk del mercado Android a la PC?
- 13. Obtener la versión del archivo ejecutable no ejecutable
- 14. ¿Importar el archivo APK de Android?
- 15. ¿Cómo obtener 19KB Versión reducida del archivo jquery?
- 16. ¿Cómo obtener información del dispositivo en Android
- 17. Obtener detalles del certificado de una apk
- 18. PHP: ¿cómo puedo obtener la fecha de creación del archivo?
- 19. PHP: ¿Cómo obtener la fecha de creación del archivo cargado?
- 20. Versión del archivo vs. Versión del producto
- 21. Android JNI APK Embalaje
- 22. ¿Cómo instalar el archivo .apk al emulador?
- 23. Cómo obtener la versión de Apache
- 24. Android: ¿agregar archivos al paquete APK?
- 25. ¿Cómo ver los contenidos de un archivo APK de Android?
- 26. Cómo instalar el archivo .apk en el dispositivo Android
- 27. ¿Cómo zipalign el archivo .apk usando eclipse?
- 28. Reverse Engineer Android APK para obtener el código?
- 29. Android install apk programmatically
- 30. Android Application APK signing?
¿Tiene la posibilidad de instalar el SDK de Android en ¿el servidor? –
¿Dónde se encuentra el zip para el que desea obtener información? – 2ndkauboy
@Francesco: Sin Android SDK @ Kau-Boy: archivo zip (apk) se encuentra en el servidor con scripts php ¿Es posible hacer algo como en el enlace que publiqué (ejemplo # 3)? – Solata