[Android翻译]Jetpack的新内容

原文地址:android-developers.googleblog.com/2021/05/wha…

原文作者:twitter.com/fmuntenescu…

发布时间:2021年5月18日

image.png

安卓Jetpack是一套库、工具和指导,帮助开发者遵循最佳实践,减少模板代码,并编写在安卓版本和设备上一致运行的代码。今天,Google Play上排名前1000的应用中有84%依靠Jetpack。

下面是对Jetpack最新更新的综述–这是我们关于Jetpack的新内容的扩展版本。

www.youtube.com/watch?v=xeQ…

稳定版中的新内容

CameraX

CameraX库为跨操作系统版本访问相机功能提供了统一的API界面,包括特定设备的兼容性修复和变通。该库的一些最新改进解决了常见的功能要求,包括支持调整曝光补偿和访问有关相机状态和功能的更详细信息。此外,现在可以在相机运行时通过Camera2Interop改变相机设置,如FPS范围。该库还带来了对最新设备和操作系统功能的支持,包括高动态范围预览、变焦率控制,以及对安卓免打扰模式的支持。不过,也许最重要的是,该库继续解决性能问题,使图像捕捉和初始化速度更快,特别是在旧设备上。

Hilt

Hilt是Jetpack推荐的建立在Dagger之上的依赖注入解决方案。作为向稳定版过渡的一部分,Hilt的ViewModel支持已经上升到Hilt的核心Android APIs,SavedStateHandle已经被添加为ViewModelComponent中的默认依赖。此外,Hilt现在与Navigation和Compose集成:你可以获得一个注解的Hilt ViewModel,它的范围是目的地或导航图本身。开发人员已经开始在他们的应用程序中使用Hilt。请在这篇博文中阅读他们的经验。

分页3.0

分页库允许你加载和显示小块的数据以改善

网络和系统资源的消耗。这个版本的特点是在Kotlin中完全重写,对coroutines和Flow有一流的支持,用RxJava和Guava原语进行异步加载,并对存储库和表现层进行了全面改进。

与Paging 2相比,3.0版本在可用性方面有了很大的改进,重写时考虑到了部分和分阶段迁移的问题,以便开发者可以按照自己的计划进行过渡。请查看Paging 3.0文档Paging 3.0代码实验室,以了解细节和实践经验。

ConstraintLayout和MotionLayout

ConstraintLayout(Jetpack设计布局的灵活系统)和MotionLayout(旨在管理运动和小部件动画的API)现在已经稳定。MotionLayout现在包括对可折叠设备、图像过滤器和运动效果的支持。要了解更多关于设计工具的新内容,请查看谷歌I/O的讲座

安全加密

安全加密库允许你安全、轻松地加密文件和SharedPreferences。为了加密SharedPreferences,用适当的密钥和方案创建一个EncryptedSharedPreferences对象,然后像标准SharedPreferences对象一样使用它。

val prefs: SharedPreferences = EncryptedSharedPreferences.create(
        context,
        "prefs_file_name",
        mainKey,
        prefKeyEncryptionScheme = AES256_SIV,
        prefValueEncryptionScheme = AES256_GCM,
)
// Use the resulting SharedPreferences object as usual.
prefs.edit()
    .putBoolean("show_completed", true)
    .apply()
复制代码

Fragment

在过去的一年中,Fragment库经历了一个重大的努力,以清理其内部实现并减少无记载的行为,使开发人员更容易在他们的应用程序中遵循最佳实践并编写可靠的测试。这为该库未来的改进奠定了基础,比如支持Navigation中的多个后栈,它可能需要一些工作来适应API合约的严格执行。在实践中,你应该在更新库后仔细关注你的测试。查看Fragment发布说明,看看需要注意的具体案例。

