Как получить программным способом код версии или название версии моего apk из файла AndroidManifest.xml после его загрузки и без установки.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.xx.xxx"
android:versionCode="1"
android:versionName="1.1" >
Например, я хочу проверить, загружена ли новая версия в мою службу IIS, после установки на устройство, если это не новая версия, я не хочу ее устанавливать.
android
android-manifest
apk
Big.Child
источник
источник
./aapt d badging release.apk | grep -Po "(?<=\sversion(Code|Name)=')([0-9.]+)"
2.6M
дискового пространства, вы также можете написать парсер для разбора файла apk, сAXMLResource
которым будет стоить около52k
. Обратитесь к Java-анализу xml с необъявленным пространством именОтветы:
Следующее сработало у меня из командной строки:
ПРИМЕЧАНИЕ: aapt.exe находится в подпапке
build-tools
SDK. Например:источник
aapt
в build-tools / XX в sdk.~/Library/Developer/Xamarin/android-sdk-macosx/build-tools/{version}
platformBuildVersionName
печатается, когда я использую эту команду, и почему она пуста?aapt dump badging %1 pause
чтобы перетащить любойисточник
apk
контент без установки приложения? @PatrickChoЕсли вы используете версию 2.2 и выше в Android Studio , то используется Android Studio Build → Analyze APKвыберите AndroidManifest.xml файл.
источник
programmatically
Это отвечает на вопрос, возвращая в результате только номер версии. Тем не мение......
Цель, как было указано ранее, должна состоять в том, чтобы выяснить, является ли apk на сервере более новым, чем установленный, ПЕРЕД попыткой загрузить или установить его. Самый простой способ сделать это - включить номер версии в имя файла apk, размещенного на сервере, например
myapp_1.01.apk
Вам нужно будет установить имя и номер версии уже установленных приложений (если они установлены), чтобы сделать сравнение. Вам понадобится рутованное устройство или средство установки двоичного файла aapt и busybox, если они еще не включены в rom.
Этот скрипт получит список приложений с вашего сервера и сравнит их с любыми установленными приложениями. Результатом является список, помеченный для обновления / установки.
Как кто-то спросил, как это сделать, не используя aapt. Также можно извлечь apk-информацию с помощью apktool и небольшого количества сценариев. Этот способ медленнее и не прост в Android, но будет работать на Windows / Mac или Linux, если у вас есть рабочая установка apktool.
Также рассмотрите папку для удаления на вашем сервере. Загрузите в него apks, а задача cron переименует и переместит их в папку обновлений.
источник
На данный момент это можно сделать следующим образом
В общем, это будет:
источник
Теперь я могу успешно извлечь версию файла APK из его двоичных данных XML.
В этой теме я получил ключ к своему ответу (я также добавил свою версию кода Рибо): как проанализировать файл AndroidManifest.xml в пакете .apk
Кроме того, вот код XML для разбора, который я написал, специально для получения версии:
Синтаксический анализ XML
Сравнение версий (рассматривается как SystemPackageTools.compareVersions в предыдущем фрагменте) ПРИМЕЧАНИЕ. Этот код основан на следующей теме: Эффективный способ сравнения строк версий в Java
Надеюсь, это поможет.
источник
В частности, для сценария обновления альтернативный подход может заключаться в том, чтобы иметь веб-службу, которая предоставляет текущий номер версии, и проверить, что вместо загрузки всего apk просто для проверки его версии. Это позволило бы сэкономить некоторую полосу пропускания, быть немного более производительным (намного быстрее загружаться, чем apk, если большую часть времени не нужен весь apk) и намного проще в реализации.
В простейшей форме у вас может быть простой текстовый файл на вашем сервере ...
http://some-place.com/current-app-version.txt
Внутри этого текстового файла есть что-то вроде
а затем загрузите этот файл и сравните с текущей установленной версией.
Создание более продвинутого решения для этого состояло бы в том, чтобы реализовать надлежащий веб-сервис и иметь вызов API при запуске, который мог бы вернуть некоторый json, то есть
http://api.some-place.com/versionCheck
:источник
источник