Android Q 性能、接口限制、Permissions等开发者常见问题
本文介绍一批Android Q上的常见问题。为应用添加 64 位架构支持会带来 APK 的体积增大,但 Google Play 只允许上传最大 100MB 的 APK,这种情况应该如何解决?我们强烈建议您使用Android App Bundle
这是 Android 所支持的一种官方发布格式,可让您以更高效的方式开发和发布应用。
64-bit
Q: 为应用添加 64 位架构支持会带来 APK 的体积增大,但 Google Play 只允许上传最大 100MB 的 APK,这种情况应该如何解决?
A: 我们强烈建议您使用 Android App Bundle,这是 Android 所支持的一种官方发布格式,可让您以更高效的方式开发和发布应用。当您发布 Android App Bundle 文件到 Google Play 时,如果 Google Play 分析并发现任何一个可能设备的下载包超过 150MB 时,将会拒绝这个 App Bundle 文件。如: 当用户首次下载您的应用时,基础 APK 加上为特定设备而构建的 APK 之和不超过 150MB。除了 Android App Bundle 方式,您也可以为不同架构发布不同的 APK 文件。
- 关于 App Bundle 的介绍,请参阅https://developer.android.google.cn/platform/technology/app-bundle/?hl=zh-cn
Q: 2019 年 8 月 1 号开始没有支持 64 位的在线应用,64 位的手机还能不能下载使用?
A: 因为 Google Play 只提供对适配该设备的应用下载,所以除非设备同时也支持 32 位运行环境,否则将不能下载没有支持 64 位的应用。
Android 性能
Q: 近期的 Android 版本在提升性能上做了什么努力?
A: Android Q 为 ART 运行时新添了多项改进。让开发者无需更改任何代码,便可有效缩短应用的启动时间,减少内存消耗。例如,我们改进了 Android Q 中的 Zygote 进程,提早开启应用进程并将其移至安全容器中,如此一来,应用便做好了随时启动的准备。此外,我们还在应用的系统启动映像中加入了更多信息,例如类,并借助线程管理加快映像文件的加载速度。
与此同时,我们还在 ART 的并发复制垃圾收集器 (Concurrent Copying Garbage Collector) 中加入了分代收集机制 (Generational Garbage Collection)。分代算法可以将新生代的对象单独收集出来,这样效率更高,而且与 Full-heap GC 相比成本更小,释放空间也十分可观。总体而言,引入分代算法后,ART 垃圾回收速度和 CPU 利用效率有了明显提升,在减少垃圾的同时,帮助应用在低端设备上流畅运行。
我们在近期的 Android 版本中也加强了对后台运行以及隐式广播的限制,同时我们也改进了低电耗模式。在 Android 9 中,我们引入了一项名为应用待机群组 (App standby buckets) 的特性。但更重要的是,我们希望和开发者一同去改进应用的质量。
- 关于应用待机群组,请参阅https://developer.android.google.cn/about/versions/pie/power
针对非 SDK 接口的限制
Q: 非 SDK 接口的灰名单是何时确定的?是否会不定时动态更新呢?
A: 非 SDK 接口的各类名单是随着每个 Android 版本的发布而更新的。
- 关于针对非 SDK 接口的限制,请查阅https://developer.android.google.cn/distribute/best-practices/develop/restrictions-non-sdk-interfaces
Bubbles
Q: Bubbles 为何要放在开发者选项?
A: 在 Android Q 中,气泡 (Bubbles) 仅作为一项预览功能,我们仍在探索气泡功能的发展方向。欢迎向我们反馈您的意见,这将有助我们改进气泡功能,并在未来以最好的形式推出该功能。
Q: 当应用在后台被关闭后,此前显示的气泡 (Bubble) 还会显示吗?
A: 气泡是基于通知的,也应该和通知一样工作。
- 反馈您的意见 http://services.google.cn/fb/forms/yourquestions/
- 关于气泡的更多信息,请查阅https://developer.android.google.cn/preview/features/bubbles
CameraX
Q: 现在有哪些手机已经支持 CameraX Extension,以及是否有后续的路线图?
A: 我们正协助包括三星、摩托罗拉和 LG 在内的一系列 OEM 厂商在设备上支持 CameraX Extension。
Q: CameraX 中的图像分析功能是在线还是离线的?它是否支持人脸和物品识别?
A: ImageAnalysis 只会从相机获取实时图像,并传递到开发者定义的分析器。开发者可以利用这些图像来进行更深入的分析,如进行人脸识别。
- 关于分析图片的更多信息,请查阅https://developer.android.google.cn/training/camerax/analyze
Device ID
Q: Android Q 上禁止了对于设备 IMEI 的获取,那么如何更好地唯一识别设备呢?
A: 针对不同的场景,我们建议用不同的唯一标识符。
- 请参阅下方文章,了解更多https://developer.android.google.cn/training/articles/user-data-ids
Q:Device ID 废弃后,如何识别卸载再安装的用户?
A: 在 Android 8.0 或以上的版本中,可以考虑使用 SSAID (Settings.Secure.ANDROID_ID),因为它的生成是基于设备用户安装应用签名的密钥。
Q: 在同一台设备上,不同应用的 Android ID 是否相同?
A: 对于由不同开发者密钥签名的应用或同一设备上的不同用户,Android ID (Setting.Secure.ANDROID_ID 或 SSAID) 是不一样的。如果不同应用由同一开发者密钥签名,那同一用户在这些应用间的 Android ID 是相同的。
Generic System Image (GSI)
Q: GSI 是支持所有手机硬件吗?还是只支持像 Pixel 这样的标准硬件?
A: 支持使用常规系统映像 (GSI) 的设备需要满足以下条件: 完全的 Treble 支持;可解锁 bootloader;停用 Android 启动时验证 (Verify Boot)。我们测试了少量的设备,如 Moto G7/G7+、Sony XZ3、小米 Note7、MIX3,这些是支持的;同时我们发现一加 6T 有兼容性问题,我们正在修复。
Q: 怎么在厂商手机上安装 Android Q?
A: 如果您想安装 Android Q Beta,可参阅 https://developer.android.google.cn/preview/devices/index.html 的有关说明。该页面列举了如何从 OEM 厂商获取并安装 Beta 版本。
Permissions
Q: 为什么扫描蓝牙及 Wi-Fi 热点也需要申请地理位置权限?
A: 因为开发者可以利用这些信息来推断用户的位置。为了提高用户的透明度,Android Q 对这些功能加上了地理位置权限的要求。开发者可以使用系统的对话框来选择 Wi-Fi 热点。
- Wi-Fi network connection APIhttps://developer.android.google.cn/preview/features#peer2peer
- Wi-Fi network suggestion APIhttps://developer.android.google.cn/preview/features#wifi-suggest
其他
Q: 关于应用内存的分析,有什么好的工具或者方法吗?
A: https://developer.android.google.cn/games 提供了一些运行时分析的方法。
原文出处: Android 谷歌开发者