小程序業務覆蓋安裝調研

一、概念

手機應用安裝的方式有非常多,在移動端測試中,我們比較關注應用是全新安裝,還是覆蓋升級安裝,因為這兩不同的安裝方式可能會帶來一些隱藏比較深的問題。而對于一個在市場已經有大量用戶的APP來說,升級安裝應該是絕大多數用戶選擇的方式,在上個季度復盤覆蓋安裝導致的bug時,統計發現影響用戶數量在80%以上,也就是說至少80%的用戶是通過應用市場更新的。

覆蓋安裝,是指用戶在不清除用戶數據或本地緩存設置的情況下,對應用進行功能性的升級,在升級過程中,老版本所產生的用戶數據需要正確遷移,才能保障用戶升級后的功能可用性。

那么,移動應用的覆蓋安裝測試中我們需要關注哪些點?應用中功能很多,覆蓋時不可能全部遍歷,在每次的項目測試中,我們也不可能把項目用例都過一遍。因此,我們需要理清在應用覆蓋安裝過程中究竟做了什么操作以及會影響到哪些功能,那剩余不受影響的部分就是我們能夠“減少工作量”的地方。

二、覆蓋安裝關注點

2.1應用安裝過程

首先了解一下應用安裝的四大步驟:

(1)拷貝apk到指定的目錄:默認情況下,用戶安裝的apk首先會拷貝到/data/data/app下,用戶有訪問/data/data/app目錄的權限,但系統出廠的apk文件會被放到/system分區下,包括/system/app,/system/vendor/app,以及/system/priv-app等,該分區需要root權限的用戶才能訪問。
(2)加載apk、拷貝文件、創建應用的數據目錄:為了加快APP的啟動速度,apk在安裝的時候,會首先將APP的可執行文件(dex)拷貝到/data/dalvik-cache目錄下,緩存起來。再在/data/data/包名目錄下創建應用程序的數據目錄(以應用包名命令),用來存放應用的數據庫、xml文件、cache、二進制的so動態庫等。
(3)解析apk的AndroidManifest.xml文件:在安裝apk的過程中,會解析apk的AndroidManifest.xml文件,將apk的權限、應用包名、apk的安裝位置、版本、userID等重要信息保存在/data/system/packages.xml文件中。
(4)顯示icon圖標:應用程序經過PMS中的邏輯處理后,相當于已經注冊好了,如果想要在Android桌面上看到icon圖標,則需要Launcher將系統中已經安裝的程序展現在桌面上。

在應用安裝過程中,主要涉及以下幾個目錄:

/data/app/包名: 代碼程序安裝目錄,安裝時會把apk文件復制到此目錄下

/data/data/包名:存放用戶數據的目錄

不管是全新安裝還是覆蓋安裝,程序代碼目錄/data/app/包名肯定是完全更新了的,但用戶數據目錄/data/data/包名則需要視業務而定,如果新舊版本對數據格式或內容要求一樣,則用戶數據目錄不需要更新,但若新版本的數據格式不兼容舊版本,則需要將舊版本數據按新版本的格式進行遷移,這些數據變化所影響到的功能模塊便是測試關注的重點。

2.2 主要的數據

對于一個應用來說,可能會用到的本地緩存有:

  • sqlite本地數據庫文件
  • share preference配置的xml文件
  • 其他文本或二進制文件

從數據庫來看,其變更可以分為:

  • 已有數據庫表結構的增加、刪除、修改
  • 數據內容的更新
  • 新增/刪除數據庫或表

對于其他文本或二進制文件,則需要根據業務使用情況而定了

三、小程序框架

3.1 所用數據庫

對于小程序框架業務而言,用到了哪些本地緩存相關的呢?我們可以直接用adb shell命令查看,如果手機沒有root,是無法查看/data/目錄的,但如果安裝的應用開啟了debug模式,可以用run-as命令進入該數據目錄,如下圖所示

image.png

用戶數據目錄存放的文件非常多,具體業務用到哪些可以咨詢下開發。但通常來講,databases目錄是存放sqlite數據庫文件的,files存放普通文本文件,shared_prefs是一些xml文件。

image.png

