深入探索 Android Gradle 插件的缓存配置

2020-11-09
阅读 7 分钟
2.9k
配置缓存是一个提升 IDE 和命令行构建速度的基础构建块。这是 Gradle 6.6 版本提供的一个高度实验性功能,它可以使构建系统记录一次任务的图谱信息,并在接下来的构建中进行复用,从而避免再一次配置整个工程。这一功能也是配置阶段改进的延续,这些改进中引入了 惰性配置 (lazy configuration),以避免在构建的配置阶段...

实现边到边的体验 | 让您的软键盘动起来 (一)

2020-11-07
阅读 6 分钟
6.3k
Android 11 中的新功能之一是可以让应用在对于屏幕上的软键盘打开和关闭的过程创建无缝过渡的动画效果,这一功能源自 Android 11 中对 WindowInsets API 的大量改进。

使用 ConcatAdapter 顺序连接其他 Adapter

2020-11-06
阅读 4 分钟
4.7k
ConcatAdapter 是 recyclerview: 1.2.0-alpha 04 中提供的一个新组件,它可以帮我们顺序地组合多个 Adapter,并让它们显示在同一个 RecyclerView 中。这使您可以更好地封装 Adapter。您不必再将许多数据源组合到一个 Adapter 中,从而在减少 Adapter 复杂度的同时也让它们可以被复用。

中国电信营业厅: 感受 Kotlin 的 "加速度"

2020-11-05
阅读 3 分钟
3.3k
"我们手上是一个很成熟的项目,所以毫无疑问需要保留 Java 代码,目前只会在新开发的页面中使用 Kotlin,并已经感受到了它带来的便利。随着功能的迭代,我们相信更多的功能会转而使用 Kotlin。"—— 付迎鑫,电信营业厅技术负责人

在 CI 中使用 Benchmark 进行回归分析

2020-11-04
阅读 5 分钟
2.5k
我们在 I/O 2019 发布了 Benchmark 库的第一个 alpha 版。之后为了能帮助您在优化代码时可以准确地评估性能,我们就一直在改进 Benchmark 库。Jetpack Benchmark 是一个运行在 Android 设备上的标准 JUnit 插桩测试 (instrumentation tests),它使用 Benchmark 库提供的一套规则进行测量和报告:

携手玩家一起保护地球 | Google Play 开发者播客节目 · 第十期

2020-11-04
阅读 2 分钟
2k
第十期节目,将与主持人 Tamin 和 Drik 一起讨论的两位嘉宾,分别是来自 SYBO 游戏公司的 Jennifer Estaris 和 Games for Good 的创始人 Deborah Mensah-Bonsu (她也曾是手游工作室 SpaceApe 的创始人,现在 Supercell 是其大股东)。他们讨论了关于近期的 Green Game Jam 活动 —— 该活动旨在为游戏引入更多环境教育意识...

实战 | 在 Room 中使用 Flow

2020-11-03
阅读 2 分钟
2.8k
Jetpack Room 对协程的支持越来越丰富: Room 2.1 版本增加了对协程的支持,并加入了一次性 (one-shot) 的读写操作,Room 2.2 我们通过 Flow 为读操作加入了可观察性,当数据库中的数据有变化时它可以使您收到通知。

使用 PreviewView 来展示相机预览

2020-11-02
阅读 6 分钟
4.8k
显示相机预览内容是每个相机类应用都会包含的功能,想要完美实现这个却并非易事。原因是,在某些特别极端情况下 camera2 API 的使用会变得很复杂,而且在不同设备上的行为还会有所不同。还好,Jetpack CameraX 库 的 PreviewView 可以帮助您解决这一问题。通过在各种 Android 设备上提供开发者友好、一致且稳定的 API,...

在 Kotlin 中使用 Dagger 会遇到的陷阱和优化方法

2020-11-01
阅读 4 分钟
2.1k
Dagger 在 Android 开发中相当流行,它是一个提供完全静态和在编译时生成代码的依赖注入框架,它解决了很多基于反射而实现的方案中所遇到的开发和性能问题。

使用 Dagger 自定义 WorkManager

2020-11-01
阅读 8 分钟
2.2k
WorkManager 是一个 Android Jetpack 扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。对于绝大部分后台执行任务来说,使用 WorkManager 是目前 Android 平台上的最佳实践。

