初识Google Play Instant

0.官方文档

  • Google Doc
  • Codelabs Multi-Features Instant App
  • Git Hub Samples

Google Play Instant可以让原生应用或者游戏在android 5.0以上免安装运行。这个免安装应用一般是完整应用的一部分功能。
免安装的应用必须先发布到Google Play商店,该应用会对应一个URL,可以通过Google Play、 浏览器、二维码、NFC等多种途径体验免安装应用:
比如在有google play的手机上通过如下方式就可以打开一个instant app而不用安装。

val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com/tripsapp"))
startActivity(intent)

1.简介

(1) 整个项目的架构类似于我们常说的组件化架构,一个base module, n个feature module,另外有个两个空的入口module,一个是正常打包APK的installed module,另一个是会为每个feature module和base module生成apk的zip包的instant module


初识Google Play Instant_第1张图片
工程架构

如图上所示,每个module的gradle文件对应不同的插件,比如base module需要使用

apply plugin: 'com.android.feature'

而不是com.android.library.

(2)Instant的打包的zip包如下所示

初识Google Play Instant_第2张图片
instant result

这是instant app刚推出时的打包方案,现在google推荐使用 app bundles的打包格式,app bundles不但可以实现instant app,还可以支持dynamic delivery(google play根据当前设备选择对应的drawable/abi/language,对态生成apk,这样就去除了无用资源,可以大大减少包大小并保证用户体验不受影响)。
关于app bundles还没做深入学习了解,有时间再了解下。

2.集成

github上有google samples可以做参考,这里简单介绍一下大概的流程。
(1)将已有的app module的application插件改成feature,重命名为base。在gradle中添加

android {
   .....
   baseFeature true
}

(2) 根据需要添加feature module,选择"Instant App Feature Module"


初识Google Play Instant_第3张图片
new module

并在gradle中添加base module的依赖。
(3)添加installed module。选择上图中的 "Phone & Tablet Module" ,在下一步中选择NoActivity,并且compile 相关的feature module。
(4)添加instant module。选择上图中的"Instant App",并且compile 相关的feature module。
(5)编辑link url。点击 Tools -> App Links Assistant -> Open URL Mapping Editor


初识Google Play Instant_第4张图片
edit url

最终项目如下图所示
初识Google Play Instant_第5张图片
final project

3.总结

(1) Instant App总的来说限制还是比较多的,比如必须要Google Play的支持,单个APK大小推荐不大于4MB,Android5.0以上才支持,一些权限如文件读写不能使用等。逛了一圈Google Play Store, 用Instant App的应用还是非常少的。
(2)关于插件化,目前来说应该可以做到一些插件化的效果,Installed App依赖一部分feature,而Instant App依赖所有的feature,这样就可以在Installed App通过Instant App的URL去动态加载相关模块。但是测试需要Google开发者账号,并没有亲测是否能实现该效果。
即使能实现也是有一些限制的,比如当相关Instant App在本地有缓存之后就不会再拉取最新的app了,这样就没办法做到一个动态的更新。

你可能感兴趣的:(初识Google Play Instant)