Instant Run
1.Instant Run 简介
官网:
https://developer.android.com/studio/run/index.html#instant-run
Android Studio 2.0 中引入的 Instant Run,方便快速调试应用. 无需构建新的 APK 即可推送新的更改,一些情况下,应用甚至无需重启就可以立即显示代码更改的效果。
部署应用后,点中现黄色小闪电图标就可以调试或运行.可以为这个按钮指定个快捷键.
2.Instant Run 工作方式
Instant Run 通过执行热替换、温和替换或冷替换向连接的设备或模拟器推送更新的代码和资源。它会根据所做更改的类型自动确定要执行的替换类型。
代码更改 | Instant Run 行为 |
---|---|
|
通过热交换支持:这是最快的替换类型,使更改能够更快地显示。您的应用保持运行, 下次调用存根方法时会使用具有新实现的存根方法。 热替换不会重新初始化您正在运行的应用中的对象。您需要重新启动当前的行为, 或者重新启动应用才能看到特定更新。 默认情况下,Android Studio 在执行热替换后会自动重新启动当前的行为。 如果您不想重新启动,可以停用自动行为重新启动。 |
|
通过温和替换支持:这种替换速度也非常快,但 Instant Run 在将更改的资源推送至 您的应用时必须重新启动当前的行为。您的应用保持运行,行为重新启动时屏幕 上会出现小闪烁 - 这是正常情况。 |
结构性的代码更改,例如:
|
通过冷替换支持(API 级别 21 或更高):这种替换速度有点慢,因为尽管不需要新的 APK, Instant Run 在推送结构性的代码更改时必须重新启动整个应用。 对于运行 API 级别 20 或更低的目标设备,Android Studio 会部署完整的 APK。 |
3.Instant Run设置
3.1 关闭Instant Run
- 打开 Settings 或者 Preferences 对话框。
- 导航至 Build, Execution, Deployment > Instant Run。
- 取消选中 Enable Instant Run 旁边的方框。
3.2 设置选项
在上图中同样可以设置Instant选项.
3.3 通过配置 DEX 资源缩短构建时间
在模块的 build.gradle中
android { ... dexOptions { maxProcessCount 4 // this is the default value javaMaxHeapSize "2g" } }
maxProcessCount 设置可以并行启动的 DEX 进程的最大数量
- javaMaxHeapSize 设置 dex 操作的最大内存分配池大小。可以附加字母“k”来表示千字节,附加“m”表示兆字节,或者附加“g”表示千兆字节。
3.4 启用 dexing-in-process 和增量 Java 编译
- 增量 Java 编译默认情况下处于启用状态,这种编译方式仅对发生变化或需要重新编译的源代码部分进行重新编译,可以缩短开发过程中的编译时间。
- dexing-in-process 在构建流程而不是单独的外部 VM 流程中执行 dexing。这样不仅可以让增量构建更快,也可以显著提高完整构建的速度。要启用此功能,您需要将 Gradle 后台进程的最大堆大小设置为至少 2048 MB。要进行设置,您可以将以下代码包含到项目的
gradle.properties
文件中:org.gradle.jvmargs = -Xmx2048m
如果您已经在模块级别的
build.gradle
文件中为javaMaxHeapSize
定义值,则需要将后台进程的最大堆大小设置为javaMaxHeapSize
的值 + 1024 MB。例如,如果您已将javaMaxHeapSize
设为“2g”,则需要将以下代码添加到项目的gradle.properties
文件中:org.gradle.jvmargs = -Xmx3072m
4.Instant Run 的限制
限制 |
详细说明 |
sdk要求 |
minSdkVersion 设置为 15 或以上时,Instant Run 才受支持。 |
Cmake/ndk |
用cmake/ndk编译的库,不支持Instant Run |
Profile |
当分析应用性能时,要关掉Instan Rrun. Note: While profiling an app, you should disable Instant Run. There is a small performance impact when using Instant Run and a slightly larger impact when updating methods. This performance impact could interfere with information provided by performance profiling tools. Additionally, the stub methods generated while using the feature can complicate stack traces. |
部署到多种设备 |
Instant Run 使用多种不同的技术执行特定于目标设备 API 级别的热替换、温和替换和冷替换。 因此,同时将应用部署到多种设备时,Android Studio 会暂时关闭 Instant Run。 |
应用的 Dalvik 可执行文件分包 |
如果您的项目面向旧版 Dalvik 可执行文件分包(即,使用 或更低版本配置 Android Studio 会停用 Instant Run。 如果将 由于 Instant Run 仅适用于调试版本的应用,在部署发布构建变体时,您需要配置应用进行 Dalvik 可执行文件分包。 |
运行仪器测试和性能分析器 |
仪器测试会将调试 APK 和测试 APK 同时加载到测试设备上的相同进程中,这样,控制方法可以替换应用的正常生命 周期并执行测试。在运行或调试仪器测试时,Android Studio 不会注入 Instant Run 需要的其他方法并将此功能关闭。 分析应用时,您应停用 Instant Run。使用 Instant Run 会轻微影响性能,而替换具有热替换的方法则会产生稍大的影响。 这种性能影响会干扰性能分析工具提供的信息。此外,每次热替换生成的存根方法都会使堆叠追踪变得复杂。 |
使用第三方插件 |
使用 Instant Run 时,Android Studio 会暂时停用 Java Code Coverage Library (JaCoCo) 和 ProGuard。 由于 Instant Run 仅适用于调试版本,停用不会影响您的发布版本。 某些执行字节码增强的第三方插件可能会对 Instant Run 设置应用的方式造成影响。如果您遇到这些问题, 但是想要继续使用 Instant Run,那么应针对您的调试构建变体停用这些插件。 您还可以通过提交错误的方式帮助提升与第三方插件的兼容性。 |
将更改推送至多进程应用 |
为了执行热替换和温和替换,Instant Run 仅设置应用的主进程。将代码更改(例如对方法实现或现有资源的更改) 推送至其他应用进程时,Instant Run 会执行冷替换。 |