[Manifest]关于version

本文详细解析了Android APK版本号的配置与管理,包括VersionName、VersionCode及其在不同Android版本下的行为差异,以及Android 9.0引入的VersionCodeMajor特性。探讨了预装应用与后安装应用的版本冲突解决机制,以及如何使用AndroidX API进行版本号兼容。

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。

转载于:https://juejin.im/post/5c643a1bf265da2dac4532d7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值