帮助您构建高质量的应用,是我们长期努力的一个方向。为此,我们经常寻找可以在工具和资源上投入精力的领域,这些工具和资源可以使您更加深刻地了解应用的性能。
重大更新
在 Android 11 上,我们引入了两个新工具——"数据访问审核 (Data Access Audit) API" 和 "进程退出原因 (Process Exit Reasons)",这可以使您更清晰地了解隐私数据的访问和进程退出的原因。
数据访问审核 API
Android 鼓励开发者审慎地访问敏感数据。在 Android 11 上,通过访问新的 API,可以给您带来更加透明的私有数据以及受保护数据的使用情况。这一 API 对于那些保留了旧代码或使用了第三方库或 SDK 的大型应用或许会十分有用。
在大型应用中,排查使用隐私数据的归因并非易事
第一个 API 是一个回调,当运行时权限所保护的数据被调用时,它允许应用 回溯到代码调用处。如果希望得到通知,任何应用都可以在 AppOpsManager 中设置回调,每当有代码使用私有数据 (例如获取位置更新) 时都会执行该回调。您可以创建特定的逻辑来跟踪、提取和分析数据。
Android 11 中的数据访问审核 API 有助于追溯您代码中私有数据的使用情况
第二个 API 针对多功能的复杂应用。一个社交类应用可能同时拥有 "查找好友" 以及 "照片标记" 功能,每个功能使用了各自的敏感数据子集。举例来说,"查找好友" 使用了位置、联系人数据,而 "照片标记" 使用位置、联系人以及相机。在 Android 11 中,您可以创建一个新的 Context 对象,该对象可以将应用中的部分代码 归因 于一个或者多个功能。此后,每种权限的使用都将追溯到与此上下文关联的功能。
关于这些 API 的实际使用情况,请查阅 代码示例:
除了帮助您识别私有数据访问之外,Android 11 还包含了另一个新的 API,用来辅助排查无法捕捉现场的崩溃。
进程退出原因
造成应用被终止的原因,可能是 ANR、崩溃或是用户强行关闭应用等诸多情况,也因此难以进行跟踪,我们也收到了开发者们对此的相关反馈。为了诊断应用终止原因,一些开发者正在加入自定义代码,以构建自己的分析程序来改善应用的稳定性。
基于此想法,我们为您提供了一种简化诊断部分的方法。
Android 11 引入了一个新的 ActivityManager API 来上报应用进程终止相关的历史信息。
您的应用可以使用该 API 来获取任何可用的进程退出的历史诊断信息,如进程终止是否源于ANR、内存问题、还是其他原因。
如果应用由于 ANR 导致终止,那么 ApplicationExitInfo.getTraceInputStream() 将在终止之前将一个 InputStream 返回给堆栈跟踪存储。这在高版本的系统上尤其有效,因为出于隐私和安全考虑,高版本系统 提取 ANR traces 文件 将更加复杂。为了避免资源泄漏,读取 InputStream 后将其关闭即可。
此外,您还可以使用新的 ActivityManager.setProcessStateSummary() 方法存储自定义状态信息。您可以保存任意进程数据,这能非常有效地帮助您调试导致应用崩溃的代码段。对于一些开发者来讲,了解应用终止之前的状态必不可少,比如: 游戏开发者可能希望了解进程终止之前用户的游戏等级,一种常见的解决方案是将数据持久化保存,并在应用下次启动时读取。然而需要注意的是,输入数据的大小非常有限。任何保存过的进程状态信息都可以通过 ApplicationExitInfo.getProcessStateSummary() 方法获取。
相关资源
我们希望您通过这些额外的工具可以提升应用的隐私意识和稳定性。详细了解,请参阅以下开发文档:
- 数据访问审核 | Android 开发者:https://developer.android.google.cn/preview/privacy/data-access-auditing
- 进程退出原因 | Android 开发者:https://developer.android.google.cn/preview/features#app-process-exit-reasons