专栏首页Android 开发者Now in Android | 11 月刊 · 2019

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…

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android 9 Pie 现已面向全球正式发布!

    经历一年多的开发和数月以来早期用户的反复测试,最新 Android 平台 —— Android 9 Pie 终于正式面向全球发布!

    Android 开发者
  • Android P 行为变更

    Android 开发者
  • 现已推出 Android 8.1 和 Android Oreo Go 版本 —— 为所有人打造由 AI 驱动的全覆盖移动平台

    Android 开发者
  • 14个Spring MVC超实用技巧!

    这是创建可以处理一个或多个请求的控制器类的最简单方法。仅通过用构造型注释一个类@Controller ,例如:

    java进阶架构师
  • WWDC倒计时:迟到的苹果如何演绎自己的AI First

    【新智元导读】在 Facebook、微软和谷歌相继召开年度开发者大会并纷纷宣布将重点放在 AI 之上后,终于轮到苹果了。北京时间 6 月 6 日凌晨 1 点,库...

    新智元
  • SAP Fiori里两种锁机制(lock)的实现

    看一个具体的例子来理解。假设我用用户名Jerry选中了这个ID为3456的Opportunity,点击Edit按钮之后:

    Jerry Wang
  • 【原创】Spring Boot终极篇《上》

    目前Spring Boot有多火,相信大家都能感受到,SpringBoot仿佛现在成为一个java开发中必备的技能之一。另外一方面,其实真正只有使用过的人才知道...

    田维常
  • Go语言之旅:变量、常量及类型

    因为面向dotnet(C#)的程序员有很多基础语言的知识已经具备,在这一节,我会把那些Golang特别的或者需要注意的部分摘出来,加以演示可能会更快上手和了解。...

    杨子翔 josonyang
  • 开启全面屏体验 | 手势导航 (一)

    本文是手势导航连载的第一篇文章,在接下来的时间里,我们将会为大家带来一系列手势导航的话题,敬请关注!

    Android 开发者
  • 如何启用SAP C4C OData Event Notification

    当我们在试图使用SAP C4C OData事件通知这个功能时,如果遇到下列提示消息,说明这个功能在business configuration里没有开启:

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券