Android 应用程序更新后BuildConfig.VERSION_代码与PackageManager.getPackageInfo()之间不匹配
我发现我的应用程序用户经常遇到一种奇怪的情况(通过Crashlytics/Google Analytics reporting…),我无法重现这种情况: 更新我的包后-PackageManager类返回的版本代码与Android 应用程序更新后BuildConfig.VERSION_代码与PackageManager.getPackageInfo()之间不匹配,android,android-package-managers,android-install-apk,android-broadcastreceiver,android-firmware,Android,Android Package Managers,Android Install Apk,Android Broadcastreceiver,Android Firmware,我发现我的应用程序用户经常遇到一种奇怪的情况(通过Crashlytics/Google Analytics reporting…),我无法重现这种情况: 更新我的包后-PackageManager类返回的版本代码与BuildConfig.version\u code返回的版本代码不同: int packageManagerVersionCode = context.getPackageManager() .getPackageInf
BuildConfig.version\u code
返回的版本代码不同:
int packageManagerVersionCode = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0).versionCode;
boolean versionMismatch = packageManagerVersionCode != BuildConfig.VERSION_CODE;
为了简单起见,我省去了大部分日志记录、官僚作风和封装,但结果是:
等于正确的更新版本packageManagerVersionCode
等于更新前应用程序的版本BuildConfig.VERSION\u code
- 我的应用程序在设备固件上作为系统应用程序预加载
- 我的应用程序正在自我更新(它具有所需的权限..)
BroadcastReceiver
的名称(出于重构目的…)之后,这一切都是从一个面向生产用户的验证开始的
当重新将接收器重命名为原始预加载版本中调用的原始名称时,我们停止了崩溃,因此我们怀疑这与版本代码不匹配有关
我的问题是:
- 为什么会出现这种版本不匹配
- 我能做些什么来防止它发生吗?或者至少确保原始预加载应用程序中的组件不会处于活动状态
- 我关于它为什么会发生的假设是正确的吗