A few questions :
What implications does upgrading an app have on stored data i.e. Preferences and database? Does the system perform a clean install of the new version(i.e. remove the older version and then install the new) or something else?
What if the user wants to retain the stored data- say values in the shared preference or a sqlite database?
How can I emulate this app-update-install scenario? If I have a version 'x' installed on my emualator and I do a adb install of version 'x+1' I am getting
INSTALL_FAILED_ALREADY_EXIST
error. Should I try hosting the new apk on a Web server, will the Package Manager take this as an update?
- All data persists (files, preferences, databases). Databases are special as you can specify a database version and if it detects the version changed it will call your
onUpgrade()
. For all others you're responsible of updating them to the new version, if needed. - As I said in 1, Android persists everything. It's up to you to handle any changes in the way you store your data.
- Use
adb install -r /path/to/newApk.apk
(notice the-r
flag, which tells adb to reinstall). Basically, the workflow should be the following:
.
adb uninstall my.package
adb install /path/to/old.apk
# play with app, set preferences, databases, etc.
adb install -r /path/to/new.apk
# watch your app crash in an impressive ball of fire
# fix stuff
# goto 0
Other notes: Yes, the app performs a clean removal of your app before installing the new version. As I said, however, your app's data is not removed. Still, you have to be careful, because this removal causes a few things:
- Any processes related to your app are killed (so if your app is running -- any activities, services, anything, all components will be killed).
- Anything related to your app is removed from the system, like notifications pushed via the
NotificationManager
, alarms set via theAlarmManager
, etc. I'm not sure what happens to any widgets you might have (never worked with widgets).
- You have to take care about that for yourself. Look for
onUpgrade()
method i.e. - As you have to take care for yourself, you can give the user the possibility to do everything.
- You should ensure you have the reinstall option set. Adb should update your application correctly than.
来源:https://stackoverflow.com/questions/4143926/questions-about-android-application-update