原理介绍 | Apply Changes 背后的秘密

本文详细介绍了Android 11中引入的Structural Class Redefinition,这是一种JVMTI扩展,允许在运行时修改类结构,扩展了Android 8的类重定义。类的结构性重定义使得在不重启应用的情况下添加字段或方法成为可能,对于Android Studio的Apply Changes功能至关重要。文章讨论了实现这一功能的挑战、权衡以及如何在不影响性能的情况下进行原子性转换,确保类的结构性重定义在发布模式下不影响应用性能。
摘要由CSDN通过智能技术生成

简介

在 Android 11 上,Android 运行时 (ART) 引入了一个名为 Structural Class Redefinition (类的结构性重定义) 的 JVMTI API 扩展。本文将介绍类的结构性重定义的功能,并介绍在实现该功能所遇到的问题,包含我们对问题的思考、权衡及解决方案。类的结构性重定义是一个运行时功能,它扩展了 Android 8 中引入的重定义类方法,Android Studio 里的 Apply Changes 可以通过它来改变类的自身结构,并可以在类中增加变量或者方法。

 

这可以被用在很多强大的功能中,例如扩展 Apply Changes 来支持向应用中增加新的资源。您可以查看相关文档了解 Android Studio ‘Apply Changes’ 功能的工作机制,以及在后续博客中了解其如何使用类的结构性重定义进行扩展。未来 Android Studio 会增加更加综合和功能强大的工具来适配这些新的特性。

 

JVMTI 是一个标准的 API,开发工具可以通过它在底层与运行时环境进行交互和控制。利用该功能实现了很多我们熟知的开发工具,从 Android Studio 中的 Network 及 Memory 分析器,到调试器中的模拟框架,如 dexmaker-mockito-inline、MockK,再到 Layout 以及 Database 检查器。您可以在 Android 文档中找到更多关于 Android JVMTI 的实现以及如何将其应用于您自己的工具中。

  • 查看相关文档

    https://medium.com/androiddevelopers/android-studio-project-marble-apply-changes-e3048662e8cd

  • Network

    https://developer.android.google.cn/studio/profile/network-profiler

  • Memory

    https://developer.android.google.cn/studio/profile/memory-profiler

  • dexmaker-mockito-inline

    https://medium.com/androiddevelopers/mock-final-and-static-methods-on-android-devices-b383da1363ad

  • MockK

    https://mockk.io/

  • Android 文档

    https://source.android.google.cn/devices/tech/dalvik/art-ti

结构化重定义

类的结构性重定义基于 Android Oreo (8.0) 中增加的重定义类进行改进。在 Oreo 中,仅有类中已有的方法才能被修改。类中定义的对象布局以及字段集、方法集不能以任何方式进行修改。

 

类的结构性重定义对类的修改提供了更高的自由度,使已有类中添加全字段和方法成为了可能,对可能新增的字段及方法的类型没有任何限制。新增的字段初始值为 0 或 null࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值