首页 文章 精选 留言 我的

精选列表

搜索[知识库增强],共10005篇文章
优秀的个人博客,低调大师

Apply Changes 在 Android 11 中的增强特性

简介 Apply Changes 是 Android Studio 中的一项功能,我们在 Android Studio 3.5 中引入了这项功能,以帮助开发者快速迭代您对应用所做的更改。Apply Changes 通过 JVMTI API 来判断是否可以使用此方式进行变更。在 Android 11 上,ART (Android 运行时) 扩展了 JVMTI API,引入了一个名为 Structural Class Redefinition (类的结构性重定义) 的新功能。该功能使 Apply Changes 在 Android 11 设备上增加了一类新的应用场景。现在,可以使用 Apply Changes 将更复杂的修改快速部署到正在运行的应用上,这包括: 增加方法 (Android Studio 4.1) 增加资源文件 (Android Studio 4.2) 增加静态字段 (Android Studio 4.2) 这可以使您减少研发周期,最大化生产效率。本文我们将探讨在 Android Studio 中该功能是如何实现的。 通过 Android Studio 实现更强的功能 Apply Changes 基于 Android Runtime 特性从头设计,所以可以利用其升级更新的功能不断发展。 对于类的结构性重定义而言,将具有新增方法的类发送到 ART,这与之前的 Android 版本没有什么不同。如今新增了一个入口 API,为此您需要将 Android Studio 升级到 4.1 或更高版本,以利用动态在运行中添加新方法的优势,包括静态方法和虚方法。 但是,增加变量需要在 Android Studio 中进行新的分析。当增加一个新的变量时,ART 不会尝试为其分配具体的值。(请持续关注后续关于 ART 实现类的结构性重定义的文章)。取而代之的是,被增加的变量仅会被初始化为默认初始值或 null,并且如何初始化将由 Android Studio 决定。 此过程较为复杂,考虑这样一种情况: 将 long 类型静态变量 y 添加到类中 (y 的初始化发生在类加载期间)。例如: public class example { public final static long x = System.currentTimeMillis(); public final static long y = System.currentTimeMillis(); } 如果该类被加载,x 和 y 的值将会非常接近。在通过使用 Apply Code Changes 增加 y 的情况下,很难计算出正确的 y 值。事实上对 y 的赋值,即使采用最接近的模拟类加载和初始化 y 的程序,也是有争议的。因为两个 curentTimeMillis() 在静态初始化 (<clinit> 方法) 中调用,Apply Changes 将继续遵守不重新执行 <clinit> 方法任何部分的策略,所以新增的 y 值为 0。 幸运的是,Apply Changes 已经 使用了 D8 分析 DEX 文件,并且作为该过程的一部分,在最新版本的 Android Studio 中,Apply Changes 能够利用 D8 新引入的 Inspector API。这种轻量级的检查 API 能够在 DEX 比较过程中计算出一些额外的信息,而仅需增加少量开销 (仅检查发生修改的 Java 类)。一系列有关新增变量的元信息将被附加在发送到对应设备的 Apply Changes 请求的 ProtoBuf 消息中。 在设备上,Android Studio 将我们的更改传达给 VM 之前,Java Agent 将检查即将被替换的当前加载类。通过比较当前加载类和新编译类的字段,即可计算出新增字段列表及每个字段的初始值。然后,代理程序将暂时挂起所有其他线程,防止未初始化的新增字段在替换前被访问。如果替换请求成功执行,它将使用合适的变量初始化新增字段。 局限与即将推出的新功能 在 Android Studio 4.2 Canary 3 中,此功能仅支持新增静态原语的应用场景。作为衍生功能,这有助于在 R.class 中新增值,使 Apply Changes 支持新增资源。 对于所有使用 Apply Changes 的场景中,需要记住一点: 当您重新编译并重新运行一个程序,任何语义和之前都是不同的。试想这样的一个例子: 构造函数发生了变化,但是所有基于原来的构造函数初始化的对象并没有重新初始化。同样的,该规则也适用于静态变量,因为 <clinits> 不会被重新调用。 希望 Android Studio 中这一新功能可以为开发者带来生产力的提高。我们一如既往地欢迎大家给我们 反馈,并让我们知道您希望看到哪些改进。

优秀的个人博客,低调大师

Rust 1.49.0 发布,增强对 ARM 架构的支持

