Android Instant App调研报告

概述

instant app 是谷歌推出的类似微信小程序(或者说小程序类似于instant app)的一项技术,用户无须安装应用,用完就走,同时兼备h5的便捷和原生应用的优质体验。

工作方式和应用场景

工作方式

当用户点击链接时,通过app link去打开相应的instant app,如果之前没有打开过,则会从play store去下载并打开,整个过程一气呵成,跟浏览器打开网页,如果有缓存先读缓存,没有就去服务器loading一样。

应用场景

  • 通过直接点击链接进入(从社交网络或短信中点击链接);

  • 通过浏览器搜索,如搜索X电商的y商品,通过点击浏览器的搜索结果可直接进入instant app;

  • 通过google play可以先试用部分功能,觉得不错再安装完整功能;

  • 在游戏中方面的应用,跟上面类似,相当于游戏试玩。

Instant App与微信小程序的对比

从部署到手机角度讲

这一点简直是小程序完胜,毕竟Google Service不能正常的引进大陆,这一点上小程序占尽了天时地利。

小程序可以利用微信的小程序功能,添加附近商家的小程序,也可进行搜索小程序;而Google的Instant App,想要使用此项技术,必须保证你的完整App要在Google Play上有正式发布,用官方的话来说,我们要让用户体验到无缝对接。

这一点来看,个人感觉还是Google做的更为周到细致,虽然在大陆没什么卵用。

从程序体积来讲

从这一点来讲,Instant App的控制要比小程序要好。在Google官方要求里,每个Instant App程序最大不得超过4M的大小,一旦超过,必须重新划分模块,再缩减体积;

而小程序来讲,没有一个明确的大小上限,如果业务简单,你可以控制在1M-2M的大小,如果业务复杂,包大小也能达到10M都不足为奇。

所以这一点对于用户来讲,用户肯定喜欢用最少的开销,体验到业务。我们肯定不希望大把的手机空间,浪费给一个程序,特别是对那些手机空间严重不足的用户,我觉得这一点Instant App胜利。

从存储角度来讲

对于小程序,数据会存储到手机的存取区域,并且每次加载小程序时,是加载本地存储优先。

Instant App则是将程序的部分代码下载下来存储到本地存储,同样在每次加载时,也会优先检查本地存储是否有代码。

从存储机制来讲,差别不太大。如果从底层实现的方式来看,小程序利用的是H5的存储机制,Instant App利用的是常见的java存储机制。

从页面解析速度来讲

其实用户关注的这一点是尤为重要。对于小程序而言,毕竟底层是用HTML的实现方式,而Instant App底层用的是java的实现方式。

我们看小程序的展现过程,首先利用微信小程序特有的编码方式,转换成HTML,再来渲染、解析、展现等操作;而Instant App不需要这么麻烦,它天生就可以用Android来编写,然后通过下载这部分代码到本地,使用Instant App时,显然就是本地应用的用户体验,流畅度要比HTML页面展现的方式顺滑很多,这是Instant App能绝对胜出的一点。

综合对比,Instant App从用户体验角度来看,要比小程序好很多,体验起来让用户有种“我并没有安装这个程序,就能体验到和程序同样的丝滑体验”的感觉。但是从可实施角度看(我指的是只在大陆范围内),Instant App天生就不如微信小程序。

一些限制

  • Activity必须相对独立

  • 没有自定义的后台服务

  • 不能有自定义的content provider

  • 不能使用NDK

  • 不能使用反射、内省

启动流程

用户点击link=>上传设备信息(cpu,屏幕,等硬件信息)=>服务器找到对应的app=>下载所需数据=>google play服务运行Instant App
Android Instant App调研报告_第1张图片

工程结构

Android Instant App调研报告_第2张图片
1)Instant app module:对应的就是即时应用,当选择运行instant app配置之后,会在该模块目录下生成build目录,同时可以看到这个神奇的即时应用就是一个压缩包;

2)App module:对应的就是installed app,即需要下载安装的应用;

3)Base feature:由上图可以看出,其它的Feature module都是要依赖这个模块,因此其作用就比较明显了,是用于放置通用的代码和资源文件。

总结:

  • Base feature是将程序架构成拥有一个最顶级的feature module,这个feature module内集合你的Instant App或者其他子module在运行时需要的一些必要资源内容,包括Activity、Fragment等资源,这样能相对减少你的子module的资源大小,从而减少你宝贵的流量消耗;

  • APK module和Instant App module共同构成base feature module;

  • Instant App应使用App Links作为功能的接入口,因为App Links具有独特的验证方式,能与Google服务进行互通,且瞬时加载程序是依托于Chrome浏览器来进行交互的,所以需要使用App Links作为功能的接入口。

  • 另外,编译instant app是以apk的方式参与打包,而编译installed app则是以aar的方式参与打包。

原理猜想

从谷歌的各种文档和各种博客中都提到,模块化现有的程序猜想,应该是由google play提供类似“沙盒”的东西(这个东西其实目前国内也有一些开源库有实现类似的功能,例如360插件,动态加载activity,插件化等,猜想谷歌实现的原理也是差不多),APP再细分成一个个比较独立的模块,运行于沙盒上。

你可能感兴趣的:(Android,进阶)