自定义Android应用更新:如何在保留现有数据的前提下完成更新
自定义Android应用更新:如何在保留现有数据的前提下完成更新
嘿,太懂你这种不想丢数据的心情了!自己用了好几年的专属App,里面存的都是自己一点点填的内容,更新时可绝对不想重来对吧?
先给你捋捋你的情况:你自己开发的Android App,靠Preferences存设置、Room存用户数据(数据库一开始是空的,全是你后来自己填的内容),之前是通过.apk安装在手机上的,这次更新只在一个Fragment里加了个搜索栏,现在就想把新的App更到手机上,同时保住所有旧数据。
其实只要注意几个关键点,覆盖安装就能完美保留数据,给你一步步说:
核心前提:包名绝对不能改
Android系统是靠应用包名来识别“是不是同一个App”的,只要你新编译的App包名和旧版本完全一致,系统就会认为是更新,而不是装新App,这是保留数据的基础。要是包名改了,那装完就是俩独立的App,旧数据根本读不到,这点一定要盯紧!
关于Room数据库的注意事项
你这次只是加了UI(搜索栏),没碰数据库结构的话,那完全不用额外操作:覆盖安装后,Room会直接复用原来的数据库文件,你填的所有数据都会原封不动。
要是你之后哪天改了数据库结构(比如加字段、新表),那记得要:
- 把
@Database注解里的version号往上加(比如原来设的1,改成2) - 写对应的
Migration迁移类,告诉Room怎么把旧版本的数据库结构升级到新版本,不然Room可能会直接删了旧库重建,数据就没了。不过这次你用不上,先记着就行。
SharedPreferences完全不用操心
只要包名不变,覆盖安装后原来的SharedPreferences文件会完整保留,你之前存的各种设置项、偏好参数啥的,打开新App就能直接用,一点不用折腾。
具体操作步骤
- 把你新编译好的最新版
.apk传到手机上(数据线拷、微信发自己、用QQ传都行,怎么方便怎么来) - 找到手机上的这个新.apk,点击安装——系统会弹出“应用已存在,是否覆盖安装”的提示,直接选确定就行!划重点:绝对不要先卸载旧App再装新的!一卸载,所有数据就全没了!
额外的保险措施(可选)
要是你实在怕出意外(比如手滑或者编译时不小心改了啥),可以先手动备份数据:
- 用Android Studio的Device File Explorer,找到你的App数据目录:
/data/data/你的应用包名/ - 把
shared_prefs文件夹(存Preferences的)和databases文件夹(存Room数据库的)导到电脑上备份,就算更新出问题,还能把这些文件导回手机恢复数据。
内容来源于stack exchange




