z10 para gratis descargar convertir aplicaciones php xml android version apk

para - PHP: ¿Cómo obtener la versión del archivo.apk de Android?



convertir php a apk (5)

El formato de volcado es un poco extraño y no es 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 quieres la versión, obviamente puede ser mucho más simple.

aapt d badging PACKAGE | gawk $''match($0, /versionName=/'([^/']*)/'/, v) { print v[1] }''

Aquí hay variaciones adecuadas tanto para gawk como para mawk (un poco menos duraderas en caso de que el formato de volcado cambie pero debería 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 }''

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 como PHP Manual , ejemplo # 3. ¿Alguna idea de cómo crear el guión?


He creado un conjunto de funciones 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 la versión como la primera etiqueta, y se basa en el axml (formato binario de Android XML) como se describe aquí

<?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://.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++; } } ?>


Use esto en el CLI:

apktool if 1.apk aapt dump badging 1.apk

Puedes usar estos comandos en PHP usando exec o shell_exec .


Si tiene el SDK de Android instalado en el servidor, puede usar exec 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 el motivo que sea, deberá analizar el formato XML binario de Android. El archivo AndroidManifest.xml que se encuentra dentro de la estructura zip de APK no es texto simple.

Necesitaría portar una utilidad como AXMLParser desde Java a PHP.


aapt dump badging ./apkfile.apk | grep sdkVersion -i

Obtendrá una forma humana legible.

sdkVersion:''14'' targetSdkVersion:''14''

Solo busque aapt en su sistema si tiene instalado el SDK de Android. El mio esta en

<SDKPATH>/build-tools/19.0.3/aapt