减少使用非 SDK 接口,提升系统稳定性

2018 年 3 月 16 日 谷歌开发者 Google Play

我们一直寻求改善 Android 用户以及开发者体验的方法,尽力提供稳定的体验。秉持这种精神,我们限制了 app 使用非 SDK 接口,因为此类作法往往存在用户遇上系统崩溃以及开发者需要紧急发布修复的风险。在 Android N 当中,我们限制了 C/C++ 代码所能使用的符号,从而确保使用 C++ 代码的 app 能够始终对接稳定的 NDK 接口,而不会因使用不稳定的非 NDK 接口而频频奔溃。自 Android P 起,我们将进一步提升系统稳定性,扩展此类限制至 Java 语言 SDK 接口。



将会有哪些行为?

Android P 版本开始,我们会限制使用非 SDK 方法与字段:您将无法对其进行访问 —— 无论通过直接调用、反射还是 JNI 等方式。如果加以尝试,您会收到 NoSuchFieldException 或者 NoSuchMethodException 等错误提示。

最初,此项限制主要针对使用频次较低或未使用的接口。在计划与设计工作当中,我们在解决用户及设备制造商反馈的 app 稳定性问题方面,会尊重广大开发者群体意见,同时尽可能降低变更幅度。如果您在迁移至 SDK 方法过程中,遇到技术方面的挑战,我们容许您在 app 更新至最新 API 之前继续使用原有方法。我们计划在今后的 Android 版本中进一步落实这些限制,同时提前通知各位开发人员,确保给予各位充分的时间迁移,并在此期间收集与所需 SDK 接口相关的反馈意见。我们一直强调使用非 SDK 接口带来的风险 —— 在任何版本的 Android 中重构代码以添加功能或修复 bug 时,非 SDK 接口都可能发生变化。因此,如果您的应用程序目前仍依赖于非 SDK 接口,则应尽快开始向 SDK 接口进行迁移。


由于 Java 语言与 C++ 的特性差异,因此该限制将与之前的符号限制略有区别。您不可访问不属于公开 SDK 的类别,同时请确保只使用各个类中被归入官方文档的部分。尤其需要注意的是,当您通过反射等语义与某个类进行交互时,不可访问未在 SDK 中明确列出的方法或字段。



如果缺少 SDK 接口,该如何应对?

我们了解到并不是所有 app 使用的非 SDK 接口都有可替代的 SDK 接口。我们重视您就公共 API 扩展及改进问题提出的反馈意见。如果您觉得在 SDK API 得到对应扩展之前无法停止使用非 SDK 接口,请尽快通过错误追踪器 (bug tracker) 向我们反馈。及时获取这些反馈意见对我们来说非常重要,我们需要利用这些信息调整限制黑名单,从而最大程度减少对开发人员产生的影响,同时着手为今后推出的 Android 平台开发必要的 SDK 接口。



下一步是什么?

在 Android P 开发者预览版当中,您将能够运行现有 app,并在使用非 SDK 接口时收到警告提示 —— 该接口会被列入最终版本的黑名单或灰名单。最好确保您的 app 在开发者预览版中能流畅运行;如果您担心自己的 app 可能受到影响,请特别留意接口兼容性警告信息。

在新开发者预览版发布以及错误追踪器分类条目更新之际,我们会继续监控非 SDK 接口的使用情况。如果官方 SDK 接口已经存在,我们将发布官方指南文档帮助您从常用的非 SDK 接口迁移至 SDK 接口。

相关内容延展请发送对应口令即可获得:
> API 程序包:API
Android Developers 官方文档:官方文档

推荐阅读:

Android P 开发者预览版首发!

架构组件之 ViewModel | 中文教学视频

隆重推出 Android KTX,让 Kotlin 的开发更美妙!

撸猫游戏千千万,他们凭什么被推荐?


登录查看更多
0

相关内容

SDK(Software Development Kit, 即软件开发工具包 )一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
FPGA加速系统开发工具设计:综述与实践
专知会员服务
65+阅读 · 2020年6月24日
【CMU】深度学习模型中集成优化、约束和控制,33页ppt
专知会员服务
45+阅读 · 2020年5月23日
大数据安全技术研究进展
专知会员服务
92+阅读 · 2020年5月2日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
介绍WAF以及过滤机制
黑白之道
22+阅读 · 2019年2月5日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
免费云真机测试 | 让您的应用完美适配 Android Oreo
引力空间站
3+阅读 · 2018年2月2日
ROS 2正式版终于来了,还增加了这些新特性
量子位
3+阅读 · 2017年12月11日
PyTorch vs. TensorFlow之一个月用户体验
深度学习世界
3+阅读 · 2017年10月21日
Arxiv
92+阅读 · 2020年2月28日
AutoML: A Survey of the State-of-the-Art
Arxiv
69+阅读 · 2019年8月14日
Arxiv
15+阅读 · 2019年4月4日
Meta-Transfer Learning for Few-Shot Learning
Arxiv
8+阅读 · 2018年12月6日
Arxiv
5+阅读 · 2018年5月1日
VIP会员
相关资讯
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
从webview到flutter:详解iOS中的Web开发
前端之巅
5+阅读 · 2019年3月24日
介绍WAF以及过滤机制
黑白之道
22+阅读 · 2019年2月5日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
Python 杠上 Java、C/C++,赢面有几成?
CSDN
6+阅读 · 2018年4月12日
免费云真机测试 | 让您的应用完美适配 Android Oreo
引力空间站
3+阅读 · 2018年2月2日
ROS 2正式版终于来了,还增加了这些新特性
量子位
3+阅读 · 2017年12月11日
PyTorch vs. TensorFlow之一个月用户体验
深度学习世界
3+阅读 · 2017年10月21日
相关论文
Arxiv
92+阅读 · 2020年2月28日
AutoML: A Survey of the State-of-the-Art
Arxiv
69+阅读 · 2019年8月14日
Arxiv
15+阅读 · 2019年4月4日
Meta-Transfer Learning for Few-Shot Learning
Arxiv
8+阅读 · 2018年12月6日
Arxiv
5+阅读 · 2018年5月1日
Top
微信扫码咨询专知VIP会员