医疗器械招商网站大全,企业网站服务费怎么做记账凭证,网站点击软件排名,网站规划的主要任务是什么Instant Run上手作为一个Android开发者#xff0c;很多的时候我们需要花大量的时间在bulid#xff0c;运行到真机#xff08;虚拟机#xff09;上#xff0c;对于ios上的Playground羡慕不已#xff0c;这种情况将在Android Studio 2.0有了很大改善#xff0c;使用instan…Instant Run上手作为一个Android开发者很多的时候我们需要花大量的时间在bulid运行到真机虚拟机上对于ios上的Playground羡慕不已这种情况将在Android Studio 2.0有了很大改善使用instant run在第一次运行之后就可以快速的在真机中看见修改后的结果不仅仅是UI可以直接显示还包括代码逻辑。不用再苦苦等build了节约生命呀1、首先要升级到Android Studio 2.02、然后需要升级android tools buildinstant run功能之后再android tools build 的2.*的版本才可以使用。需要在project层级的build.gradle中指定 dependencies { classpath com.android.tools.build:gradle:2.* }3、设置instant RunPreferences - Build,Execution,Deployment - Instant Run4、运行Instant Run再没有运行项目的时候我们的Run图标和以前是一样的运行了项目之后的图标是这样的再改完代码之后直接点击Run按钮就可以立刻就能在你的设备上面看到效Instant Run相关背景知识Instant Run是android studio2.0新增的一个运行机制在你编码开发、测试或debug的时候它都能显著减少你对当前应用的构建和部署的时间。当我们第一次点击run、debug按钮的时候它运行时间和我们往常一样。但是接下去的时间里你每次修改代码后点击run、debug按钮对应的改变将迅速的部署到你正在运行的程序上传说速度快到你都来不及把注意力集中到手机屏幕上它就已经做好相应的更改。一个典型的构建周期流程图构建-部署-安装-app登录-activity创建instant run的目标尽可能多的剔除不必要的步骤然后提升必要步骤的速度。这意味着在实践中只对代码改变部分做构建和部署不重新安装应用不重启应用不重启activity热拔插温拔插冷拔插instant run 增量构建 热/温/冷拔插热拔插代码改变被应用、投射到APP上不需要重启应用不需要重建当前activity。场景适用于多数的简单改变包括一些方法实现的修改或者变量值修改温拔插activity需要被重启才能看到所需更改。场景典型的情况是代码修改涉及到了资源文件即resources。冷拔插app需要被重启但是仍然不需要重新安装。场景任何涉及结构性变化的比如修改了继承规则、修改了方法签名等。Instant Run运行原理manifest文件合并、打包和res一起被AAPT合并到APK中同样项目代码被编译成字节码然后转换成.dex 文件也被合并到APK中。首次运行Instant RunGradle执行的操作APK生成流程 在有Instant Run的环境下一个新的App Server类会被注入到App中与Bytecode instrumentation协同监控代码的变化。 同时会有一个新的Application类它注入了一个自定义类加载器Class Loader,同时该Application类会启动我们所需的新注入的App Server。于是Manifest会被修改来确保我们的应用能使用这个新的Application类。这里不必担心自己继承定义了Application类Instant Run添加的这个新Application类会代理我们自定义的Application类 至此Instant Run已经可以跑起来了在我们使用的时候它会通过决策合理运用冷温热拔插来协助我们大量地缩短构建程序的时间。 在Instant Run运行之前Android Studio会检查是否能连接到App Server中。并且确保这个App Server是Android Studio所需要的。这同样能确保该应用正处在前台因为目前是不支持多台设备多程序同时执行。热拔插 Android Studio monitors 运行着Gradle任务来生成增量.dex文件这个dex文件是对应着开发中的修改类 Android Studio会提取这些.dex文件发送到App Server然后部署到App。 因为原来版本的类都装载在运行中的程序了Gradle会翻译更新好这些.dex文件发送到App Server的时候交给自定义的类加载器来加载.dex文件。看看下面原理图 App Server会不断监听是否需要重写类文件如果需要任务会被立马执行。新的更改便能立即被响应。我们可以通过打断点调试来发现它确实是这么做。温拔插 温拔插需要重启Activity因为资源文件是在Activity创建时加载所以必须重启Activity来重载资源文件。 目前来说任何资源文件的修改都会导致重新打包再发送到APP。但是google的开发团队正在致力于开发一个增量包这个增量包只会包装修改过的资源文件并能部署到当前APP上。 注意温拔插涉及到的资源文件修改在manifest上是无效的这里的无效是指不会启动Instant Run因为manifest的值是在APK安装的时候被读取所以想要manifest下资源的修改生效还需要触发一个完整的应用构建和部署。总结起来如果你修改了manifest相关的资源文件还是需要面临和以前一样的龟速构建。 所以温拔插实际上只能应对少数的情况它并不能应付应用在架构、结构上的变化。例如annotationsfields的增删改、父类文件的修改、static修饰的类、方法、常量等的修改都只能依靠冷拔插。冷拔插 应用部署的时候会把工程拆分成十个部分每部分都拥有自己的.dex文件然后所有的类会根据包名被分配给相应的.dex文件。当冷拔插开启时修改过的类所对应的.dex文件会重组生成新的.dex文件然后再部署到设备上。 之所以能这么做是依赖于Android的ART模式它能允许加载多个.dex文件。ART模式在android4.4中加入但是Dalvik依然是首选到了android5.0ART模式才成为系统默认首选所以Instant Run只能运行在API-21及其以上版本至于低版本的话会重新构建整个应用。Instant Run 技巧Instant Run是被Android Studio控制的。所以我们只能通过IDE来启动它如果通过设备来启动应用Instant Run会出现异常情况。如果应用的minSdkVersion小于21可能多数的Instant Run功能会挂掉。可通过建立一个minSdkVersion大于21的新分支用来debug。Instant Run目前只能在主进程里运行如果应用是多进程的类似微信把webView抽出来单独一个进程那热、温拔插会被降级为冷拔插。在Windows下Windows Defender Real-Time Protection可能会导致Instant Run挂掉可用通过添加白名单列表解决。暂时不支持Jack compilerInstrumentation Tests或者同时部署到多台设备。Instant Run是不能回退的。代码更改可以通过热拔插快速部署但是热拔插会影响应用的初始化所以我们不得不通过重启应用来响应这些修改。来自为知笔记(Wiz)