阅读 777

Now in Android | 11 月刊 · 2019

作者 / Chet Haase, Android 开发技术推广工程师

欢迎大家来到 Now in Android 栏目,本栏目将专注于为开发者们提供近期值得关注的 Android 开发热点内容。

请务必跟上 Android 10

我们在 Android 10 预览版阶段收到了有关 API 和功能的重要反馈,并且得以在发布最终版之前进行改进。但另一方面,预览版让操作系统在真正发布时不那么令人兴奋了,因为每个人都已经知道了那些新功能。就像是您看着别人在您面前把礼品打包好,然后您再打开包装一样,可能不会有太多的惊喜。

但是我们相信,开发者们会体验到一种不一样的满足感: 知道事情已经完成,知道自己手上的 API 都是稳定的,并可以开始使用它构建应用。而且很多时候开发者还能直接获得源代码,这会带来巨大的优势。同时您也知道,现在用户会开始获取和使用这个版本。

正式发布的 Android 10 (包括 AOSP、开发者下载版及其他渠道),包含了我们一直努力构建的所有功能的最终版本: 手势导航、隐私功能、实时字幕、智能通知、深色主题、ART 优化等等。您可以在 Android 开发者博客中查看概述,或者直接进入开发者网站阅读详细文档并下载所需的资源。

除了稳定,还是稳定

大量 AndroidX 库刚刚发了稳定版本,其中包括许多基础模块,一些架构组件以及媒体库:

AndroidX 版本已完成分类

AndroidX 版本页面最近变得越来越好用了。如果您只关心稳定版本 (或是只想了解最新的 Alpha 版本),只需扫一眼页面顶部给出的分类链接即可。

例如,如果您想了解上面提到的稳定代码库,只需单击该页面右上角的 Stable 分类链接即可。

示例代码大迁移

组织代码其实有点像做家务: 最初,一切都是各就各位的,几年后,装黄油的盘子就会出现在书架上、订书机会和装糖的碗放在一起、过节日时挂起来的各种装饰永远不会被撤下来,因为没有别的地方可以放。

我们的 Android 示例库就处于这个状态。刚开始时,整理的工作量不值一提,但是在经过了数百个项目之后,情况开始变得混乱起来。

在大家的共同努力下,我们已经相当彻底的整理了 Android 示例代码库,现在您可以在同一个地方找到它们: github.com/android,这些例子现在被分类为 17 个小 repo 组,方便您更轻松地在相关课题中找到样例项目。我们的示例代码仓库也接受开发者们的 Pull Request,欢迎大家尝试并积极贡献。

△ 整理之后的 repos 更整洁、识别度更高
迁移工作尚未全部完成,但到目前为止,我们已经从 136 个项目中整理出了 127 个。其余部分将在接下来的几周内完成。

为 Java 开发者准备的 Kotlin 教程

Kotlin 之所以在 Android 开发者中如此流行,首先是因为它是一种很好的语言,同样值得一提的是它与 Java 语言的强大互操作性。毕竟,大多数 Android 项目都是已经成型的代码库,而 Android SDK 是一组 Java API,因此,不同语言之间的流畅集成非常重要。

您在添加 Kotlin 代码时需要注意一些细节,这些细节会让您在将来更容易使用 Java 代码。为了让大家更好地理解这些细节知识,Nicole Borrelli 最近发布了这个 codelab,来帮助那些希望流畅使用 Java 代码的 Kotlin 开发者。

视图绑定 (View binding)

开发者们讨厌样板代码。我们一生中能输入的字符数量是有限的,为什么要在不必要的语法和表达式上浪费生命?

在深受困扰的开发者们看来,Android 开发中不断出现的样板代码中最恼人的就是 findViewById()。每当您要引用层次结构中的视图时,都必须使用正确的视图 ID,并重复输入类型信息。

您最终会写出这样的代码:

var b: Button = findViewById(R.id.button23)
// or
var b = findViewById<Button>(R.id.button23)
// or even
var b = findViewById(R.id.button23) as Button
复制代码