最近的版本还引入了ActivityResult集成,使得从片段中注册Activity结果成为可能。Fragment还添加了一个新的FragmentOnAttachListener接口,以取代不太灵活的onAttachFragment方法。在 Fragment 或 FragmentActivity 中重写这个方法的现有代码仍然可以工作,但我们已经废弃了 onAttachFragment,以帮助防止新代码意外地采用不太灵活的方法。

// Obtain the fragment manager. May be a childFragmentManager,
// if in a fragment, to observe child attachment.
val fm = supportFragmentManager

val listener = FragmentOnAttachListener {
    fragmentManager, fragment ->
  // Respond to the fragment being attached.
}

fm.addFragmentOnAttachListener(listener)
复制代码

测试版中的新内容

一旦一个库的功能完成,它就会转到Beta版进行稳定。目前,API只在关键问题或社区反馈的情况下才会改变。

DataStore

DataStore提供了一个强大的数据存储解决方案,解决了SharedPreferences的缺点,同时保持了一个简单、高度可用的API表面。DataStore带来了对最佳实践的支持,如Kotlin coroutines与Flow和RxJava。DataStore允许你通过Preference DataStore存储键值对,或者通过Proto DataStore存储由协议缓冲区支持的类型对象。你还可以插入你自己的序列化解决方案,比如Kotlin序列化。

体验版中的新功能

Alpha库是正在开发中的库–API可能会被添加、改变或删除,但库中的东西是经过测试的,应该是高度功能性的。

AppSearch

AppSearch是一个新的设备上的搜索库,它提供了高性能和功能丰富的全文搜索功能。与SQLite相比,AppSearch支持多种世界语言,简化了查询结果的排序,并为大型数据集的索引和搜索提供更低的延迟。

AppSearch 1.0.0-alpha01发布时支持LocalStorage,它允许你的应用程序管理结构化数据,称为 “文档”,然后对其进行查询。你的应用程序使用 “模式类型 “来定义结构的外观。例如,你可以将一个消息建模为一个模式类型,其中包括主题、正文和发件人等数据。

使用构建器来创建模式类型的文件,然后将它们添加到存储中。查询 “body:fruit “将检索所有在Message正文中带有 “fruit “一词的文档。

在Android S中,AppSearch还将提供PlatformStorage,因此你可以与其他应用程序安全地共享你的应用程序的数据,并通过无需链接额外的本地库来减少你的应用程序的二进制大小。目前Jetpack中还没有这个功能,因为该库还没有针对Android S SDK。

image.png

在Android S+上集中存储,以整合到整个设备的搜索中。

Room

Room是推荐的数据持久层,在平台上提供更多的可用性和安全性。

Room 2.4.0-alpha带来了对自动迁移的支持。当你的数据库模式发生变化时,你现在可以声明一个@AutoMigration,并指出你想从哪个版本迁移到哪个版本,Room就会为你生成迁移程序。对于更复杂的迁移,你仍然可以使用Migration类。

@Database(
-   version = 1,
+   version = 2,
    entities = { Doggos.class },
+   autoMigrations = {
+         @AutoMigration (from = 1, to = 2)
+     }
  )
public abstract class DoggosDatabase extends RoomDatabase { }
复制代码

Room 2.3.0稳定版带来了对Kotlin符号处理的实验性支持,在我们对Kotlin代码的基准测试中,其速度比KAPT提高了2倍,同时还内置了对枚举和RxJava3的支持。

Room还引入了QueryCallback类–该类在执行SQLite语句时提供回调,以简化日志等任务–以及新的@ProvidedTypeConverter注解,该注解允许在创建类型转换器时更加灵活。

工作管理器

WorkManager库–Android推荐的安排可推迟的异步任务的方式,即使应用退出或设备重启也会运行–已经对任务调节的可靠性进行了改进,确保所有任务都被执行,并为特定的Android OS版本提供了各种解决方法。

WorkManager的最新版本改进了对多进程应用程序的支持,包括将工作请求调度统一到一个进程中的性能优势,以及在调度许多请求时限制数据库增长。

