Instant Run详解

MySQL 8.0新增字段避坑指南:如何用INSTANT算法秒加字段不锁表 本文深入解析MySQL 8.0中INSTANT算法的原理与实战应用,提供了一份详尽的避坑指南。通过对比不同DDL算法,重点阐述了如何利用INSTANT算法实现秒级新增字段而不锁表,同时明确指出了算法失效的常见场景(如指定列位置、非空约束等)以及操作前的预判方法和安全流程,帮助DBA和开发者在核心业务表变更时规避风险,提升效率。 阅读详情

InstantRun详解

之前在写AndroidStudio提高Build速度这篇文章的时候写到,想要快,就用Instant Run。最近有朋友发来邮件讨论它的原理,最近项目不忙,索性就来系统的学习下。

Android Studio2.0开始引入了Instant Run,它主要是在Run和Debug的时候可以去减少更新应用的时间。虽然第一次Build的时候可能会消耗稍长的时间来完成,但是Instant Run可以把更新内容推送到设备上,而无需重新build一个新的apk,这样就会很快速的让我们观察到改变。

Instant Run只支持在build.gralde文件中配置的Gradle版本是2.0.0以上并且minSdkVersion是15以上才可以。为了能更好的使用,请将minSdkVrsion设置到21以上。

部署完应用后,会在Runimage(或者(Debugimage))图标上面出现一个小黄色的闪电符号,这就意味着Instant Run已经准备就绪,在你下次点击按钮的时候可以推送更新内容。它不需要重新构建一个新的APK,它只推送那些新改变的地方,有些情况下app都不需要重启就可以直接显示新改变的下效果。

配置你的应用来使用Instant Run

Android Stuido中项目使用Gralde2.0.0及以上版本会默认使用Instant Run。
让项目更新到最新的版本:

  1. 点击Settings中的Preferences按钮。
  2. 找到Build,Execution,Deployment中的Instant Run然后点击Update Project,如果Update Project部分没有显示,那说明你当前已经是最新版本了.
    image

修复类型

Instant Run通过热修复、暖修复或者冷修复来推送改变的代码和资源到你的设备或者模拟器上。它会根据你更改的内容来自动选择对应的修复类型。

  • 热修复: 更改的内容不需要重启应用甚至不需要重启当前的activity就可以让显示内容的改变,对于大部分通过方法内容改变的更改都可以通过这种方式来修改。
  • 暖修复: 需要重启activity才能让改变生效,在改变资源时会通过该方式。
  • 冷修复: 应用需要重启(不是重新安装)。对于一些方法方法结构和实现等结构性的改变需要通过该方式。

那具体更改内容和修复方式是怎么对应的呢?

  • 改变现在已经存在的方法
    这将通过热修复来执行,这是最快的一种修复方式。你的应用会在运行的过程中,在下次调用该方法时直接使用新实现的方法。
    热修复不需要重新初始化对象。在看到具体的更改之前,你可能会需要重启当前的activity或者应用。默认情况下Android Studio在执行热修复后会自动重启当前的activity。如果你不想要它自动重启activity你也可以在设置中禁用。

  • 更改或者移除已经存在的资源
    这将通过暖修复来执行:这也是非常快的,但是Instant Run在推送这些更新内容时必须要重启当前的activity。你的应用仍然会继续运行,但是在重启activity时屏幕可能会闪动-这是正常滴。

  • 结构性的改变例如:

    • 增删或者改变:

      • 一个注解
      • 一个变量
      • 一个静态变量
      • 一个方法结构
      • 一个静态方法结构
    • 更改该类集成的父类

    • 更改接口的实现列表
    • 更改类的静态修饰符
    • 使用动态资源id重新布局

    上面的这些改变都将通过冷修复(API 21以上才支持)来执行.冷修复会稍微有些慢,因为虽然不需要构建一个新的APK但是必须要重启整个app才能推送这些结构性的代码改变。对于API 20及以下的版本,Android Studio将重新部署APK。

  • 更改manifest文件或者更改manifest文件中引用的资源或者更改Android桌面widget的UI实现(需要Clean and Rerun)
    在更改清单文件或者清单文件中引用的资源时,Android Studio会自动的重新部署引用来实现这些内容的改变。这是因为例如应用名称、图标和intent filters这些东西是要在应用安装到设备时根据清单文件来决定的。
    在更新Android UI widget时,你需要执行Clean and Rerun才能看到更改的内容,因为在使用Instant Run时执行clean会需要很长的时间,所以你在更新UI widget时可以禁用Instant Run。

