Instant Run官方文档翻译

原文:https://developer.android.com/studio/run/index.html#instant-run

一、Instant Run简介和支持条件

1.简介:

Android Studio 2.0中引入的Instant Run是Run和Debug命令的行为,可以大幅缩短应用更新的时间。尽管首次构建可能需要花费较长的时间,Instant Run在向应用推送后续更新时则无需构建新的APK,因此,这样可以更快地看到更改。

2.支持条件:
  • Debug版本
  • gradle插件版本2.0.0或更高版本
  • minSdkVersion设置为15或以上,21或更高效果会更佳

二、Instant Run设置和执行

1.设置:

Settings > Build, Execution, Deployment > Instant Run


Instant Run设置.png
2.执行:

部署应用后,Run按钮(或Debug按钮)中会出现黄色的小闪电图标,表明Instant Run已经准备好在您下次点击按钮时推送更新。无需构建新的APK即可推送新的更改,一些情况下,应用甚至无需重启就可以立即显示代码更改的效果。

3.Instant Run推送更新的类型:

Instant Run通过执行热交换、温和交换冷交换向连接的设备或模拟器推送更新的代码和资源。它会根据所做更改的类型自动确定要执行的交换类型。

不同修改类型执行的交换类型:

1>.更改现有方法的实现代码

通过热交换支持,这是最快的交换类型,使更改能够更快地显示。
热交换不会重新初始化正在运行的应用中的对象。您需要重新启动当前的Activity,或者重新启动应用才能看到特定更新。默认情况下,Android Studio在执行热交换后会自动restart activity。如果不想重新启动,可以在上图的Instant Run设置中停用自动行为重新启动。

2>.更改或移除现有资源

通过温和交换支持,这种交换速度也非常快,但Instant Run在将更改的资源推送至应用时必须restart activity。应用保持运行,Activity重新启动时屏幕上会出现小闪烁,这是正常情况。

3>.结构性修改代码

结构性修改代码,比如添加、移除或更改(注释、字段),更改实现的界面列表,更改类的静态初始值设定项,更改当前类从其继承的父类
对于API级别21或更高版本的目标设备,通过冷交换支持,这种交换速度有点慢,因为尽管不需要新的 APK,Instant Run在推送结构性的代码更改时必须重新启动整个应用。
对于运行API级别20或更低的目标设备,Android Studio会部署完整的APK。

4>.更改应用清单文件、更改清单文件引用的资源、更改Android小部件UI元素

对应用的清单或清单引用的资源进行更改时,Android Studio会自动部署新构建以应用这些更改。这是因为设备上安装了APK时应用相关的特定信息(如它的名称、应用图标资源和Intent过滤器)均通过清单确定。
更新 Android小部件UI元素时,您需要执行重新运行

备注:如果您需要在崩溃后重新启动应用,请不要从目标设备启动应用。从目标设备重启应用将不会应用自上次冷交换或增量构建之后的任何代码更改。要启动应用并应用所有最近的更改,请在 Android Studio 中点击Run或Debug。

4.使用重新运行:

推送影响特定初始值设定项的代码更改(例如对应用的onCreate()方法的更改)时,您需要重新启动应用,以便使更改生效。要执行增量构建并重新启动应用,请点击Rerun。
如果您需要部署整洁的构建,请从主菜单中选择Run>Clean and Rerun,也可以在点击Rerun时按住Shift键。此操作会停止运行的应用,执行完整、整洁的构建,然后将新的APK部署至您的目标设备。

三、针对Instant Run配置和优化项目

1.通过配置DEX资源缩短构建时间

maxProcessCount,设置可以并行启动的 DEX 进程的最大数量。
javaMaxHeapSize,设置dex操作的最大内存分配池大小。

android {
  ...
  dexOptions {
    maxProcessCount 4 // this is the default value
    javaMaxHeapSize "2g"
  }
}

进行设置时,需要增大设置的值并观察对构建时间产生的影响,对这些设置进行测试。如果您向dexing 进程分配过多的资源,则可能导致性能下降。

2.启用 dexing-in-process和增量Java编译

gradle插件2.1.0及以上版本才支持dexing-in-process和增量Java编译。
增量Java编译默认情况下处于启用状态,这种编译方式仅对发生变化或需要重新编译的源代码部分进行重新编译,可以缩短开发过程中的编译时间。
dexing-in-process在构建流程而不是单独的外部VM流程中执行dexing。这样不仅可以让增量构建更快,也可以显著提高完整构建的速度。要启用此功能,您需要将 Gradle 后台进程的最大堆大小设置为至少 2048 MB。要进行设置,您可以将以下代码包含到项目的gradle.properties文件中:

org.gradle.jvmargs = -Xmx2048m

如果您已经在模块级别的build.gradle文件中为javaMaxHeapSize定义值,则需要将后台进程的最大堆大小设置为javaMaxHeapSize的值+1024MB。例如,如果您已将javaMaxHeapSize设为“2g”,则需要将以下代码添加到项目的gradle.properties文件中:

org.gradle.jvmargs = -Xmx3072

四、Instant Run的限制

大多数情况下,Instant Run可以加快构建和部署流程的速度。不过,使用 Instant Run时有一些限制因素可能影响其行为以及应用的兼容性。

1.部署到多种设备

Instant Run使用多种不同的技术执行特定于目标设备API 级别的热交换、温和交换和冷交换。因此,同时将应用部署到多种设备时,Android Studio会暂时关闭Instant Run。

2.应用的Dalvik可执行文件分包

如果项目面向旧版Dalvik可执行文件分包(即,使用multiDexEnabled true和minSdkVersion 20或更低版本配置)配置并且您将其部署到运行Android 4.4(API 级别20)或更低版本系统的目标设备上,Android Studio 会停用 Instant Run。
如果将minSdkVersion设为21或更高,Instant Run会自动将应用配置为进行Dalvik可执行文件分包。由于Instant Run仅适用于Debug版本的应用,在部署发布构建变体时,需要配置应用进行Dalvik 可执行文件分包(在defaultConfig中配置 multiDexEnabled true)。

3.使用第三方插件

使用 Instant Run 时,Android Studio 会暂时停用 Java Code Coverage Library (JaCoCo) 和 ProGuard。由于 Instant Run 仅适用于调试版本,停用不会影响您的发布版本。

4.将更改推送至多进程应用

为了执行热交换和温和交换,Instant Run 仅设置应用的主进程。将代码更改(例如对方法实现或现有资源的更改)推送至其他应用进程时,Instant Run 会执行冷交换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 文章摘要1、 选择和构建不同的模块2、更改运行/调试配置3、更改构建变体4、监控构建流程5、关于 Instant ...
    Android那些事儿阅读 1,357评论 0 50
  • ,但是有些小地方他又不给你很清楚的说明。 要获得异步,加@Async即可 如果要配置连接池,在applicatio...
    墙边的凳子阅读 1,307评论 0 4
  • 见与不见,思念一直在;爱与不爱,心一直在。滚滚红尘,一个转身就是陌路天涯;虚拟网络,一个删除就是再无交集。相遇靠缘...
    爱你的娜一颗心阅读 207评论 0 0