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覆蓋安裝及遇到的問題/