使用Rerun

如果修改了一些会影响到初始化的内容时,例如修改了应用的onCreate()方法,你需要重启你的应用来让这些改变生效,你可以点击Rerun图标。它将会停止应用运行,并且执行clean操作后重新部署一个新的APK到你的设备。

实现原理

正常情况下,我们修改了内容,想让让它生效,那就需要如下的步骤:

image

那Instant Run的目标也非常简单:

尽可能多的移除上面的步骤,来让剩下的部分尽可能更快。

这就意味着:

  • 只构建和部署新更改的部分。
  • 不去重新安装应用。
  • 不去重启应用。
  • 甚至不去重启activity。

image

普通情况下在你点击Run或者Debug按钮时,会执行如下的操作:
image

清单文件会被整合然后与你应用的资源重启打包成APK.同样的,.java的源代码会被编译成二进制,然后转换成.dex文件,他们也会被包含到APK中。

在使用Instant Run的情况下,第一次点击Run和Debug时Gradle会执行一些额外的操作:
image
instrumentation相关的二进制内容会被增加到.class文件中,并且一个新的App Server类会被注入到应用中。
同时也会增加一个新的Application类,来注入一些自定义的class loader并且能启动App Server。因此minifest文件会被修改来保证使用该新加的Application类(如果你已经创建了自己的Application类,Instant Run的版本将会用你定义的来进行代理扩展)

经过上面的操作Instant Run就开始执行了,以后如果你改变了代码部分,在重新点击Run或者Debug时,Instant Run将会通过热、暖、冷修复来尽可能的减少上面的构建过程。

在Instant Run更改内容前,Android Studio会你的应用版本是否支持Instant Run并且App Server是否运行在对其有用的端口(内部使用了Socket)。 这样来确定你的应用是否在前台运行,并且找到Studio所需要的构建ID.

总结一下,其实就是内部会对每个class文件注入instant run相关的代码,然后自定义一个application内部指定自定义的classLoader(也就是说不使用默认的classLoader了,只要用了Instant Run就需要使用它自定义的classLoader),然后在应用程序里面开启一个服务器,Studio将修改的代码发送到该服务器,然后再通过自定义的classLoader加载代码的时候会去请求该服务器判断代码是否有更新,如果有更新就会通过委托机制加载新更新的代码然后注入到应用程序中,这样就完成了替换的操作。

热修复过程

image

Android Studio会监听在开发过程中哪个文件发生了改变,并且通过一个自定义的Gralde task来只对修改的class文件生成对应的.dex文件。
这些新的.dex文件会通过Studio传递发布给应用中运行的App Server。

因为开始时这些文件的class已经存在到运行中的应用中-Gralde需要保证更新的版本来保证他们能覆盖之前已经存在的文件。这些更新文件的转换是由App Server通过自定义的class loader来完成的。

从现在开始,每次一个方法被调用时(不管在应用中的任何地方),被注入到最初的class文件中的instrumentation都讲去连接App Server来检查它们是否有更新了。 如果有更新,执行操作将被指派到新的充在的class文件,这样就会执行新修改的方法。

image

如果你设置断点,你会发现你调用的是override名字的类中的方法。
image

这种重新指定方法的方式在改变方法实现时非常有效,但是对于那种需要在Activity启动时加载的改变呢?

暖修复

暖修复会重启Activity。资源文件会在Activity启动时被加载,所以修改它们需要activity重新启动来进行加载。

现在,更改任何资源都会导致所有的资源都被重新打包病转移到应用中-但是以后会支持增量包的功能来让只打包和部署那些新修改的资源。

注意,暖修复在更改manifest件或者manifest文件中引用的内容时无效,因为manifest文件中的内容需要在apk安装时读取。更改Manifest文件(或者它所引用的内容)需要被全部构建和部署。

非常不幸的是,重启activity在做一些结构性的改变时无效。对于这些改变需要使用冷修复。

冷修复

在部署时,你的应用和他的子项目会被分派到10个不同的部分,每个都在自己单独的dex文件。不同部分的类会通过包名来分配。在使用冷修复时,修改的类需要其他所有相关的class文件都被重新打包后才能被部署到设备上。
这就需要依赖Android Runtime能支持加载多个.dex文件,这是一个在ART中新增的功能,它只有在Android 5.0(API 21)以上的设备总才支持。
对于API 20一下的设备,他们仍在使用Dalvik虚拟机,Android Studio需要部署整个APK。

