一、什么是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工程结构关系如下图

Android instant是干啥的 studio instant安卓版_ci

(1)Instant app module:图中对应的就是即时应用,具体如下工程截图,注意该module只有一个build.gradle文件,

当选择运行instantapp配置之后,会在该模块目录下生成build目录,同时可以看到这个神奇的即时应用就是一个压缩包。

Android instant是干啥的 studio instant安卓版_ci_02

Android instant是干啥的 studio instant安卓版_gradle4_03

重点看看这个gradle文件:

apply plugin: 'com.android.instantapp'

dependencies {
    implementation project(':feature')
    implementation project(':base')
}

通过这个com.android.instantapp插件,分别编译这个base和feature工程代码最后压缩成instantapp-debug.zip,通过解压这个文件可以验证一个module编译

成一个单独的apk,如下图

Android instant是干啥的 studio instant安卓版_instant app_04

(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,如下图

Android instant是干啥的 studio instant安卓版_android_05

(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运行图:

Android instant是干啥的 studio instant安卓版_androidstudio3_06

Android instant是干啥的 studio instant安卓版_androidstudio3_07

(5)官网文档:https://developer.android.com/topic/instant-apps/overview.html