谷歌的安卓开发者博客说了以下关于应用程序变化的内容
安卓工作室3.5(目前在加那利和开发频道)现在提供了一种新的方法,可以将代码更改推送到您的应用程序,并在不重新启动应用程序的情况下立即看到效果。简单来说就是“应用变更”,是对之前版本安卓Studio中“准时制”功能的继承。
谷歌的安卓开发者博客对应用程序的变化有如下描述:
应用更改允许您将代码和资源更改推送到正在运行的应用程序,而无需重新启动应用程序,在某些情况下,也无需重新启动当前活动。应用更改用新的构建优化方法替换即时运行。通过使用Android 8.0(API级别26)或更高版本支持的运行时检测,Apply Changes可以动态地重新定义类,而无需在构建过程中重写APK的字节码。
此外,安卓工作室现在会在检测到更改与应用更改不兼容时,提示您决定是否重新启动应用程序或活动。与即时运行的行为相比,这种额外的控制应该会为您提供更加一致和可预测的体验。
这篇博文继续列出了新功能的一些限制。例如,您要在其上测试应用程序的设备必须至少运行Android 8.0 Oreo(API级别26),某些代码更改仍然需要您的应用程序重新启动。与动态运行一样,如果满足以下条件,应用更改将强制应用程序重新启动:
添加或删除类、方法或字段
更改列表
更改方法签名
更改方法或类的修饰符
重命名课程
更改类继承
添加或删除资源
在“已知问题”下,该博文指出,由于谷歌最初在这一新功能中优先考虑稳定性而不是性能,“应用更改”有时比其前身功能“动态运行”要慢得多。此外,不支持x86_x64仿真器镜像,出于调试目的,仅支持Android Pie(API级别28)。您可以在下面的源链接中看到限制和已知问题的完整列表。
为了更详细地描述“应用更改”和“立即运行”之间的区别,安卓工作室团队的一名谷歌员工在Reddit上表示:
它所做的是非常非常不同的。Instant Run对构建有非常特殊的影响,每个类都在编译时进行测试,准备在运行时用新版本的类替换它们。它还将您的APK分成几个apk,以便更逐步地重新上传您的应用程序。
应用更改没有效果。无论是否使用应用更改,APK几乎都是一样的。相反,它依赖ART VM的新运行时检测功能来动态地重新加载类,并在应用程序运行时替换它们。这就是为什么它需要安卓的更新版本。
随着谷歌性能和稳定性的提升,“应用变更”有望最终取代Beta和稳定渠道中的“即时运行”。