3

Now in Android #17 —— 最新 Android 动态分享

 3 years ago
source link: https://luyao.tech/archives/now-in-android-17
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大家好,我是秉心说。最新一期的 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 。现在,你也可以为你的应用开启它。

now_in_android_17_1.png

我们可能总是没有足够的 USB 接口(这是在吐槽 Mac 么) ,这个时候无线调试就很方便。

其实现在通过 Android Studio 插件也可以进行无线连接,但在 Android 11 中这已经是系统级功能了。

now_in_android_17_2.png

通过命令行和配对码就可以直接使用该功能。具体使用步骤见官方文档:

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 的自动跳转支持,如下图所示:

dagger_navigation.gif

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 代码。

object Singleton {    private var count: Int = 0     fun count() {        count++    }}

反编译成 Java 代码是这样的。

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 系列,更新频率大概在半个月左右。

这个系列文章的反响还不错,我会坚持第一时间将新鲜内容带给大家,也欢迎读者朋友的在看,分享和转发!

green.png


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK