Skip to content

Google I O 2019

shewenbiao edited this page Jul 4, 2019 · 4 revisions

List

视频链接

气泡是 Android Q 中的一项新功能。借助气泡,用户可以轻松地在设备上的任何位置进行多任务处理。气泡内置于“通知”系统中。它们会浮动在其他应用内容上层,并会跟随用户转到任意位置。气泡可以展开以显示应用功能和信息,并可在不使用时折叠起来。

当设备处于已锁定状态或“显示屏始终保持开启状态”处于活动状态时,气泡就会像往常的通知那样显示。

气泡是一种可以选择停用的功能。在应用显示其第一个气泡时,系统会显示一个权限对话框,其中提供两个选项:

  • 屏蔽来自您的应用的所有气泡 - 通知不会被屏蔽,但永远不会显示为气泡
  • 允许来自您的应用的所有气泡 - 通过 BubbleMetaData 发送的所有通知都会显示为气泡

bubbles_screenshot

最佳做法

  • 气泡会占用屏幕空间并遮盖其他应用内容。仅当非常需要显示气泡(例如进行中的通信)或用户明确要求为某些内容显示气泡时,才将通知发送为气泡。
  • 请注意,用户可以停用气泡。在这种情况下,气泡通知会显示为一般通知。您应该始终确保您的气泡通知也可以作为一般通知使用。
  • 从气泡启动的进程(例如 Activity 和对话框)会显示在气泡容器中。这意味着气泡可以有任务堆栈。如果您的气泡中有很多功能或导航,情况就会变得很复杂。我们建议您尽量让功能保持具体且不复杂。

气泡的使用

在Android Q 中将 Direct Share API 替换为新的 Sharing Shortcuts API。现有的“直接共享”机制将继续有效,但优先级低于所有使用新版 API 的应用。

Sharing Shortcuts API 允许应用提前发布直接共享目标,而不是被动地按需检索结果。这就是 ShortcutManager 的工作原理。由于这两个 API 类似,因此我们扩展了 ShortcutInfo API 以让这两个功能更易于使用。借助新版 API,您可以直接将类别或人员分配到共享目标。在同一应用更新共享目标或此应用被卸载之前,这些共享目标会一直保留在系统中

示例代码:SharingShortcuts

Share Sheet

Sharing Improvement的具体使用以及常见的问题解答

