查看原文
其他

Android 11 新工具 | 提升应用私密性和稳定性

Android 谷歌开发者 2020-09-19
帮助您构建高质量的应用,是我们长期努力的一个方向。为此,我们经常寻找可以在工具和资源上投入精力的领域,这些工具和资源可以使您更加深刻地了解应用的性能。


重大更新


在 Android 11 上,我们引入了两个新工具——"数据访问审核 (Data Access Audit) API" 和 "进程退出原因 (Process Exit Reasons)",这可以使您更清晰地了解隐私数据的访问和进程退出的原因。


数据访问审核 API


Android 鼓励开发者审慎地访问敏感数据。在 Android 11 上,通过访问新的 API,可以给您带来更加透明的私有数据以及受保护数据的使用情况。这一 API 对于那些保留了旧代码或使用了第三方库或 SDK 的大型应用或许会十分有用。
在大型应用中,排查使用隐私数据的归因并非易事
第一个 API 是一个回调,当运行时权限所保护的数据被调用时,它允许应用回溯到代码调用处。如果希望得到通知,任何应用都可以在 AppOpsManager 中设置回调,每当有代码使用私有数据 (例如获取位置更新) 时都会执行该回调。您可以创建特定的逻辑来跟踪、提取和分析数据。

  • 回溯到代码调用处
    https://developer.android.google.cn/preview/privacy/data-access-auditing#log-access
  • AppOpsManager
    https://developer.android.google.cn/reference/android/app/AppOpsManager.OnOpNotedCallback

Android 11 中的数据访问审核 API 有助于追溯您代码中私有数据的使用情况

第二个 API 针对多功能的复杂应用。一个社交类应用可能同时拥有 "查找好友" 以及 "照片标记" 功能,每个功能使用了各自的敏感数据子集。举例来说,"查找好友" 使用了位置、联系人数据,而 "照片标记" 使用位置、联系人以及相机。在 Android 11 中,您可以创建一个新的 Context 对象,该对象可以将应用中的部分代码归因于一个或者多个功能。此后,每种权限的使用都将追溯到与此上下文关联的功能。

  • 归因
    https://developer.android.google.cn/preview/privacy/data-access-auditing#audit-by-attribution-tag

关于这些 API 的实际使用情况,请查阅代码示例:

  • https://github.com/android/permissions-samples/tree/master/DataAccessAuditingKotlin

除了帮助您识别私有数据访问之外,Android 11 还包含了另一个新的 API,用来辅助排查无法捕捉现场的崩溃。


进程退出原因


造成应用被终止的原因,可能是 ANR、崩溃或是用户强行关闭应用等诸多情况,也因此难以进行跟踪,我们也收到了开发者们对此的相关反馈。为了诊断应用终止原因,一些开发者正在加入自定义代码,以构建自己的分析程序来改善应用的稳定性。

基于此想法,我们为您提供了一种简化诊断部分的方法。

Android 11 引入了一个新的 ActivityManager API 来上报应用进程终止相关的历史信息。

  • ActivityManager
    https://developer.android.google.cn/reference/kotlin/android/app/ActivityManager#gethistoricalprocessexitreasons

您的应用可以使用该 API 来获取任何可用的进程退出的历史诊断信息,如进程终止是否源于ANR、内存问题、还是其他原因。

如果应用由于 ANR 导致终止,那么 ApplicationExitInfo.getTraceInputStream() 将在终止之前将一个 InputStream 返回给堆栈跟踪存储。这在高版本的系统上尤其有效,因为出于隐私和安全考虑,高版本系统提取 ANR traces 文件将更加复杂。为了避免资源泄漏,读取 InputStream 后将其关闭即可。

  • ApplicationExitInfo.getTraceInputStream()
    https://developer.android.google.cn/reference/kotlin/android/app/ApplicationExitInfo?hl=en#gettraceinputstream
  • 提取 ANR traces 文件
    https://developer.android.google.cn/topic/performance/vitals/anr#pull_a_traces_file

此外,您还可以使用新的 ActivityManager.setProcessStateSummary() 方法存储自定义状态信息。您可以保存任意进程数据,这能非常有效地帮助您调试导致应用崩溃的代码段。对于一些开发者来讲,了解应用终止之前的状态必不可少,比如: 游戏开发者可能希望了解进程终止之前用户的游戏等级,一种常见的解决方案是将数据持久化保存,并在应用下次启动时读取。然而需要注意的是,输入数据的大小非常有限。任何保存过的进程状态信息都可以通过 ApplicationExitInfo.getProcessStateSummary() 方法获取。

  • ActivityManager.setProcessStateSummary()
    https://developer.android.google.cn/reference/kotlin/android/app/ActivityManager#setprocessstatesummary
  • ApplicationExitInfo.getProcessStateSummary()
    https://developer.android.google.cn/reference/kotlin/android/app/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


推荐阅读






 点击屏末 | 阅读原文 | 前往 Android 11 Beta 版官方网站



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存