從上圖得知,小程序框架的數據庫主要有ai_apps.db和ai_apps_pms.db兩個數據庫,但未root的手機,adb shell里無法直接執行sqlite3命令,如果想查看數據庫內容,可以先用tar命令將databases目錄打包,然后mv到/sdcard/目錄,最后用adb pull到PC端,用sqlite3查看便可。如果有android studio可以用view → tools window → device file explorer,找到目錄然后右鍵save as到PC機也行

image.png

拿到數據庫.db文件后,就可以在pc端用sqlite3命令查看了,也可以安裝一個sqlite studio軟件。小程序框架用到的ai_apps庫中有4個表,ai_apps_aps_data是百度的統計信息,由于我們有自己的pingback,所以無需關注,ai_apps_favorites,ai_apps_cloud_config是百度那邊下發的一些云配置相關,看代碼應該是已經棄用 ,剩下的favorites收藏表和history訪問歷史表,收藏即是更多菜單欄內 “添加到我的小程序”功能,訪問歷史是記錄用戶打開過的小程序列表,這兩塊功能在愛奇藝端已經單獨實現,不依賴此本地數據庫,所以也不需要關注


image.png

在ai_apps_pms數據庫中,有extension表保存的是當前extension私有擴展js庫的版本號信息,framework表保存的是swan core基礎庫版本信息,在安裝或日常啟動小程序時,會檢測小程序js基礎庫最新版與當前本地緩存版本對比,若有更新,則更新本地的基礎庫。pkg_main和pkg_sub保存的訪問過的小程序代碼包的信息,在小程序再次啟動時會優先用本地緩存包,同時會調接口檢查是否有新版,若有新版,則下載新版小程序包并保存到本地,下次啟動時便是新版代碼了。swan_app是保存訪問過的小程序的基礎信息,主要是聯合其他表使用。

這個數據庫的操作代碼全部位于swan-android,即百度開源的項目,對于宿主來說,基本不會去動,除了需要升級小程序框架外(同步百度最新的框架代碼),如下是涉及到數據庫更新表結構相關的代碼。

image.png

image.png

因此綜上所述,涉及到數據庫相關的,我們可能要關注的功能有:

  • 添加到我的小程序
  • 小程序訪問記錄
  • 基礎庫swan-core版本的更新
  • 私有擴展庫extension版本的更新
  • 小程序代碼包的下載和更新
  • 小程序sub分包的下載和更新

3.2 所用緩存文件

小程序框架所用到的緩存文件集中在files/aiapps_folder和files/zeus/內,zeus目錄是用來存放百度webview內核(支持同層渲染,針對小程序定制的webview,系統webview不支持),aiapps_folder內主要是訪問過的小程序代碼包、swan-core(基礎庫)、extension(私有api擴展庫)、cloud_config(小程序配置信息,主要是配置的可訪問域名信息),如下圖所示

image.png

因此綜上所述,涉及到緩存文件相關的功能有:

  • 基礎庫swan-core js
  • 私有擴展庫extension js
  • 小程序代碼包的加載
  • 配置的可訪問域名信息
  • 百度同層渲染webview內核的更新

四、總結

經過對小程序框架內所用數據庫和緩存文件的分析,我們已經總結出可能需要驗證覆蓋安裝case的功能。再以日常項目為維度出發,我們需重點關注覆蓋安裝的項目有:

  • 框架升級
    愛奇藝內一般不會緊隨百度版本,所以框架升級一次一般會跨越百度多個版本,涉及功能變更較大,其數據庫或使用的緩存文件格式可能會有所改變,因此必須驗證覆蓋安裝
  • 增加或更新私有API邏輯
    增加或更新私有API,都會涉及extension.js的更改,該js文件有版本控制,全新安裝時會使用新包內的js,而覆蓋安裝時會對比老版本,若檢測到版本不變則不會更新,可能會導致新增或修改過的API不可用
  • 百度同層渲染webview內核
    目前百度webview內核存在云端,首次啟動小程序會下載該so庫放于本地,因此若涉及到更新webview內核時,需驗證覆蓋安裝時,內核是否成功更新
  • 百度發布新版本基礎庫
    小程序在啟動時,會檢查基礎庫版本,若百度發布了新版本,則會下載更新本地庫,也就是說基礎庫是保持和百度發版一致的
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容