Android 覆盖安装
a. 覆盖安装apk文件后,shared_prefs中的数据不会丢失,数据库表中的数据也不会丢失。
b. 升级数据库的方法
0 |
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) |
这个方法会在你做任何的数据库操作之前执行。就是说任何数据库操作之前都会先升级数据库,再进行操作。
c. 安装apk时,系统pm会将当前的apk重命名,并复制到data/app/路径下,并删除之前版本的apk。
覆盖安装引起问题的原因:
1. 数据库表结构的变动(增加一个字段,减少一个字段,甚至是新表的建立)。
数据库结构修改必须升级数据库版本,并对相应版本进行处理。此外,任何在发版之前修改数据库表结构的行为都是不可取的,即使是很简单的逻辑。
2. 数据与当前版本的不匹配(数据超出上限或下限),会引发逻辑出错、数组越界等问题
有任何数组结构的修改,无论是增加还是减小了数组,都要进行容错处理。
另外,在覆盖安装时会发现,部分手机在覆盖安装老版本的app时,出现“INSTALL_FAILED_VERSION_DOWNGRADE”错误,这个问题仅出现在Android 4.2及以上版本,经查阅Android源码,发现在4.2版本之后加入了验证,不允许覆盖安装versioncode比当前版本低的apk。如果想使用低版本,只能先卸载再安装(这对开发者来说是非常友好的)。
出处:http://blogs.360.cn/360qtest/2014/03/11/android覆盖安装及遇到的问题/