深入详解 Jetpack Compose | 实现原理

2020-10-31
阅读 8 分钟
3.8k
本文是 Compose 系列的第二篇文章。在 第一篇文章 中,我已经阐述了 Compose 的优点、Compose 所解决的问题、一些设计决策背后的原因,以及这些内容是如何帮助开发者的。此外,我还讨论了 Compose 的思维模型、您应如何考虑使用 Compose 编写代码,以及如何创建您自己的 API。 在本文中,我将着眼于 Compose 背后的工作...

在 View 上使用挂起函数 | 实战

2020-10-30
阅读 8 分钟
1.9k
本文是探索协程如何简化异步 UI 编程系列的第二篇。第一篇侧重理论分析,这一篇我们通过实践来说明如何解决实际问题。如果您希望回顾之前的内容,可以在这里找到——《在 View 上使用挂起函数》。

Android Studio 4.1 的 Dagger 导航更新

2020-10-30
阅读 3 分钟
2.3k
在使用 Dagger 的项目中,您是否因为要弄清楚 Dagger 的依赖关系而产生疑惑?依赖项来自 @Inject 修饰的构造器、@Binds 还是 @Provides 修饰的方法?它有限定符吗?要搞清楚这个并非易事。

在 View 上使用挂起函数

2020-10-29
阅读 7 分钟
2.8k
Kotlin 协程 让我们可以用同步代码来建立异步问题的模型。这是非常好的特性,但是目前大部分用例都专注于 I/O 任务或是并发操作。其实协程不仅在处理跨线程的问题有优势,还可以用来处理同一线程中的异步问题。

Kotlin Vocabulary | 唯一的 "对象"

2020-10-29
阅读 7 分钟
2.3k
在 Java 语言中,static 关键字主要用于表明方法和属性是属于某个对象,而不是属于对象的实例。static 关键字也用于创建 Singleton (单例),单例模式是非常常见的设计模式,它可以帮您创建某个对象的唯一实例,并且其它对象也可以访问和分享该实例。

适配 Google Play 结算系统的最新特性

2020-10-28
阅读 3 分钟
1.8k
提醒开发者们:2020 年 11 月 1 日之前,启用了订阅功能的应用,需要在应用中为帐号保留和恢复功能提供支持。此外,Google Play 控制台还会为所有订阅默认启用暂停订阅和重新订阅功能 (除非您明确选择停用)。 2020 年 11 月 2 日起,应用的更新必须以 Android 10 (API 级别 29)  或更高版本为目标平台。

新常态下教育类应用如何应变 | Google Play 开发者播客节目第二季开播!

