从 Expo 应用程序中删除不需要的权限

Dan*_*iro 10 android google-play react-native expo

我开发了一个 Expo 应用程序(托管)并使用 EAS 生成了 Android 二进制文件。提交二进制文件进行内部测试后,我在 Google Play 商店中看到许多危险的不需要的权限。

Google Play 商店中不需要的权限

更糟糕的是“相机:拍照”和“麦克风:录制音频”。这些吓跑了任何关心隐私的人。

我的应用程序无法访问摄像头或麦克风,而且我不知道这些权限是如何获得的。

我发现了与React-Native和Android开发相关的问题,他们的解决方案是编辑AndroidManifest.xml. 该解决方案与我的案例(托管世博环境)不兼容。不,我不会弹出该应用程序。

PS:也有类似的问题,但没有一个与 Managed Expo 环境相关 - 它们都与 Android 或 React Native 有关。不是同一件事。

Dan*_*iro 12

简短回答:

在 SDK 45+ 上,用于blockedPermissions删除不需要的权限:

"android": {
  // ...
  "blockedPermissions": [
    "android.permission.RECORD_AUDIO",
    "android.permission.CAMERA"
  ]
}
Run Code Online (Sandbox Code Playgroud)

在 SDK 44-上,使用permissions: []. 但这不适用于 EAS 版本,您必须使用经典版本(于 2023 年 1 月停用):

"android": {
  // ...
  "permissions": []
}
Run Code Online (Sandbox Code Playgroud)

长答案

碰巧Expo默认自动包含了很多权限:摄像头访问、麦克风录音、读写外部存储等。

过去,对于 Clasic Builds(于 2023 年 1 月停用),解决方案是包含一个用于删除权限的permissions密钥。app.json

例如,要将它们全部删除,我们曾经这样做:"permissions": []

经典版本被 EAS 版本取代,它们改变了permissions.

在 EAS 构建上,您必须改用blockedPermissions。但该关键字仅在 SDK 45+ 上可用。

来自世博会 Github

permissions密钥在经典构建与 EAS 构建中的工作方式不同。在 EAS Build 上,permissions仅用于添加权限,不会删除任何权限。blockedPermissions仅 EAS Build 和 SDK 45+ 支持。