0.官方文档
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
如图上所示,每个module的gradle文件对应不同的插件,比如base module需要使用
apply plugin: 'com.android.feature'
而不是com.android.library.
(2)Instant的打包的zip包如下所示
这是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"
并在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
最终项目如下图所示
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了,这样就没办法做到一个动态的更新。