Instant Run直译为及时运行,就修改的代码可以直接体现出来,不需要重新编译;默认在Android Studio2.0以上自动集成Instant Run功能
使用 Android Plugin for Gradle 版本 2.0.0 或更高版本,以及在应用的模块级别 build.gradle 文件中将 minSdkVersion 设置为 15 或以上时,Instant Run 才受支持。为获得最佳性能,可以将 minSdkVersion 设置为 21 或更高
以下demo是在Android Studio3.0,gradle为2.14.1的版本中测试,之前编译到运行到该10秒,执行instan run之后,大概2,3秒就看到效果了
我们可以看到如下图所示,有一个灰色的闪电图标。这个图标的作用就是Instant Run,灰色当然代表不可使用,我们需要配置下
在使用Instant Run之前,我们需要在Setting中配置下
,这里我将rstart activity给去掉了,这是因为不涉及到生命周期的方法,我们可以不重启activity,快速看到效果;
配置之后,你会发现闪电图标可用了
点击闪电图标,就可以快速的将变更代码部署到手机上
我们看下原先一个app从编译到运行完整的过程
那Instant Run是如何运行的?请看下图
从这张图可以看出,Instan Run分为三种类型
1:Cold Swap:app需要被重启(但是仍然不需要重新安装)
场景:任何涉及结构性变化的,比如:修改了继承规则、修改了方法签名等
2:Warm Swap:activity需要被重启才能看到所需更改,生命周期会重新走一次
场景:典型的情况是代码修改涉及到了资源文件,即resources
3:Hot Swap:代码改变被应用、投射到APP上,不需要重启应用,不需要重建当前activity。
场景:适用于多数的简单改变
Android Stuido会根据具体自主选择交换模式,实现Instant Run的效果;
Instant Run的背后逻辑是什么?
从上图可以看出,在Instant Run中,appserver会被注入到App中,修改的代码会被编译为单独的dex文件,这些新增的dex会被发送到appserver中,然后部署到App中,这个和dex分包技术进行热修复的技术还是很相似的;