同应用APK更新能否保留本地数据?React Native端该如何配置?
安卓同应用覆盖安装保留本地数据方案(React Native场景)
结论
可以实现不卸载旧应用直接安装V2版本,同时完整保留本地数据库、缓存等所有历史数据,不需要额外做数据迁移配置(数据库表结构变更的业务场景除外)。
必须满足的三个核心条件
安卓系统判断是否为同一应用的升级包、允许覆盖安装且保留数据,需要同时满足三个要求:
- 两个安装包的applicationId(应用包名)完全一致:这是安卓识别应用身份的核心标识,包名不同无法触发覆盖安装
- V2版本的versionCode大于V1版本的versionCode:安卓通过versionCode判断版本高低,数值低的安装包无法覆盖高版本
- 两个安装包的签名信息完全一致:签名是应用身份的校验凭证,签名不一致的同包名安装包会直接安装失败
React Native项目具体配置修改位置
不需要手动修改AndroidManifest.xml文件,所有核心配置都在android/app/build.gradle中调整即可,找到文件内的defaultConfig代码块,参考以下示例配置:
android { // 该参数为包名标识,必须和V1版本完全一致 namespace "com.yourcompany.myapp" defaultConfig { // 应用唯一ID,必须和V1版本完全一致 applicationId "com.yourcompany.myapp" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion // 版本号数值,必须大于V1版本的versionCode,比如V1是1就填2 versionCode 2 // 对外展示的版本名称,不影响覆盖逻辑,按需修改即可 versionName "2.0" } }
打包V2版本安装包时,使用和V1版本完全相同的签名文件、签名密码、密钥别名、别名密码即可。
额外注意事项
- 只要你没有在旧版本的
AndroidManifest.xml中手动设置android:allowBackup="false",默认覆盖安装时所有本地SQLite数据库、SharedPreference、应用沙盒内的文件都会完整保留 - 如果本次V2版本有调整数据库表结构的需求,需要自行开发数据库版本迁移的业务逻辑,该逻辑和覆盖安装机制无关
- 由于不走应用商店分发,安装时需要用户打开手机的「允许未知来源应用安装」权限,即可正常触发覆盖安装流程
内容的提问来源于stack exchange,提问作者Morris
相关产品推荐
相关产品推荐