Rust 团队在2020年最后一天发布了 Rust 1.49,更新内容主要是提升对多个系统架构的支持级别。 简单介绍一下 Rust 编译器对不同架构平台的支持级别。虽然 Rust 编译器支持多平台,但 Rust 团队无法为所有目标平台提供相同级别的支持,为了清楚地标记对每个平台的支持级别,他们采用 3 个层级进行区分: Tier 3:Rust 编译器对 Tier 3 级别平台只提供技术性的初级支持 (technically support),并不检查运行于这些平台之上的代码能否构建或通过测试,也不会提供任何预构建的二进制文件作为发布的一部分。 Tier 2:Rust 编译器对Tier 2 级别平台的支持程度是“保证构建”,并提供预构建的二进制文件,但编译器不会在这些平台上执行测试套件,因此生成的二进制文件可能无法工作,或者可能有错误。 Tier 1:Rust 编译器为 Tier 1 平台提供最高级别支持的保证,对于这些平台,编译器会为合并到其中的每一个变化运行完整套件,并提供可用的预构建二进制文件。 可以看到,从 Tier 3 到 Tier 1,Rust 编译器对它们编译和运行的保证程度逐级递增。 对 64 位ARM Linux 的支持级别升级为 Tier 1 Rust 1.49 对aarch64-unknown-linux-gnu架构平台的支持级别已升级为 Tier 1,为运行 Linux 的 64 位 ARM 设备提供了最高级别的编译支持。此项变更是一个重要的里程碑,因为这是非 x86 架构平台首次获得 Tier 1 级别的支持。 ※注意,Android 不受这项变更的影响,因为它应用了不同的Tier 2 target。 对 64 位 ARM macOS 和 Windows 的支持级别升级为 Tier 2 Rust 1.49 对aarch64-apple-darwin和aarch64-pc-windows-msvc架构平台的支持级别已升级为 Tier 2,两者对应的设备就是搭载 Apple M1 的 Mac 和运行 Windows on ARM 的 64 位 ARM 设备。 计划放弃支持 Windows XP 目前 Rust 编译器对 Windows XP 提供 Tier 3 级别的支持,在讨论放弃支持 Windows XP 的 issue 中,可以看到 Rust 团队已通过放弃支持 Windows XP 的提案。 Rust 1.49 还新增了 3 个稳定的函数: slice::select_nth_unstable slice::select_nth_unstable_by slice::select_nth_unstable_by_key 详情查看https://blog.rust-lang.org/2020/12/31/Rust-1.49.0.html。

优秀的个人博客,低调大师

稳定性持续增强,优麒麟 19.10.1 发布!

优麒麟开源操作系统通过研发用户友好的桌面环境以及特定需求的应用软件,为全球用户提供更稳定更易用的 Linux 开源桌面操作系统。 此次发布的优麒麟 19.10.1 版本为更新版本,内核版本升级至5.3.0.19.22, 火狐浏览器升级至70.0 版本,部分底层库也进行了升级,新增控制面板中图标主题设置、字体高级设置,同时修复了用户通过论坛、微信、官网等平台反馈的问题。 图标主题设置 控制面板新增自动搜索系统图标功能,轻松实现自定义自己的桌面主题图标,让自己的桌面变得个性十足。 字体高级设置 控制面板新增字体高级设置,功能和麒麟助手的字体设置非常相似,可以快速设置或切换字体、字号和字型,也可以一键恢复到默认设置。 更多优化及更新如下: 优化系统启动时间; 修复关机/注销时弹出“ at-spi-bus-launcher 无响应”问题; 修复开机字符界面版本显示错误问题; 更新多国语言翻译; 优化网络插件; 控制面板新增图标主题设置; 控制面板新增字体高级设置; 控制面板替换qt原生单例模式实现; 控制面板双屏拖拽后的显示屏偏移量算法实现; 控制面板新增系统动态获取主题设置。 目前,优麒麟 19.10 更新版本已进入四大开源境像站,优麒麟用户和其他 Linux 爱好者均可以通过境像站或优麒麟官网http://www.ubuntukylin.com/downloads/在线下载安装。已装 19.10 正式版的用户也可以通过终端运行命令更新到升级版: sudo add-apt-repository ppa:ubuntukylin-members/19.10 sudo apt update sudo apt upgrade

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册