2020-10-28
阅读 2 分钟
1.6k
Apps, Games & Insights 第二季的首期节目邀请到来自 Babbel 的 Elliot Rayner 和 John Quintana。他们将会分享关于语言学习类应用的见解,并且谈一谈新常态下所有教育形式所受的影响。同时,他们也会与主持人 Tamzin Taylor (西欧 Google Play 应用及游戏商务拓展负责人) 和 Dirk Primbs (EMEA 地区生态系统及开发...

协程中的取消和异常 | 异常处理详解

2020-10-27
阅读 5 分钟
2.2k
开发者们通常会在打磨应用的正常功能上花费很多时间,但是当应用出现一些意外情况时,给用户提供合适的体验也同样重要。一方面来讲,对用户来说,目睹应用崩溃是个很糟糕的体验;而另一方面,在用户操作失败时,也必须要能给出正确的提示信息。

Kotlin Vocabulary | 内联函数的原理与应用

2020-10-27
阅读 5 分钟
1.1k
我们的项目里常常会创建一些 Util 类,用于分类整理那些会在许多地方用到的小型函数 (也称实用函数),如果这类函数接收了另一个函数作为参数,则可能会造成一些额外的对象分配,通过使用 inline 关键字,您可以避免这种情况并提升应用性能。接下来我们就来看一看,当您把一个函数作为参数传递时发生了什么、inline 关键...

Kotlin Vocabulary | 操作符重载

2020-10-27
阅读 3 分钟
1.3k
当我们在处理可以添加、删除、比较或者连接的类型时,我们通常需要写很多冗长和重复的代码。但在 Kotlin 中,我们可以借助 操作符重载,为这些类型写出更具表现力和简洁的代码。

Android 样式系统 | 主题背景覆盖

2020-10-26
阅读 4 分钟
1.9k
在 Android 样式系统系列的前几篇文章中,我们探讨了 样式和主题背景之间的区别,讨论了 使用主题背景和主题背景属性的好处,并重点介绍了一些 常用的主题背景属性。 今天,我们聚焦于主题背景的实际使用,如何将它们应用到我们的应用中,以及如何构建主题背景。范围在 上一篇文章 中,我们提到:任何一个拥有或者自己本...

Android 样式系统 | 主题背景属性

2020-10-26
阅读 4 分钟
1.3k
在 Android 样式系统系列的前几篇文章中,我们介绍了主题背景与样式的区别,以及为什么说通过主题背景和公共主题背景属性来分解您要实现的内容是一个不错的主意,请点击链接回顾:

Android 样式系统 | 常见的主题背景属性

2020-10-26
阅读 5 分钟
3k
我们建议使用主题背景属性来间接引用资源,您可以在不同的模式下 (比如在 深色主题背景) 实现灵活地切换。如果您发现在布局或样式代码中直接引用了资源或者是硬编码了具体的值,请考虑使用主题背景属性来替代之前用法。

Android 样式系统 | 主题背景和样式

2020-10-25
阅读 5 分钟
2.1k
Android 提供了功能强大的样式系统 (Android styling system) 来实现应用的视觉设计,但它也容易被误用。正确地使用样式系统会让您在开发应用的时候更容易维护主题与样式,在开发新功能的时候少一些抓狂,而且还可以支持深色模式。

协程中的取消和异常 | 取消操作详解

2020-10-25
阅读 6 分钟
1.8k
在日常的开发中,我们都知道应该避免不必要的任务处理来节省设备的内存空间和电量的使用——这一原则在协程中同样适用。您需要控制好协程的生命周期,在不需要使用的时候将它取消,这也是结构化并发所倡导的,继续阅读本文来了解有关协程取消的来龙去脉。

Android 11 开发者常见问题: 存储 | FAQ・第二期

2020-10-23
阅读 3 分钟
5.2k
我们在 Android 10 中首次引入了 "分区存储" 的概念,旨在保护应用和用户数据并减少文件混乱。自此之后我们收到了开发者们的宝贵建议,这些建议有助于我们对该功能的持续优化,非常感谢大家!基于反馈,我们在 Android 11 上做了一些值得注意的改进。例如,我们启用了对媒体文件的 直接文件路径访问功能,用于改善现有代...

Android 存储空间的最佳实践

2020-10-23
阅读 5 分钟
2.2k
为了提高文件的规整程度并让用户可以更好地控制他们的文件,Android 10 为应用引入了名为 "[分区存储]([链接])" 的新范式。分区存储改变了应用在外置存储中保存和访问文件的方式,为了帮您迁移应用并支持分区存储,我们概括了常见用例的最佳实践并分享给大家。

Android Studio 4.1 发布,全方位提升开发体验

2020-10-22
阅读 6 分钟
3.1k
我们很高兴发布了 Android Studio 4.1 稳定版,为大家带来一系列针对常见的编辑、调试和优化工作的功能。4.1 版本的重点诉求之一是帮助您在使用 Android Jetpack 库 (即 Android 的开发库套件) 时遵循最佳实践和提升代码编写效率。基于大家的反馈,我们直接在 IDE 中集成了诸多常用的 Android 库,从而改善了编写代码的...

自定义 WorkManager —— 基础概念

2020-10-22
阅读 6 分钟
2.3k
WorkManager 是一个 Android Jetpack 扩展库,它可以让您轻松规划那些可延后、异步但又需要可靠运行的任务。对于绝大部分后台执行任务来说,使用 WorkManager 是目前 Android 平台上的最佳实践。

深入详解 Jetpack Compose | 优化 UI 构建

2020-10-21
阅读 7 分钟
5.7k
人们对于 UI 开发的预期已经不同往昔。现如今,为了满足用户的需求,我们构建的应用必须包含完善的用户界面,其中必然包括动画 (animation) 和动效 (motion),这些诉求在 UI 工具包创建之初时并不存在。为了解决如何快速而高效地创建完善的 UI 这一技术难题,我们引入了 Jetpack Compose —— 这是一个现代的 UI 工具包,...