天天看點

Apk更新過程中排查問題所引發的思考

本篇文章為工作中問題排查解決過程及問題解決後的思考。

前置改動說明:業務相關的 apkA: 一個Launcher 主應用, 一些背景服務相關的apkB: 輔助應用,由于業務需要,在 apkA 中增加了啟動 apkB 中的某個 service 相關的代碼, 且在 apkB 中 manifest 檔案對應 service 增加了 exported = true 屬性。

問題說明: 在僅更新apkA時,重新開機裝置, 此時裝置卡在開機畫面, 無法進入Launcher主應用。

問題排查過程:檢視增加的代碼處的相關日志,對裝置中拉取的日志進行關鍵字過濾,發現啟動 service 時報異常如下:

java.lang.SecurityException: 
           Not allowed to start service 
           Intent { cmp=xxx.xxx.xxx/.xxxService }
           without permission not exported      

報錯很清楚,不允許啟動未添加 exported 權限的服務。即如果不添加 exported = true,則該服務無法從外部進行啟動。 結合問題說明, 出現問題說明中的現象也就可以解釋通了。 即:僅更新 apkA 後, apkA 中增加了調用 apkB 中服務的相關代碼, 但是未更新 apkB, 舊版 apkB 中沒有添加 exported = true 屬性, 導緻出現問題。

問題解決後的反思:

在新增功能時, 一定要考慮對舊版本 apk 進行相容,把 apk 更新過程中可能對舊版本的影響以及相關的解決方案都設計好,才能順利地完成更新。

繼續閱讀