单独看起来,需要的代码量并不很多,但是当您必须对每个视图都这么处理的时候,这个工作量就不能视若无睹了。

一种流行的解决方法是使用 ButterKnife 代码库,让您能这样注解变量:

@BindView(R.id.button23)
lateinit var button: Button
复制代码

开发者们还会使用数据绑定来实现类似的效果,这种做法的本质是,在与布局文件关联的绑定对象中为视图创建变量。

不过在架构组件的最新进展中,我们谈到了 Jake Wharton 正在研究的一种新机制: 视图绑定 (View Binding)。视图绑定更接近数据绑定,从而避免了 ButterKnife 的注解处理方法。用 Jake 的话说,"这是 findViewById 和完整数据绑定的中间地带。"

要使用视图绑定,首先需要在 gradle 构建中启用它:

android {
   viewBinding.enabled = true
}
复制代码

然后,在您的代码中就可以获得对绑定对象的引用,并且直接通过绑定对象里的字段访问视图。它的工作方式与数据绑定类似,但是不需要专门的数据资源文件,而只需使用普通的 XML 布局文件即可。

视图绑定Android Studio 3.6 Canary 11 可以开始体验。

分区存储

Android 10 带来的一个重要特性是分区外部存储 (Scoped External Storage),旨在限制应用对不是自己创建的文件的访问权限,从而保护用户的数据安全与隐私。

简而言之: 应用可以随时访问自己创建的文件,不需要授权。但是,如果要访问其他应用创建的照片/视频/音频文件,则必须获得 READ_EXTERNAL_STORAGE 权限。对于其他文件类型,则必须使用 Storage Access Framework 来让用户选取文件。

△ 使用正确的权限和 MediaStore API 来让您的 Android 10 应用访问由其他应用创建的内容

我们准备了详细的文档,涵盖了处理外部存储文件的 API 和做法。但如果您是刚接触外部文件存储的话,阅读文档里的说明可能会需要多花费一些精力,我们也会努力迭代文档以让内容更加易懂。与此同时,Nicole Borrelli 在 Github 上的 Storage Samples 项目中创建了 MediaStore 示例来帮助您快速上手。示例里有展示应该如何请求适当权限访问文件,然后使用适当的 MediaStore API 来实际加载它们。

在我们近期连载发布 2019 Android 开发者峰会中文视频中也有一个关于分区存储的演讲,分享了一些最新的更新和接下来 Android 版本里的改变。

  • 腾讯视频链接:

v.qq.com/x/page/d302…

  • Bilibili 视频链接:

www.bilibili.com/video/av771…

Kotlin Codelabs

您也许已经听说过 Kotlin 了,但您可能一直还没上手使用它。我们也已经准备了 Udacity 的课程来帮助您学习 Kotlin 以及使用 Kotlin 开发 Android 应用。

但如果您不是很喜欢看视频,或者只是想按照自己的节奏来学习 Kotlin 的话,我们从上述课程中提炼出了核心内容,并做成了一系列的 codelab 供您上手尝试。

Kotlin 编程新手营》是一套完整的课程 (由一系列 codelab 组成),它将引导您学习 Kotlin 的许多基础知识。课程假定您已经熟悉面向对象编程,并会基于此向您介绍 Kotlin 的一系列概念,如函数、类和 lambda 等。

Android Kotlin 基础》则是一套针对 Android 开发的课程 (同样由一系列 codelab 组成),这套课程使用 Kotlin 语言来讲授 Android 开发中的许多重要概念。包括 Android 的一些基础知识,例如布局和生命周期;还包括所有 Android 开发者应该学习和使用的最新实践案例,例如 RecyclerView 和架构组件。请注意,该课程不会把教学重点放在 Kotlin 语言本身,因此建议您先完成《Kotlin 编程新手营》课程。

别忘了上手试试 Android 10 的分区存储功能,也希望您体验一下我们的 Kotlin codelabs 系列课程。谢谢对 Now In Android 栏目的支持,祝大家在 Android 开发路上一切顺心!

点击这里提交产品反馈建议

关注下面的标签,发现更多相似文章
评论