Не удается найти код версии в манифесте?

задняя часть Android APK Android Studio

причина

После того, как обновление (платформа обновления), сделанное в 2017 году, поддерживалось другими командами, было обнаружено, что информация versionCode и versionName не была найдена после разбора манифеста.
Все говорят об окончательном трюке, используя aapt для его получения, но явно неразумно иметь низкую связанность и поддерживать среду Android на сервере. так трахни его
В этой статье все решения, просто посмотрите на окончательный вывод в спешке

окружающая обстановка

  • Android Studio 3.0
  • Gradle 4.1
  • targetSdkVersion 26 minSdkVersion 8
  • apktool 2.3.1
  • AXMLPrinter2
  • APKParser

анализировать проблему

apktool

Первая идея — декомпилировать с помощью apktool, чтобы проверить, нет ли информации о версии в AndroidManifest.

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tu.sample" platformBuildVersionCode="26" platformBuildVersionName="7.1.1">

Результата нет, поэтому я указываю свои подозрения на котел Google, Android Studio?Gradle?targetVersion?

Android Studio?

Android Studio 3.0 Canary 2: attribute 'android:versionCode' not found
Потом после сравнения выясняется, что проблема все же не в этом, продолжайте заниматься

Gradle?targetVersion?

Он по-прежнему доступен на телефонах с более ранними версиями, даже если Google хочет изменить это правило хотя бы для совместимости со старыми версиями. А почитав официальную документацию Android, упоминания об этом нет, так что эту причину тоже можно исключить. ВидетьУстановить информацию о версии приложения
Программисты вот-вот начнут сомневаться в жизни

Android Studio Analyze APK

Случайно использовал Analyze APK, чтобы проверить это, информация следующая

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tu.sample"
    platformBuildVersionCode="26"
    platformBuildVersionName="7.1.1"
    android:versionCode="24400"
    android:versionName="2.4.4">

Блин Нима, на самом деле есть, из-за официального анализа, или потому что реально существует?

Каталог сборки

AndroidManifest Посмотрите в сборке / промежуточных продуктах / манифестах / полной / отладке и выпуске, просмотрите содержимое и проанализируйте соответствие APK.
начни сомневаться в себе

apktool?

Посмотрите на содержимое, разобранное apktool, есть файл apktool.yml, краткое содержание следующее

!!brut.androlib.meta.MetaInfo
apkFileName: sample.apk
compressionType: false
doNotCompress:
- arsc
isFrameworkApk: false
packageInfo:
  forcedPackageId: '127'
  renameManifestPackage: null
sdkInfo:
  minSdkVersion: '8'
  targetSdkVersion: '26'
usesFramework:
  ids:
  - 1
  tag: null
version: 3.0.1
versionInfo:
  versionCode: '24400'
  versionName: 2.4.4

На самом деле есть некоторые, так что метод разбора изменен или нет в манифесте? Окончательный трюк - прочитать исходный код, но, поскольку я только что потратил время (любопытно), чтобы поддержать его, нет времени терять (лень). Но всегда с облегчением, нет необходимости использовать aapt для ее решения.
Вернемся к нашему собственному парсеру

AXMLPrinter2

используется в обновленииAXMLPrinter2библиотека для разбора. Эта библиотека долгое время не поддерживалась и породила множество других версий, таких какAPKParser
Обнаружено, что манифест, проанализированный этой библиотекой, содержит информацию о версии, и его содержимое соответствует анализу APK.

В заключение

В манифесте по-прежнему есть информация о версии, и правила остаются прежними. Из-за проблемы с библиотекой синтаксического анализа AXMLPrinter2. Конкретные причины не анализируются и оставляются для решения текущей команде и заинтересованным лицам.

Ссылаться на

Установить информацию о версии приложения
AXMLPrinter2
APKParser
Android Studio 3.0 Canary 2: attribute 'android:versionCode' not found

При перепечатке просьба указывать источник:
http://2tu.github.io/2018/01/09/versionCode-not-exist-in-manifest/
Эта статья из блога Ту