причина
После того, как обновление (платформа обновления), сделанное в 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