小程序业务覆盖安装调研

一、概念

手机应用安装的方式有非常多,在移动端测试中,我们比较关注应用是全新安装,还是覆盖升级安装,因为这两不同的安装方式可能会带来一些隐藏比较深的问题。而对于一个在市场已经有大量用户的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阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容