2.7版–现在是alpha版本,针对Android S SDK–为该平台新的前台限制提供了额外支持。更多细节,请参见Android上的有效后台任务谈话。

背景任务检查器在Android Studio Arctic Fox中可用,允许你在使用库的最新版本时轻松查看和调试WorkManager作业。

image.png

背景任务检查器

导航

导航库是Jetpack的框架,用于在应用程序中的目的地之间移动,现在提供了对多个backstacks的支持,并简化了目的地位于同一深度的情况,如底部导航栏。

Macrobenchmark

Macrobenchmark库将Jetpack的基准测试范围扩展到应用启动和综合行为,如滚动性能。该库可用于远程跟踪持续集成测试中的指标,或在本地使用可从Android Studio查看的剖析结果。请看谷歌I/O演讲中的所有细节。

www.youtube.com/watch?v=0ad…

对于那些想与谷歌助理更紧密结合的开发者来说,谷歌快捷键库提供了一种方法,通过现有的ShortcutInfo类向谷歌助理和其他谷歌服务公开行动。

你可以通过ShortcutManager一次发送多达15个快捷方式,以显示在谷歌助理和其他服务上,使它们可用于语音和其他互动。

要实现这一点,要用一个意图和一个能力绑定来定义一个快捷方式;这个绑定提供了语义上有意义的信息,这将帮助谷歌服务找出将其展示给用户的最佳方式。

// expose a "Cappuccino" action to Google Assistant and other services
ShortcutInfoCompat siCompat =
  ShortcutInfoCompat.Builder(ctx, "id_cappuccino")
    .setShortLabel("Cappuccino")
    .setIntent(Intent(ctx, OrderCappuccino::class.java))
    .addCapabilityBinding(
        "actions.intent.ORDER_MENU_ITEM",
        "menuItem.name",
        asList("cappuccino")
    )
    .build()

ShortcutManagerCompat.pushDynamicShortcut(ctx, siCompat)
复制代码

EmojiCompat

你的应用程序中所有用户生成的内容都包含?,支持现代表情符号是使你的应用程序变得✨的关键部分。EmojiCompat库支持API 19和更高版本的现代表情符号,它已经转移到一个新的神器 :emoji2:emoji2,它取代了以前的 :emoji:emoji神器。新的emoji2库增加了使用AppStartup库的?自动配置(你不必添加任何代码 ??来显示?❄️)!

AppCompat从AppCompat 1.4开始增加了emoji2。如果你的应用程序使用AppCompat,用户将看到现代的表情符号⭐,无需进一步配置。没有使用AppCompat的应用程序可以添加:emoji2:emoji2-views。对于自定义文本视图,你可以通过使用 :emoji2:emoji2-views-helpers中的帮助器或通过子类化AppCompat视图来支持现代表情符号。

Jetpack Compose

Jetpack Compose是Android的现代工具包,用于构建本地UI。它简化并加速了Android上的UI开发。Jetpack Compose目前处于测试阶段,并计划在7月进入稳定阶段。这里列出的许多库,以及你可能已经在使用的其他库,都推出了专门与Jetpack Compose集成的功能。从Activity到ViewModel、Navigation或Hilt,所有这些库都可以使你的应用程序更顺利地采用Compose。从这个Google I/O演讲中了解更多关于如何使用它们的信息。

www.youtube.com/watch?v=0z_…

形式因素

Jetpack让你更容易处理不同的外形因素,包括可折叠设备、大屏幕设备和Wear设备。我们为大屏幕开发引入了新的指导方针,并对WindowManager和SlidingPaneLayout等Jetpack库进行了改进。阅读这篇博文中的所有细节。

总结

这是一个关于Jetpack新内容的(相对)快速概述。请查看AndroidX发布说明,了解每个库的所有更新细节,以及Google I/O会谈中关于其中一些库的更多信息。


www.deepl.com 翻译

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享