對於Android系統而言升級意味著二個方面的升級,一個是系統的升級,另一個則是應用程式的升級。系統的升級,比較麻煩,通常的方式就是通過刷機來實現,雖然也聽說過可以通過OTA升級,但目前Android的裝置都沒有能夠像Apple裝置那樣順利的進行OTA升級,最主要的原因是裝置廠商很少維護已售出的裝置,所以沒有可用的升級鏡像。
這裡我們重點談談Android上面的應用程式的升級策略及其所帶來的問題。
無論你是通過Market還是其他方式來升級應用程式,它的工作方式都是醬紫的:把新版本的應用程式下載到本地,然後安裝新版本,PackageInstaller會替換掉老版本。醬紫的方式有以下幾個缺點:
- 升級速度比較慢,其實就相當於重新安裝一樣
- 傷不起的流量,一般的應用0~3M,有些大點的有4~9M,對於遊戲更是達到了10~30M,升級一次很恐怖啊
- 升級時,由於 要下載新版本,所以會浪費一些儲存空間
- 應用的資料和配置資訊,有時會丟失,比如選擇了UC作為預設瀏覽器,但升級後,它將不再是預設的,需要重新設定
- 舊版本所產生的資料,臨時資料不一定會被刪除
- 最噁心的是,如果二個版本的數位簽章不一致,會導致新版本無法安裝,要手動的把舊版本卸載,然後才能安裝新的版本
- 這點跟Market無關,那就是有些應用升級以後反爾不好用,完全不如舊版本
有少數的應用也有與PC上面軟體類似的自身升級的方法,但也都是下載新版本,卸載舊版本,再安裝新版本。所以,即便是軟體只更新了一個字串,那麼升級時也需要整體折騰。
時常在想,為什麼就不能像PC上面的軟體那樣,升級時只需要一個子集的升級包就可以了呢?可能的原因應該是有二個方面,一個是Android應用程式啟動並執行機制決定的,另一個則是Market管理的方便。
Android當中軟體安裝完成以後,不像PC機那樣解開了包,而是與安裝包一樣的儲存在系統中。它是在程式運行時才從安裝包中解析出需要的東西,載入進記憶體。所以,即使是應用只有部分更新,也沒有辦法像PC那樣,只弄個升級包,因為升級包無法替換進入到安裝包中。開發人員只能對軟體源碼進行更新,然後重新編譯打包成新版本。
那麼Market中軟體如果允許升級包的存在,那麼新使用者在購買的時候就要即買應用又買它的升級包,即要安裝應用,又要一個一個的安裝升級包,十分的不方便。
存在既有之的道理,希望有朝一日,它的升級策略能更加的友好一些,好用一些。