緣由
前幾天運營說運營商對平臺的app退出方式提了新要求,我們做的是電視盒子的app,目標受眾和普通app不太一樣,本來是不應該頻繁更新的,使用者體驗會不好,但是誰讓我們遇到不講理的甲方了呢,一個小功能必須要改,沒辦法只能上了。
坑
開發過程一切順利,當打好包測試覆蓋安裝時怎麼也安裝不上,提示解析失敗,一般像這種情況多半是簽名問題,當時心裡一緊--難道上次升級是debug版本的,心想完了。但是後來又一想不會這樣,每次升級apk都是發的郵件,他們不會有debug版的安裝包,看來不是簽名問題。然後後面就開始一種可能一種可能的試:
- 系統不允許從磁碟安裝--測試安裝其他產品apk,覆蓋安裝沒問題,說明不是這個問題
- 打包的apk檔案有問題--解除安裝原來app,從磁碟全新安裝沒問題--安裝包也沒問題
這兩步試完就很絕望了,繼續猜測可能版本號有問題,所以版本號改大了幾位,重新試還是不行,沒辦法想著列印下安裝過程的日誌,看看會不會有什麼驚喜,日誌很長,就先試著搜尋下包名,一搜還真發現了,具體在加粗部分:已經安裝的版本號比我們新打包的版本號高,看到這又聯想起之前的一件事馬上就明白了
//.......有刪減
03-26 10:49:23.693 4389-17804/? I/ActivityManager: START u0 {dat=file:///storage/external_storage/sda4/測試apk/xxxxxxxxxx.2.001.025.022_new.apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras)} from pid 3453 03-26 10:49:23.693 4389-17804/? I/ActivityManager: start package name is com.android.packageinstaller, class name is com.android.packageinstaller.InstallAppProgress, error code is 0 03-26 10:49:23.713 4389-17804/? W/ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1206 com.android.server.am.ActivityStackSupervisor.startActivityLocked:1334 com.android.server.am.ActivityStackSupervisor.startActivityMayWait:761 com.android.server.am.ActivityManagerService.startActivityAsUser:3376 com.android.server.am.ActivityManagerService.startActivity:3354
//.......有刪減
03-26 10:49:23.743 3453-3453/? W/InstallAppProgress: Replacing package:com.xxx.xxx 03-26 10:49:23.763 4389-4633/? W/ActivityManager: No content provider found for permission revoke: file:///storage/external_storage/sda4/測試apk/xxxxxxxxxx.2.001.025.022_new.apk 03-26 10:49:23.763 4389-4633/? W/PackageManager: Can't install update of com.xxx.xxx update version 20170920 is older than installed version 20180205 03-26 10:49:23.813 4389-4462/? I/ActivityManager: Displayed com.android.packageinstaller/.InstallAppProgress: +91ms
//.......有刪減
結論
去年大概9、10月的時候我們app上線,下載安裝但是怎麼也打不開,後來我還出差過去看到底怎麼回事,結果去了一看下載的根本不是我們的app,而是另一個省和我們同包名的一個app,也就是說我們上線產品是按省劃分的,但是他們安裝確是從全國搜尋出來的,這樣一個很嚴重的bug,然後反饋給運營商後給我們的產品特殊處理了,包括檢測升級部分,他們是手動設定了一個版本號來檢測升級,不是根據apk的versionCode來判斷,然後他們就根據當時的日期給我們app設了個版本號然後就比我們app的versionCode高了導致怎麼也安裝不上,這裡不得不吐槽下,運營商半年了bug還沒改,之前還能正常覆蓋安裝,現在改的都不能覆蓋安裝了,越改bug越多。