03月11, 2014

Android覆盖安装及常遇到的问题

Android 覆盖安装

a. 覆盖安装apk文件后,shared_prefs中的数据不会丢失,数据库表中的数据也不会丢失。
b. 升级数据库的方法

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

这个方法会在你做任何的数据库操作之前执行。就是说任何数据库操作之前都会先升级数据库,再进行操作。

c. 安装apk时,系统pm会将当前的apk重命名,并复制到data/app/路径下,并删除之前版本的apk。

覆盖安装引起问题的原因:

  1. 数据库表结构的变动(增加一个字段,减少一个字段,甚至是新表的建立)。

数据库结构修改必须升级数据库版本,并对相应版本进行处理。此外,任何在发版之前修改数据库表结构的行为都是不可取的,即使是很简单的逻辑。

  1. 数据与当前版本的不匹配(数据超出上限或下限),会引发逻辑出错、数组越界等问题

有任何数组结构的修改,无论是增加还是减小了数组,都要进行容错处理。

另外,在覆盖安装时会发现,部分手机在覆盖安装老版本的app时,出现“INSTALL_FAILED_VERSION_DOWNGRADE”错误,这个问题仅出现在Android 4.2及以上版本,经查阅Android源码,发现在4.2版本之后加入了验证,不允许覆盖安装versioncode比当前版本低的apk。如果想使用低版本,只能先卸载再安装(这对开发者来说是非常友好的)。

Android覆盖安装及遇到的问题

同时推荐一个查看Android、JAVA源码的网站,这个网站面向于java开发人员,并加入了批注,非常简洁好用:

http://grepcode.com/

本文链接:http://blogs.360.cn/post/android覆盖安装及遇到的问题.html

-- EOF --

Comments