大家好,我是秉心说。最新一期的 Now in Android 又更新啦,原文地址如下:
https://medium.com/androiddevelopers/now-in-android-17-9d73f7bed7f
下面照例给大家总结归纳一波。
Android 11: Developer Preview 3
最近发布了 Android 11 开发者预览版 3,在修复以往版本带来的 bug 的同时,也发布了一些新功能。
优化 Debug
由于设备和使用场景的多样性,捕获线上问题通常都是比较困难的。如果能够在发生问题或者 crash 处得到更多的信息,对开发者无疑将会有很大帮助。
在 Android 11 上提供了两个工具来帮助我们获得这样的信息。
第一个是 ActivityManager.getHistoricalProcessExitReasons() 。通过该 API 可以获取到应用最近退出的详细原因,以帮助开发者排查问题。
另一个工具是对 Native 开发者很有帮助的 GWP-ASan ,它是一个分配采样工具,用以检测堆内存错误,且能将运行开销和对性能的影响降到最低。系统可执行文件和系统应用中已经默认启用了 GWP-ASan 。现在,你也可以为你的应用开启它。
无线调试
我们可能总是没有足够的 USB 接口(这是在吐槽 Mac 么) ,这个时候无线调试就很方便。
其实现在通过 Android Studio 插件也可以进行无线连接,但在 Android 11 中这已经是系统级功能了。
通过命令行和配对码就可以直接使用该功能。具体使用步骤见官方文档:
https://developer.android.com/preview/features#wireless-adb
ADB 增量安装
在游戏开发中,可能会有数 GB 大小的安装包,原有的 adb 安装速度很慢,即使安装包只做了一点点修改。ADB 增量安装 加速了这一过程,最快可达到原来的 10 倍。
要使用这个新开发者工具,首先请用新的 APK 签名方案 v4 进行签名,然后用 Android 11 预览版 SDK 中的最新版 ADB 命令行工具安装 APK。由于需要在设备级别上更改文件系统,ADB 增量安装 只适用于 Pixel 4 / 4XL 设备。所有新推出的 Android 11 设备都将包含这一变化并支持 ADB 增量安装。
数据访问审核更新
Android 11 提供了数据访问审核能力,它可以让你更好地了解自己的应用(本身或者依赖的第三方库)访问用户数据的情况,以及访问的流程路径。
当你的应用很庞大,或者使用了很多第三方类库时,这个 API 可以帮助你更好的了解隐私数据的访问,无论是你已知的或者不在预期内的。
具体使用方式见官方文档:
https://developer.android.com/preview/privacy/data-access-auditing
另外,Jeremy Walker 用 Kotlin 写了一个 Sample 来展示如何使用这个 API,地址如下:
https://github.com/android/permissions-samples/tree/master/DataAccessAuditingKotlin
其他
关于 Android 11 开发者预览版 3 的官方博客介绍:
https://android-developers.googleblog.com/2020/04/android-11-developer-preview-3.html
另外,掘金上也有官方团队的介绍:
https://juejin.im/post/5ea27932f265da47e6493789
文章
CameraX Preview
Husayn Hakeem 发表了一篇关于如何使用 CameraX 进行简单预览的文章 —— 《Display a camera preview with PreviewView》,地址如下:
https://medium.com/androiddevelopers/display-a-camera-preview-with-previewview-86562433d86c
在以往的相机开发中,我们需要手动管理 Surface,配置,旋转等等,而 CameraX 自动帮我们管理。感兴趣的同学可以阅读一下上面的文章。
在 Android Studio 上使用 Dagger
《Dagger navigation support in Android Studio》,地址如下:
https://medium.com/androiddevelopers/dagger-navigation-support-in-android-studio-49aa5d149ec9
继 Database Inspector 之后,Android Studio 4.1 Canary 又内置了对 Dagger 的自动跳转支持,如下图所示:
Kotlin objects
Kotlin Vocabulary 系列的最新文章 —— 《The one and only object》,地址如下:
https://medium.com/androiddevelopers/the-one-and-only-object-5dfd2cf7ab9b
主要介绍了 Kotlin 中的 object 关键字。
在 Kotlin 中,object
有几个用法。第一是实现单例类。object
修饰的单例类,其实是通过私有化构造函数并在静态代码块中实例化来完成的。
通过 Tools > Kotlin > Show Kotlin Bytecode ,可以查看到 kotlinc 编译出来的字节码,再点击 Decompile 可以反编译为 Java 代码。
代码语言:javascript复制object Singleton {
private var count: Int = 0
fun count() {
count
}
}
反编译成 Java 代码是这样的。
代码语言:javascript复制public final class Singleton {
private static int count;
public static final Singleton INSTANCE;
public final int getCount() {return count;}
public final void setCount(int var1) {count = var1;}
public final int count() {
int var1 = count ;
return var1;
}
private Singleton() {}
static {
Singleton var0 = new Singleton();
INSTANCE = var0;
}
}
要注意的是,通过 object 修饰的单例类构造函数不能有参数。如果的确需要参数,也可以参照 DCL 模式。
第二种是 companion object
,Kotlin 中没有 static
关键字,可以用 companion object
来代替。
最后,object
也可以用来表示匿名类,诸如 object : XXX
。
动态刷新率
来自 Android 开发团队的一篇博客 —— 《High refresh rate rendering on Android》,地址如下:
https://android-developers.googleblog.com/2020/04/high-refresh-rate-rendering-on-android.html
Android 11 的一些最新旗舰设备上已经支持了动态刷新率。
很多年以来,大多数 Android 设备的刷新率都是 60 fps ,应用需要在 16 ms 内绘制完每一帧。但是最新的旗舰机已经支持了 90 Hz,甚至 120 Hz 。
上面的文章介绍了 Android 是如何渲染页面的,以及应用如何在 Android 11 上请求不同的刷新率。
AndroidX
AndroidX 发布了一些更新(通常是两周发布一次更新)。
Navigation 2.3.0-alpha06
https://developer.android.com/jetpack/androidx/releases/navigation#2.3.0-alpha06
此版本包含了使用 Kotlin DSL 动态创建 navigation graphs ,通过我们都是在 xml 代码中进行书写。一个很有用的应用场景就是 App Bundle(又和我们没关系了),你可以导航到尚未安装的动态模块中。
Ben Weiss 提供了一个例子来展示如何使用,地址如下:
https://github.com/android/app-bundle-samples/tree/master/DynamicFeatureNavigation/DSL
另外,官网上也有详细介绍,地址如下:
https://developer.android.com/guide/navigation/navigation-kotlin-dsl
Fragment 1.3.0-alpha04
https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0-alpha04
这个版本做了挺大更新,Flywith24 在掘金发布的 【Jetpack更新之Fragment】1.3.0-alpha04 来袭,Fragment 间通信的新姿势 一文做了详细的介绍,推荐阅读。
官方文档中也介绍了如何使用新 API 在 Fragment 间传递输入,地址如下:
https://developer.android.com/training/basics/fragments/pass-data-between
播客
这一栏目其实一直都有,只是我在前面几期的文章里一直没提过。因为是音频节目,我也没听过,就不作介绍了。感兴趣的同学,可以去听一听,地址如下:
http://androidbackstage.blogspot.com/2020/04/episode-138-animated-ime-oh-my.html
最后
到目前为止,这是我的第五篇 Now in Android 系列,更新频率大概在半个月左右。
这个系列文章的反响还不错,我会坚持第一时间将新鲜内容带给大家,也欢迎读者朋友的在看,分享和转发!