原文链接(https://developer.android.com/preview/features/darktheme)

Android Q提供了一个新的Dark主题,适用于Android系统UI和设备上运行的应用程序。

Dark theme有很多好处:

  • 可以大幅减少用电量(取决于设备的屏幕技术)。
  • 提高低视力用户和对强光敏感的用户的可视性。
  • 使任何人都可以在光线不足的环境中使用设备。

在Android Q中,有三种方法可以启用Dark主题:

  • 新的系统设置(设置 - >显示 - >主题)允许用户启用Dark主题。
  • 新的Quick Settings tile允许用户从通知托盘中快速切换主题(一旦启用Quick Settings)。
  • 在Pixel设备上,Battery Saver模式还可以同时启用Dark主题。 其他OEM可能支持也可能不支持此行为。

Supporting Dark theme in your app


In order to support Dark theme, you must set your app's theme (usually found in res/values/styles.xml) to inherit from a DayNight theme:

<style name="AppTheme" parent="Theme.AppCompat.DayNight">

You can also use MaterialComponents' dark theming:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

这将应用程序的主题与系统控制的夜间模式联系起来,并为应用程序提供默认的Dark主题(启用时)。

注意的点:

您的主题和样式应避免使用硬编码颜色或旨在在Light theme主题下使用的图标。 您应该使用主题属性(首选)或夜间限定资源。

以下是要了解的两个最重要的主题属性:

  • ?android:attr / textColorPrimary这是一种通用的文本颜色。 它在Light主题中接近黑色,在Dark主题上接近白色。 包含一个disable状态。
  • ?attr / colorControlNormal通用图标颜色。 包含一个disable状态。

建议使用Material Design Components,因为它的颜色主题系统(例如主题属性?attr / colorSurface和?attr / colorOnSurface)可以轻松访问合适的颜色。 当然,您可以在主题中自定义这些属性。

Force Dark


Android Q提供Force Dark,这是开发人员快速实现Dark主题的功能,无需明确设置DayNight主题。

Force Dark分析以Light theme为主题的应用程序的每个View,并在绘制到屏幕之前自动应用Dark主题。 通过使用 Force Dark可以减少开发在实现Dark主题所需的时间。

应用必须通过在应用主题中设置android:forceDarkAllowed =“true”来使用Force Dark。 此属性设置在所有系统和AndroidX提供的Light theme主题上,例如Theme.Material.Light。 当您使用Force Dark时,您应该确保彻底测试您的应用并根据需要排除一些view。

如果您的应用使用dark theme(例如Theme.Material),则Fore Dark不会生效。 同样,如果您的应用主题继承自DayNight主题,也不会应用Force Dark。

Disabling Force Dark on a view

Force Dark can be controlled on specific views with the android:forceDarkAllowed layout attribute or with setForceDarkAllowed().

notifications_action

Android Q引入了完全手势系统导航的选项。 应用开发者应该为准备此功能做两件事:

gesture_navigation

Gesture Navigation的具体使用

Android Q 包含一个新的 AudioPlaybackCapture API。应用可以借助此 API 复制其他应用正在播放的音频。该功能类似于屏幕采集,但针对的是音频。主要用例是影音在线播放应用,这些应用希望捕获游戏当前播放的音频。

playback_capture

关于捕获音频的具体使用,见https://developer.android.com/preview/features/playback-capture

Android设备上的不同硬件供应商提供了许多OpenGL ES驱动程序。这会导致这些驱动程序的行为不一致。这也意味着错误修复通常不会传播到所有设备,并有助于导致OpenGL ES生态系统的碎片化。

随着Android Q的发布,Android开发人员和合作伙伴可以选择使用ANGLE运行,这是Chrome组织中的一个项目,它将ES层叠在Vulkan之上,而不是使用供应商提供的ES驱动程序。

当ANGLE可用时,开发人员和OEM可以决定特定应用程序是否应该使用ANGLE。由于完整的OpenGL驱动程序需要时间,因此Android Q引入了一个选择加入选项,让开发人员可以逐步进行转换。 ANGLE将随着时间的推移而更新,引入更多OpenGL功能,错误修复和性能优化。 Android Q引入了两项新功能,可帮助您根据每个应用评估和选择ANGLE:

为了在开发人员级别评估ANGLE,Android Q包含一个开发人员选项设置,允许开发人员指定非核心应用程序应该与ANGLE一起运行。

当Android Q发布时,ANGLE APK将包含一个配置文件,指示哪些应用程序应该或不应该使用ANGLE。

How to select ANGLE

CameraX

使用链接

ViewBindings_1

ViewBindings_2

External Storage

更多详情见:https://developer.android.com/preview/privacy/scoped-storage

Android Q限制了应用何时可以start activities。 此行为更改有助于最大限度地减少用户的中断,并使用户更好地控制屏幕上显示的内容。

此行为更改适用于在Android Q上运行的所有应用,甚至是针对Android 9(API级别28)或更低级别的应用。 此外,即使您的应用面向Android 9或更低版本且最初安装在运行Android 9或更低版本的设备上,在设备升级到Android Q后,行为更改仍会生效。

实际上,大多数应用程序都不受此更改的影响。

Background Activity Starts

更多详情见:https://developer.android.com/preview/privacy/background-activity-starts

Changes affecting all apps


The following change affects all apps running on Android Q, even if they target Android 9 (API level 28) or lower.

访问所有camera信息需要请求权限

Android Q更改了默认情况下getCameraCharacteristics()方法返回的信息。 特别是,您的应用必须具有CAMERA权限才能访问此方法的返回值中包含的潜在设备特定元数据。

如果您的应用没有CAMERA权限,则无法访问以下信息:

  • ANDROID_LENS_POSE_ROTATION
  • ANDROID_LENS_POSE_TRANSLATION
  • ANDROID_LENS_INTRINSIC_CALIBRATION
  • ANDROID_LENS_RADIAL_DISTORTION
  • ANDROID_LENS_POSE_REFERENCE
  • ANDROID_LENS_DISTORTION
  • ANDROID_LENS_INFO_HYPERFOCAL_DISTANCE
  • ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE
  • ANDROID_SENSOR_REFERENCE_ILLUMINANT1
  • ANDROID_SENSOR_REFERENCE_ILLUMINANT2
  • ANDROID_SENSOR_CALIBRATION_TRANSFORM1
  • ANDROID_SENSOR_CALIBRATION_TRANSFORM2
  • ANDROID_SENSOR_COLOR_TRANSFORM1
  • ANDROID_SENSOR_COLOR_TRANSFORM2
  • ANDROID_SENSOR_FORWARD_MATRIX1
  • ANDROID_SENSOR_FORWARD_MATRIX2

Changes affecting apps targeting Android Q


The following changes affect apps only if they target Android Q.

启用和禁用Wi-Fi的限制

针对Android Q的应用无法启用或停用Wi-Fi。 WifiManager.setWifiEnabled()方法始终返回false。

如果需要,请使用Settings Panel提示用户启用和禁用Wi-Fi。

Connectivity

更多详情见:https://developer.android.com/preview/privacy/camera-connectivity

Settings Panel

Architecture_Component

ViewPager2

ViewPager2的简单使用

Android Q让用户可以更好地控制应用何时可以访问设备位置。 当在Android Q上运行的应用程序请求位置访问时,用户会看到如下图所示的对话框。此对话框允许用户授予对两个不同范围的位置访问权限:使用应用期间(仅限前台)或任何时候(前台和后台)。

Request Location

为了支持用户对应用访问位置信息的额外控制,Android Q引入了新的位置权限ACCESS_BACKGROUND_LOCATION。 与现有的ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限不同,新权限仅影响应用在后台运行时对位置的访问权限。

更多详情见:https://developer.android.com/preview/privacy/device-location

视频链接

2.1.1 Beef up analytics(加强分析) Data Sharing

Exception Dashboard

Exception Dashboard

如果打开了Data Sharing, 当Android Studio抛出异常时,会自动将异常上传到AndroidStudio官方Server, 在Exception Dashboard上可以看到具体信息, 这有助于他们解决Bug, 改善Android Studio.

UI Freezes Dashboard

如果Android Studio UI线程在几秒钟无响应,则会自动抓取整个线程dump信息,并传到Server, 在UI Freezes Dashboard上可以看到具体信息.

UI Freezes Dashboard

Regression infrastructure

Regression infrastructure

OutOfMemoryException Dashboard

当IDE发生OOM的时候,会自动将信息同步到Server,并在OutOfMemoryException Dashboard上可以看到具体信息

OOM Dashboard

2.1.2 Memory Settings

Android Studio 3.5会自动检测系统可用RAM以及项目Size, 并会提示建议,如下图所示

MemorySettings

还可以直接到设置里面去设置

MemorySettings2

2.1.3 Capturing Android Studio heap dump

如果Android Studio耗尽内存或几乎内存不足,会自动抓取堆存储信息并生成文件,存放在你的机子上。

Capturing heap dump

然后在下次启动Android Studio的时候,会生成Memory Use Report并删除存储在本地的文件,并会有一个弹框提醒(如下图所示),用户可以点击查看Report详情,并可以选择发送给Server

Memory use report

Memory Use Report detail

2.1.4 New test runner

New test runner

2.1.5 Performance impact of Virus Checker

Performance impact of virus checker

Performance impact of virus checker2

2.1.6 优化模拟器的CPU使用

2.2.1 Apply Change Apply Chage

AndroidStudio 3.5预览版推出了一个新功能——ApplyChange,替换原来的InstantRun功能。ApplyChange采用了跟InstantRun不一样的原理来加快AndroidStudio的部署安装apk的流程。和InstantRun不同的是,它不会在构建过程中去修改apk。它依赖的是安卓8.0开始虚拟机支持的特殊指令来进行类的替换。

当连接上安卓8.0及以上的设备时,as将会多出两个按钮

  • ApplyChanges部署资源和代码改动到手机,重启activity,但是无需重启应用。
  • 仅部署代码改动到手机,不需要重启activity和应用。

ApplyChanges的核心是要找出AndroidStudio构建出来的apk和已经安装到手机设备apk的差异。找出差异后,然后将差异发送到手机上执行差异合并。

参考链接

2.2.2 Gradle Sync Gradle Sync

使用Gradle构建,会在home目录下缓存项目所有相关的jar文件, 在Gralde 4.10版本上新增了一个自动清除缓存的功能(如下图所示),如果一个library在7天到30天内没有被gradle使用到那么其缓存就会被自动清除。但是为了性能,在重启studio的时候并不会进行真实的Gradle构建,而是加载上次cache的同步状态,如果缓存被清除了,就会出现上图所示的各种报红的情况。这种情况下,只要rebuild就行了。

Gradle4.10

2.2.3 Offline components

Offline components

Android Studio3.5支持在官网直接下载Android Gradle Plugin和Google Maven dependencies,下载完后直接在home目录下解压,然后将下图中显示的脚本放到gradle的初始化文件夹里.

offline.gradle

2.2.4 Project Upgrades

如果你是在android studio3.1上创建的项目,然后在android studio3.3上打开,就会出现如图所示的警告信息,为了良好的体验,在3.5版本上不再显示这些警告信息。

Project Upgrades

2.2.5 Data Binding

在Android Studio3.5上解决了一些关于Data Binding已知的一些问题,为了更好的使用Data Bing,建议使用Android Studio3.5版本。

Bug backlog

以前伴随着AndroidStudio的更新,gradle版本也需要更新,但是gradle版本一更新,旧项目就开始不适应了,编译上出现一堆问题(尤其是以前AS2.0时代),从AS3.5版本开始,AS的更新与gradle的更新独立开来,不会出现伴随着AS的更新,gralde也需要更新的问题.

以下几个都是在AndroidStudio3.4上新增的功能

2.5.1 Dependencies

dependencies面板(下图中所示),列出了当前模块依赖的第三方库.

dependencies_1

dependencies面板中最关键的一个地方就是依赖库的查找

通过dependencies里面的+按钮,再选中Library Dependency就可以打开搜索页面了,可以搜Maven,JCenter等远程的仓库,也可以搜索本地的,大大减少了添加依赖时找包的问题.

dependencies2

dependencies_search

但是也有一个需要注意的地方,如上图中search框上方提到的,查找的第三方库都是根据我们projects项目的build.gradle中的repositories中配置的仓库控制。例如google,jcenter,Maven那些。

2.5.2 Suggestions

对当前项目模块构建的信息做一个提示建议,最直观的就是依赖的升级

suggestions

Resource Manager(资源管理器)是AndroidStudio3.4引入的,默认会在左边的侧边栏找到,或者通过View->Tool Windows->Resource Manager找到.

ResourceManager有哪些优势:

  1. 可以直观得查看图片,布局,颜色.以前看具体图片以及布局都需要一个个点进去看,非常麻烦. 打开Resource Manager后如下图所示

ResourceManager1

ResourceManager2

  1. 导入图片的时候还能提醒图片命名错误

syntax error

3. 可直接从Resource Manger里将图片拖到布局里,如果拖到的地方是一个空白的地方,就会自动生成一个ImageView,如果拖到布局里已有的ImageView地方,就会自动替换该ImageView引用的图片

MotionLayout是ConstraintLayout的子类,它作为连接布局过度和复杂的手势操作之间的桥梁而生。 可以把它当做介于属性动画框架、TransitionManager 和 CoordinatorLayout 之间的功能集合。

与通常的布局不同,MotionLayout所做的约束保存在一个单独的XML文件MotionScene中,该文件存储在您的res/xml目录中。MotionScene文件可以包含指定动画所需的全部内容.

MotionScene

MotionLayout

关于MotionLayout的使用,可以参考

  1. https://blog.csdn.net/u013762572/article/details/90288716
  2. https://www.jianshu.com/p/5203cf11d943
  3. https://github.com/googlesamples/android-ConstraintLayoutExamples

视频链接

首先看下Android Gradle Plugin的多线程模式

  • 子模块可以并行构建
  • 一些任务通过JDK的executor service来分配工作量
  • 单个模块的多个任务只能按顺序运行

从第三点就能看出来单个模块多个任务不能并行运行,这样明显影响build的效率。因此引入了Workers. Workers能够使单个模块的多个任务并行运行,提高build的效率

workers1 上图中分别为TaskB和TaskC创建了一个worker, 两个任务可并行运行,TaskC无需等待TaskB运行完成

使能workers workers2

  • 与Gradle合作以获得更快的transform APIs
  • 通过更好的调度改进并行化
  • 启用预先dexded库的缓存

Artifact Transforms1

以下是Artifact Transforms和没有Artifact Transforms的区别,有Artifact Transforms的情况下,clean build速度提高了15%

Artifact Transforms2

![Artifact Transforms3] (https://github.com/shewenbiao/MyArsenal/blob/master/google_io_2019_img/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202019-06-26%20%E4%B8%8A%E5%8D%882.37.33.png)

Lazy Task Configuration

Lazy Task Configuration2

incremental annotations

Kotlin annotation

improve sync

Apply Change

improved build output

improved build output2

3.9.1 Internal benchmarks

为了在内部测量构建速度,使用一组基准测试,如下图所示

internal benchmarks

以下是测试的数据对比

Code Change

Code Change

Code Change2

Resource Change

Resource Change

Resource Change2

3.9.2 Example: Spotify

Spotify

Spotify(incremental)

Spotify incremental

Spotify(cached)

Spotify Cached

3.9.3 Continued improvements

Continued improvements

3.9.4 Speed attribution

Speed attribution

3.9.5 Free tools

Free tools

Gradle Scan: It will give you information about why the tasks run, what were the dependencies.(它将为您提供有关任务运行原因,依赖项的信息。)

Gradle Profiler: It will give you information about why your task ran and all that kind of stuff.(它将为您提供有关您的任务运行原因和所有类型的信息。)

3.9.6 Chrome trace

Chrome trace

How to enable Chrome trace

enable chrome trace

Clone this wiki locally