Android Instant App

来源:互联网 发布:qq for linux 2017 编辑:程序博客网 时间:2024/05/28 19:23

一、什么是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

阅读全文
1 0
原创粉丝点击