有些时候通过热修复来改变的代码,但是它会被应用首次运行时的初始化所影响,这时你就需要restart你的应用来让其生效(快捷键是Command + Ctrl + R)。
image

Instant Run使用技巧及提示

Instant Run是由Android Studio控制的,所以你只能通过IDE来start/restart你的debug实例,不要直接在设备中start/restart你的应用,不然的话就会发生错乱。

Instant Run限制条件
  • 部署到多个设备

    Instant Run针对设备的不同API Level使用不同的技术来进行热、暖、冷修复。因此,如果同时部署一个应用到多个设备时,Studio会暂时关闭Instant Run功能。

  • Multidex

    如果你的项目支持传统的Multidex-也就是在build.gradle中配置了multiDexEnabled true和minSdkVersion 20及以下-当你部署应用到4.4以下的设备上时,Android Studio将会禁用Instant Run。

    如果minSdkVersion设置为21或者更高时,Instant Run将自动配置来支持multidex,因为Instant Run只支持debug版本,有需要在发布release版的时候配置你的build变量来支持multidex。

  • 使用第三方插件
    Android Studio在使用Instant Run时会暂时禁用Java Code Coverage Library和ProGuard。因为Instant Run只支持debug版本,这样也不会影响release版的构建。

  • 只能在主进程中运行
    目前热修复只能在主进程中进行,如果在其他进程中热、暖修复将无法使用,只能用冷修复来替代。

参考:


更多文章请参考AndroidNote

S7-1200与IFM IO-Link主站PROFINET连接与设定 在工业自动化现场,IO-Link是一种点对点数字通信方式,可让传感器和执行器不仅传输开关量,还能上传参数、身份与诊断信息。其原理是由IO-Link主站承接底层设备,再通过PROFINET等工业网络接入PLC,实现过程数据周期性交换和非周期参数读写。对中小型设备来说,这种架构能减少硬接线、支持远程调参,并把端口短路、设备未连接、设备ID不匹配等故障定位到具体通道,在包装、装配、物流分拣、锂电叠片等换型频繁场景中尤其实用。以西门子S7-1200作为PROFINET控制器、IFM IO-Link主站作为IO设备时 阅读详情

相关推荐

Android Studio 2.0 Instant Run无效(Instant Run没有闪电符号)

