Wie kann ich programmgesteuert den Versionscode oder den Versionsnamen meiner apk aus der Datei AndroidManifest.xml abrufen, nachdem ich sie heruntergeladen und ohne sie installiert habe?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xx.xxx"
android:versionCode="1"
android:versionName="1.1" >
Ich möchte beispielsweise überprüfen, ob eine neue Version in meinen IIS-Dienst hochgeladen wurde, nachdem ich sie auf dem Gerät installiert habe. Wenn es sich nicht um eine neue Version handelt, möchte ich sie nicht installieren.
android
android-manifest
apk
Big.Child
quelle
quelle
./aapt d badging release.apk | grep -Po "(?<=\sversion(Code|Name)=')([0-9.]+)"
2.6M
Speicherplatz, Sie können auch einen Parser schreiben, um die apk-Datei zu analysieren, mitAXMLResource
der nur ungefähr Speicherplatz kostet52k
. Siehe Java Parse XML mit nicht deklarierten NamespaceAntworten:
Folgendes hat für mich über die Kommandozeile funktioniert:
HINWEIS: aapt.exe befindet sich in einem
build-tools
Unterordner des SDK. Beispielsweise:quelle
aapt
in Build-Tools / XX im SDK enthalten ist.~/Library/Developer/Xamarin/android-sdk-macosx/build-tools/{version}
platformBuildVersionName
gedruckt, wenn ich diesen Befehl verwende, und warum ist er leer?aapt dump badging %1 pause
, um jede apk zu ziehen und fallen zu lassenquelle
apk
Inhalte lesen , ohne die Anwendung zu installieren ? @ PatrickChoWenn Sie Version 2.2 und höher von Android Studio verwenden, verwenden Sie in Android Studio Build → Analyze APKund wählen Sie dann die Datei AndroidManifest.xml aus.
quelle
programmatically
Dies beantwortet die Frage, indem nur die Versionsnummer zurückgegeben wird. Jedoch......
Wie bereits erwähnt, sollte das Ziel darin bestehen, herauszufinden, ob die apk auf dem Server neuer ist als die installierte, bevor Sie versuchen, sie herunterzuladen oder zu installieren. Der einfachste Weg, dies zu tun, besteht darin, die Versionsnummer in den Dateinamen der auf dem Server gehosteten apk aufzunehmen, z
myapp_1.01.apk
Sie müssen den Namen und die Versionsnummer der bereits installierten Apps (falls installiert) festlegen, um den Vergleich durchführen zu können. Sie benötigen ein gerootetes Gerät oder ein Mittel zum Installieren der aapt-Binärdatei und der Busybox, wenn diese nicht bereits im ROM enthalten sind.
Dieses Skript ruft die Liste der Apps von Ihrem Server ab und vergleicht sie mit allen installierten Apps. Das Ergebnis ist eine Liste, die für das Upgrade / die Installation markiert ist.
Als jemand fragte, wie es geht, ohne aapt zu verwenden. Es ist auch möglich, apk-Informationen mit apktool und ein bisschen Scripting zu extrahieren. Dieser Weg ist langsamer und nicht einfach in Android, funktioniert aber unter Windows / Mac oder Linux, solange Sie Apktool-Setup arbeiten.
Betrachten Sie auch einen Ablageordner auf Ihrem Server. Laden Sie Apks hoch und eine Cron-Task benennt sie um und verschiebt sie in Ihren Update-Ordner.
quelle
Im Moment kann dies wie folgt erfolgen
Im Allgemeinen wird es sein:
quelle
Ich kann jetzt erfolgreich die Version einer APK-Datei aus ihren binären XML-Daten abrufen.
In diesem Thema habe ich den Schlüssel zu meiner Antwort erhalten (ich habe auch meine Version von Ribos Code hinzugefügt): So analysieren Sie die Datei AndroidManifest.xml in einem APK-Paket
Außerdem ist hier der XML-Parsing-Code, den ich speziell zum Abrufen der Version geschrieben habe:
XML-Analyse
Versionsvergleich (im vorherigen Snippet als SystemPackageTools.compareVersions angesehen) HINWEIS: Dieser Code basiert auf dem folgenden Thema: Effiziente Methode zum Vergleichen von Versionszeichenfolgen in Java
Ich hoffe das hilft.
quelle
Für das Upgrade-Szenario könnte ein alternativer Ansatz darin bestehen, einen Webdienst zu haben, der die aktuelle Versionsnummer liefert, und dies zu überprüfen, anstatt die gesamte apk herunterzuladen, nur um die Version zu überprüfen. Es würde etwas Bandbreite sparen, etwas leistungsfähiger sein (viel schneller als eine Apk herunterzuladen, wenn die gesamte Apk die meiste Zeit nicht benötigt wird) und viel einfacher zu implementieren.
In der einfachsten Form könnten Sie eine einfache Textdatei auf Ihrem Server haben ...
http://some-place.com/current-app-version.txt
In dieser Textdatei befindet sich so etwas wie
Laden Sie dann diese Datei herunter und vergleichen Sie sie mit der aktuell installierten Version.
Eine fortschrittlichere Lösung dafür zu entwickeln, würde darin bestehen, einen ordnungsgemäßen Webdienst zu implementieren und beim Start einen API-Aufruf zu erhalten, der etwas json zurückgeben könnte, dh
http://api.some-place.com/versionCheck
:quelle
quelle