一、什么是Android Instant App
1、简单的理解就是google提出的小程序,大小限制在4M,依赖于google play的服务实现类似于打开网页url的方式来打开小程序。
2、优点:免安装,体积小,借助于Android Studio 3.0和gradle4.0可以在原有项目基础上调整为支持instant app和installed app的工程结构。
3、缺点:依赖google account和play的服务,功能受限比如需要运行时权限、目前不支持通知等。
二、环境相关
1、AndroidStudio 3.0
2、Instant SDK
3、API23+
4、Gradle4.0
三、工程结构
1、Instant app与Installed app工程结构关系如下图
(1)Instant app module:图中对应的就是即时应用,具体如下工程截图,注意该module只有一个build.gradle文件,
当选择运行instantapp配置之后,会在该模块目录下生成build目录,同时可以看到这个神奇的即时应用就是一个压缩包。
重点看看这个gradle文件:
apply plugin: 'com.android.instantapp'
dependencies {
implementation project(':feature')
implementation project(':base')
}
通过这个com.android.instantapp插件,分别编译这个base和feature工程代码最后压缩成instantapp-debug.zip,通过解压这个文件可以验证一个module编译
成一个单独的apk,如下图
(2)App module:这个对应的就是installed app,即需要下载安装的应用,它倒是与原来的AS工程结构变化不大,主要是在build.gradle这个文件,具体代码如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.example.myfirstinstantapp"
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation project(':feature')
implementation project(':base')
}
改动的地方与前面提到的类似,通过依赖的方式引入feature和base工程,也就是说是以工程库(aar)的方式打包到apk中的,可以验证这个,点击运行就会生成熟悉的apk,如下图
(3)base feature:由上图可以看出,其它的Feature module都是要依赖这个模块,因此其作用就比较明显了,是用于放置通用的代码和资源文件。
总之,编译instant app是以apk的方式参与打包;而编译installed app 则是以aar的方式参与打包。具体看看它的gradle文件
apply plugin: 'com.android.feature'
android {
compileSdkVersion 25
buildToolsVersion "26.0.0"
baseFeature true
defaultConfig {
minSdkVersion 23
targetSdkVersion 26
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
application project(':app')
feature project(':feature')
implementation 'com.android.support:appcompat-v7:25.+'
api 'com.android.support:appcompat-v7:25.4.0'
api 'com.android.support.constraint:constraint-layout:1.0.2'
}
说明:首先需要添加com.android.feature这个插件,其次是在依赖配置处,application project和feature project就是与app和feature两个模块建立起联系的关键配置,
或者说就是决定了base模块参与打包的方式。
注意:每一个feature module都需要在这个地方进行声明。
(4)最终看看instant app运行图:
(5)官网文档:https://developer.android.com/topic/instant-apps/overview.html