最近刚把Android Studio更新到了2.0 Beta4,但是却发现在老项目上Instant Run用不了(没有闪电符号),尽管我已经: 1)把gradle升级到了2.10 2)把项目根目录的build.gradle中的gradle插件也更新到了2.0.0-beta2 buildscript { repositories { jcenter() }

在Android的路上前行 9805

深入理解Instant Run——原理篇

前言 Instant-run是Android Studio 2.0开始引入的新特性,它的作用是使开发者在开发时的改动可以很快地被应用,节省开发者的时间。当改动了代码之后,不需要进行完整的构建过程生成新的apk并且重新安装,只是把涉及到改动的部分push到设备上,某些情况下甚至都不需要重启当前Activity,马上就可以看到改动。牛逼啊,简直黑科技。 hotfix(热更新)的使用场景类似instan...

code code code 1759

深入理解Android Instant Run运行机制

Instant RunInstant Run,是android studio2.0新增的一个运行机制,在你编码开发、测试或debug的时候,它都能显著减少你对当前应用的构建和部署的时间。通俗的解释就是,当你在Android Studio中改了你的代码,Instant Run可以很快的让你看到你修改的效果。而在没有Instant Run之前,你的一个小小的修改,都肯能需要几十秒甚至更长的等待才能看到修

xiangzhihong8的专栏 1万+

初识instantRun

背景 公司安卓测试机vivo z1手机 ,apk debug安装时弹对话框“解析错误,解析软件包时出问题” 1、 解决方案 1、关闭安卓studio的 instant run(如下图 对号勾掉) 2、项目工程gradle.properties 下添加 android.injected.testOnly = false(如下图) 初识instant run 那么这个instant ru...

dev晴天的博客 1341

Android代码-基于 InstantRun 实现的一个 Android 热修复方案

AnoleFix Another hotfix 另一个热修复方案 大部分代码来自InstantRun。这个方案很久之前就和小伙伴讨论过,一直没实现,现完成了Alpha版,后期再优化。 注:该项目暂时没有应用到具体上线应用中,暂时只做技术展示 Feature 可实现动态实时修复 可实现热插拔(待实现,只实现了动态修复功能,后期加上动态撤销补丁功能) 兼容ART和DalvikVM虚拟机,4.0-7.0,不会出现类似hotfix方案在art下虚拟机quick引用指针错乱造成的崩溃情况 补丁包动态生成,使用方式和RocooFix 一致,但某些功能待完善 Known issue 补丁打包速度待优化 有些未考虑到的补丁逻辑还待补充 性能会略有消耗 暂时只支持开启混淆状态下的补丁打包 Use Gralde 配置 buildscript { repositories { jcenter() maven{ url 'https://dl.bintray.com/dodola/maven' } }

别再自己造轮子了!用MONAI Model Zoo里的预训练模型,5分钟搞定医学影像AI项目

本文介绍了如何利用MONAI Model Zoo中的预训练模型快速搭建医学影像AI项目,大幅节省开发时间和计算资源。通过实战案例展示了UNet、DenseNet121等核心模型的应用技巧,帮助临床医生和研究者5分钟内启动高质量医学影像分析,特别适合小样本场景下的病灶分割和分类任务。

weixin_33704234的博客 240

Instant Run使用要注意的坑

新项目开启了,重新装了最新的Android studio版本,因为Instant Run开启会加快编译速度,所以就开启了它,在开发中改完代码运行apk确实快乐很多,但是随着项目的运行,发现了一个特别恶心的事,apk卸载之后,重新运行,速度会特别慢,之后就不会出现了,到今天,运行一次要10s左右,实在是受不了了,最后发现问题还是出现在Instant Run上, 把Instant Run关闭了之后,

matangtang的博客 1万+

jQuery 版本怎么选?别一上来就用最新版,老项目里这个坑很常见

jQuery 是一个封装好的 JavaScript 函数库,简称 JQ它的核心理念是jQuery 有 1.x、2.x、3.x 三个主要版本系列2.0 以上版本不再支持 IE6、IE7、IE8版本选择不能只看“新不新”,而要看项目兼容性和实际需求.min.js是压缩版文件,生产环境常用使用 jQuery 前必须先通过<script>正确引入基本就是没引入或引入失败可以快速绑定点击事件.animate()可以快速实现动画效果,但定位属性要设置好。

Web安全工具库 403

浅谈instant run

Instant Run 是 Android Studio 提供的一项功能,它允许开发者在修改应用代码后,无需完整重建和重新安装应用就能将改动推送到已运行在设备上的应用程序中。这意味着对于某些类型的代码更改,开发人员可以在不进行全量编译和安装的情况下,直接看到手机上运行的APP反映出代码变更的结果。然而,并非所有类型的修改都能通过Instant Run立即生效,有些复杂的改变仍需要进行完整的构建与部署流程。

m0_61130325的博客 1189

CentOS 7升级GCC踩坑记:明明装了centos-release-scl,为啥找不到devtoolset-9-gcc-c++?

本文详细记录了在CentOS 7系统中升级GCC时遇到的`devtoolset-9-gcc-c++`不可用问题及其解决方案。通过分析`centos-release-scl`安装不完整的原因,提供了从清理残留、重新安装仓库配置到完整安装devtoolset-9工具链的全套操作指南,帮助开发者彻底解决类似环境配置难题。

weixin_29252171的博客 246

DC Error: The power pin VDD on the cell UASA1/CG_X8_Rdsd2pcm is unconnected. (UPF-581)

【代码】DC Error: The power pin VDD on the cell UASA1/CG_X8_Rdsd2pcm is unconnected. (UPF-581)

baidu_34971492的博客 976

安卓应用开发中 Instant Run 热部署失效问题详解及解决方案

Android开发中Instant Run热部署失效问题解析:本文详细探讨了Android Studio的Instant Run功能失效的常见原因及解决方案。主要失效因素包括代码更改超出支持范围、构建配置不当(如混淆启用或minSdkVersion过低)、IDE/Gradle版本问题、设备限制以及缓存异常等。解决方案涉及调整构建配置、清理缓存、更新工具链等,并建议新项目使用更稳定的Apply Changes功能替代。通过合理规划代码修改和优化开发环境,可显著提升热部署成功率,从而提高开发效率。

深山技术宅的博客 962

Open3D 体素下采样【2026最新版】

体素滤波,博客长期更新,本文最近更新时间为:2026年4月11日。

点云侠的博客 37万+

Android新特性Instant Run详解

关于 Instant Run Android Studio 2.0 中引入的 Instant Run 是 Run 和 Debug 命令的行为,可以大幅缩短应用更新的时间。尽管首次构建可能需要花费较长的时间,Instant Run 在向应用推送后续更新时则无需构建新的 APK,因此,这样可以更快地看到更改。 仅在您部署调试构建变体、使用 Android Plugin for Gradle 版

旺仔的专栏 2485

SOC估算方法之(OCV-SOC+安时积分法)

此方法主要参考。

m0_61973119的博客 939

软考「系统规划与管理师(第2版)」抱佛脚|10 页纸终极压缩包

《系统规划与管理师教程(第2版)》,工业和信息化部教育与考试中心组编,刘玲、张树玲主编,清华大学出版社,2025 年 1 月:综合知识 / 案例分析 / 论文(三科通吃):把 24 章压成“只背采分点”的 10 页密度,每行可考,每表可背:已按第2版教材二次勘正,删除旧版 PIOIS 误用、修正八大过程与服务质量五性、等保定级与知识产权边界全部对齐。

软件行业技术文化交流。 364

android studio安装apk时,vivo 部分手机出现 解析软件包错误

AndroidStudio运行apk时,vivo部分手机出现 解析软件包错误提示,安装失败; 解决方法: Androidstudio ——&gt; File ——&gt; Settings ——&gt; Build,Execution,Deployment ——&gt;Instant Run 将标注的 Enable Instant.... 取消选中 点击 apply...

shanshan_1117的博客 8183

LabVIEW进行MQTT通信及数据解析

该文章介绍了LabVIEW的MQTT通信的开源VI控制,以及如果进行数据的解析,特别是一些需要注意的点

heda3的博客 4107

Instant Run

http://tools.android.com/tech-docs/instant-run N Developer Preview users: Instant Run is currently incompatible with the Jack toolchain. This new toolchain is required to use Java 8 language features...

weixin_34143774的博客 119

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android studio instant run在哪,Android Studio 2.1及其以上版本中的instant run功能 介绍

Studio 2.0 之后就有了instant run 功能说说instant run 功能:字面意思就能明白 即时运行这个功能在2.1是默认开启的 而它的相关设置界面呢如下:就是右边的是个设置了如何判断是否可以呢 通过看到了 运行案例左边的⚡️ 了吗? 那就是可以了先给 大家贴上 官方介绍文档这个功能就是当你修改了代码或者布局的时候 点击运行 它不会将整改项目都进行重新打包,而是能直接在你...

weixin_39580124的博客 1675

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android Studio 2.0新特性之Instant Run

Instant Run是AS2.0才引入的新特性,它极大地减少了我们在调试过程中部署APP到设备(模拟器或者真机)的时间.在第一次部署APP的时候可能会耗时较长,但是之后,当我们修改了代码,再次运行之时,AS不会因为你修改了代码而重新生成APK,它会直接将你修改了的部分代码推送到设备,省去了编译和运行的时间,因此Instant Run模式下进行调试会比以前快很多.开启Instant Run1.调试模

存在即合理 2098

android studio 闪电编译,Android Studio中Instant Run

Instant Run翻译成中文叫即时运行或直接运行模板。不过我一般习惯了叫做闪电运行,为什么这么叫?请看图:小闪电有个小闪电(2.3.x版本独立有个小闪电,2.0-2.2是和左边运行图标在一块),因为是个小闪电,所以我习惯了叫做闪电运行。在Android Studio 2.0中引入的Instant Run是运行和调试命令的一种行为,可以显着减少应用更新的时间。虽然您的第一次构建可能需要更长的时间...

weixin_32193393的博客 1132

android中热更新模式,Android热更新与开启Instant Run

配置完热更新后,直接run模式运行,程序会报以下错误:Tinker does not support instant run mode, please trigger build by assembleDebug or disable instant run in 'File->Settings...'.解决办法就是在File-Settings-Build,Execution,Deploym...

weixin_34543510的博客 633

Android 中Instant Run介绍

Java 代码更新:Instant Run 会将 Java 代码(如修改文本、按钮点击事件等)直接推送到设备,并立即生效,避免重启应用。资源文件更新:对于布局文件、图片、样式等资源的修改,Instant Run 会自动推送更新,应用的界面会即时变化。

qq_45906596的博客 1081

59. Instant Run 笔记

16年10月 的一份阅读笔记,是关于 Instant Run 的笔记。是一个非常有意思的东西。

Save you from anything 5337
上一篇: 屏幕适配之百分比方案详解
下一篇: Android6.0权限系统
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值