¿Cómo puedo obtener programáticamente el código de versión o el nombre de la versión de mi apk del archivo AndroidManifest.xml después de descargarlo y sin instalarlo?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xx.xxx"
android:versionCode="1"
android:versionName="1.1" >
Por ejemplo, quiero verificar si una nueva versión está cargada en mi servicio IIS, después de instalarla en el dispositivo, si no es una nueva versión, no quiero instalarla.
android
android-manifest
apk
Big.Child
fuente
fuente
./aapt d badging release.apk | grep -Po "(?<=\sversion(Code|Name)=')([0-9.]+)"
2.6M
espacio en el disco, también puede escribir un analizador para analizar el archivo apk con elAXMLResource
que solo le costará52k
. Consulte Java parse xml con espacio de nombres no declaradoRespuestas:
Lo siguiente funcionó para mí desde la línea de comando:
NOTA: aapt.exe se encuentra en una
build-tools
subcarpeta del SDK. Por ejemplo:fuente
aapt
está en build-tools / XX en el sdk.~/Library/Developer/Xamarin/android-sdk-macosx/build-tools/{version}
platformBuildVersionName
imprime cuando uso este comando y por qué está vacío?aapt dump badging %1 pause
para arrastrar y soltar cualquier apkfuente
apk
contenido sin instalar la aplicación? @PatrickChoSi está utilizando la versión 2.2 y superior de Android Studio , use Android Studio Build → Analyze APKluego seleccione el archivo AndroidManifest.xml.
fuente
programmatically
Esto responde a la pregunta devolviendo solo el número de versión como resultado. Sin embargo......
El objetivo, como se indicó anteriormente, debería ser averiguar si la apk en el servidor es más nueva que la instalada ANTES de intentar descargarla o instalarla. La forma más fácil de hacerlo es incluir el número de versión en el nombre de archivo de la apk alojada en el servidor, por ejemplo
myapp_1.01.apk
Deberá establecer el nombre y el número de versión de las aplicaciones ya instaladas (si está instalada) para poder realizar la comparación. Necesitará un dispositivo rooteado o un medio para instalar el binario aapt y busybox si aún no están incluidos en la rom.
Este script obtendrá la lista de aplicaciones de su servidor y se comparará con cualquier aplicación instalada. El resultado es una lista marcada para actualización / instalación.
Como alguien preguntó cómo hacerlo sin usar aapt. También es posible extraer información de apk con apktool y un poco de secuencias de comandos. Esta forma es más lenta y no es simple en Android, pero funcionará en Windows / Mac o Linux siempre que tenga la configuración de apktool en funcionamiento.
Considere también una carpeta de colocación en su servidor. Sube apks y una tarea cron cambia el nombre y los mueve a tu carpeta de actualización.
fuente
Por el momento, esto se puede hacer de la siguiente manera
En general, será:
fuente
Ahora puedo recuperar con éxito la versión de un archivo APK de sus datos XML binarios.
Este tema es donde obtuve la clave de mi respuesta (también agregué mi versión del código de Ribo): Cómo analizar el archivo AndroidManifest.xml dentro de un paquete .apk
Además, aquí está el código de análisis XML que escribí, específicamente para obtener la versión:
Análisis XML
Comparación de versiones (visto como SystemPackageTools.compareVersions en fragmento anterior) NOTA: Este código está inspirado en el siguiente tema: Forma eficiente de comparar cadenas de versiones en Java
Espero que esto ayude.
fuente
Para el escenario de actualización, específicamente, un enfoque alternativo podría ser tener un servicio web que entregue el número de versión actual y verificar eso en lugar de descargar el apk completo solo para verificar su versión. Ahorraría algo de ancho de banda, sería un poco más eficiente (mucho más rápido de descargar que un apk si no se necesita todo el apk la mayor parte del tiempo) y mucho más simple de implementar.
En la forma más simple, podría tener un archivo de texto simple en su servidor ...
http://some-place.com/current-app-version.txt
Dentro de ese archivo de texto tiene algo como
y luego descargue ese archivo y verifique la versión instalada actualmente.
Construir una solución más avanzada para eso sería implementar un servicio web adecuado y tener una llamada API en el lanzamiento que podría devolver algunos json, es decir
http://api.some-place.com/versionCheck
:fuente
fuente