[Manifest]关于version

2,617 阅读1分钟

Apk 版本号

可在AndroidManifest和BuildConfig中配置VersionName及VersionCode。 BuildConfig中会覆盖AndroidManifest中版本号,并在Apk中最终体现在Manifest文件中。 如果不声明versionCode及versionName,则versionCode=0,versionName为null。

系统预装应用

如果/system/app下APK,在data/data中再安装相同版本, 4.4版本最终使用之前预装版本,7.0版本使用新安装版本。 原因为frameworks/base/services/java/com/android/server/pm/PackageManagerService.java 该类对预装应用版本号判断有改动。

图片
详细源码如下 PackageManagerService_7.1.2.java

PackageManagerService_4.4.java

VersionCodeMajor

Android9.0加入VersionCodeMajor,用于支持更多位数版本号,用高32位标识VersionCodeMajor。如果targetSdkVersion>=28,则versionCode会提示已过期。 建议使用*getLongVersionCode()*代替。

图片

图片
AndroidX提供API用于兼容旧版本versionCode,androidx.core.content.pm.PackageInfoCompat.getLongVersionCode(@NonNull PackageInfo info)
图片
Manifest中通过如下方式指定: android:versionCode="1" android:versionCodeMajor="1"
图片
versionCode=1,versionCodeMajor=1, longVersionCode=0x00000001 00000001 longVersionCode=4294967297 注:目前build:gradle:3.2.1不支持该字段,build.gradle中声明versionCodeMajor编译无法通过。Instant Run功能也不支持该字段,需关闭Instant Run运行Apk。