别让引入的 SDK 和第三方库导致您应用被下架!
或许您的应用正在使用一些第三方 SDK 或者代码库,毕竟 "站在巨人的肩膀上" 比从头开始最基础的应用开发更节省时间。作为应用开发者,您需要为应用的整体情况负责,包括用户体验和您的代码,当然,也包含第三方 SDK 和代码库。
当您在考虑使用 SDK 或代码库时,知晓它们对如何处理和使用数据处理尤为重要,这将使得您可以更好地保护用户隐私。
在本文中,我将和大家分享几个工具,可用于应用开发的不同阶段,包括开发阶段和应用发布后 (这是对 SDK 厂商文档的补充,推荐大家仔细阅读 SDK 文档)。
Merged Manifest 视图
为了能够增加灵活性,Gradle 支持多个以应用构建配置、应用模块或代码库依赖需求而定义的单独 Android Manifest 文件。这些清单文件根据工程需要包含不同的默认 XML 元素和属性。当构建应用时,Gradle 会将所有清单文件合并到一个清单文件中。您可以指定 "合并规则" 来定义数值的合并方式。接下来,我们探讨如何使用这个工具洞悉您所依赖的 SDK。
指定 "合并规则"
https://developer.android.google.cn/studio/build/manifest-merge
Android Studio 提供了一种简单的方式来检查最终合并后的清单文件。方法是点击处于清单文件编辑窗口底部的 "Merged Manifest" 标签页。通过界面凸显的不同颜色,您可以清楚地分辨出不同的清单文件来源 (Manifest Sources)。这些源包括不同的代码库依赖,例如下图展示了名称为 "transport-backend" 的依赖在应用中所用到的权限。
Merged Manifest 视图示例
这样的展示效果能够帮助您快速定位到由应用依赖所带来的异常权限请求。由于运行时的权限请求对话框可能会改变用户的交互,因此这些分析数据不仅非常有用,而且还能够使您更加全面地掌握应用的依赖对数据的使用目的。如果有必要的话,您需要向用户解释何时以及为何要访问某些数据。
如果您在合并后的清单文件中看到任何异常的权限使用,请仔细审阅相关依赖库文档 (或者联系开发者),并确保您了解该权限使用的实际目的。
该权限很有可能对于您所使用的服务来说是可选的。对于需要最小化数据使用的场景,您可以在应用模块的清单文件中添加一个 "remove" 节点标记来防止该库的权限请求被合并到最终的应用中。
"remove" 节点标记 https://developer.android.google.cn/studio/build/manifest-merge#node_markers
<uses-permission android:name="SOME_PERMISSION"
tools:node="remove"/>
模块依赖视图
查看模块依赖项
https://developer.android.google.cn/studio/build/dependencies.html#view-dependency-tree
数据访问审计
数据访问审计
https://developer.android.google.cn/guide/topics/data/audit-access
attributionContext = createAttributionContext("orderCoffee")
您可以在之后开发框架的 API 调用中将上面创建的 attributionContext 作为 Context 类型的参数进行使用。
接下来,设置一个回调,当隐私数据被访问的时候会调用该回调。在回调内部,您可以获取 attributionTag (上面所设置的属性标签),并提取堆栈信息或者集成您自己的应用分析方法。
val appOpsCallback = object : AppOpsManager.OnOpNotedCallback() {
// 当您的应用访问了隐私数据的时候,该回调会在应用访问隐私数据的时候被调用
// 比如联系人数据
override fun onNoted(syncNotedAppOp: SyncNotedAppOp) {
logDataAccess(syncNotedAppOp.op,
// 这里会返回上面创建 attributionContext 的时候所传入的标签字符串,
// 比如,这里就是 “orderCoffee”
syncNotedAppOp.attributionTag,
Throwable().stackTrace.toString())
}
数据访问审计
https://developer.android.google.cn/guide/topics/data/audit-access
小结
Android 11 中新增的 Merged Manifest 工具、Gradle 对于模块依赖的支持、数据访问审计 API,均是为了能够帮助开发者针对应用内和 SDK 依赖的数据访问和操作提供额外的监测。从而使您为终端用户展现更好的透明性。推荐大家将这些工具整合进现有的工作流程中。
此外,如果您通过 Google Play 商店发布应用,请确认已经阅读了相关的用户数据策略,并且确保您使用的 SDK 是符合要求的。
用户数据策略
https://support.google.com/googleplay/android-developer/answer/10144311
推荐阅读