为什么从 AndroidManifest.xml 中删除权限不起作用?

Why does removing permission from AndroidManifest.xml not work?

Play 商店中有一个名为 bodyweight fitness 的应用程序 没有任何权限。它也可以在 git 集线器上使用: https://github.com/mazurio/bodyweight-fitness-android

我使用了来自 git hub 的文件,并使用 Android Studio 自己编译了 apk(不更改文件)。当我尝试安装自编译的应用程序 apk 时,它告诉我它将 使用互联网 尽管 Play 商店应用程序没有。这个应用程序没有理由需要任何互联网连接。因此,我从 AndroidManifest.xml

中删除了这一行

<uses-permission android:name="android.permission.INTERNET" />

编译安装后,还是提示要使用INTERNET。有人知道为什么以及如何删除此权限吗?

PS: 我也问了开发者,但是还没得到回复

更新:

这是因为 INTERNET 权限是 "harmless" 权限。这意味着您不必征求用户的许可,并且 它不会显示在 Google Play 商店

从 Android 5.0 开始,权限有了 "protection level"。有些是危险的,有些是正常的。正常意味着您作为应用程序开发人员不必征求用户的许可,并且它不会显示在 Google Play 中。危险意味着 Google Play 会显示它并且您必须征求用户的许可。

来源和进一步阅读:Android Developers

在开发期间通过您的 Android Studio 安装的应用、从 APK 安装的应用和从 Google Play 商店安装的应用之间存在差异。在后一种情况下会自动授予某些权限,例如互联网或在其他应用程序之上绘图。在规划部署策略时需要考虑到这一点。

每个 android 库都包含带有包、权限、活动等的清单文件,因此您的应用程序将显示依赖项的所有权限。您可以在 {projectDir}/{moduleDir}/build/outputs/logs/manifest-merger-*-report.txt

查看最终清单创建日志

此日志将包含类似内容

uses-permission#android.permission.INTERNET
ADDED from {myModulePath}/app/src/main/AndroidManifest.xml:6:5-67
MERGED from [net.hockeyapp.android:HockeySDK:4.1.1] /Users/devindi/.android/build-cache/ce70c6f87efc05633a59a88fccdb712db509e22d/output/AndroidManifest.xml:12:5-67
MERGED from [com.crashlytics.sdk.android:crashlytics:2.6.8] /Users/devindi/.android/build-cache/424d420499b90aec0a26ab1b5f575e318d0342b9/output/AndroidManifest.xml:9:5-67
MERGED from [com.crashlytics.sdk.android:beta:1.2.5] /Users/devindi/.android/build-cache/be2498e53f6aa976b3927954da943b23f0a800f6/output/AndroidManifest.xml:9:5-67
MERGED from [com.crashlytics.sdk.android:crashlytics-core:2.3.17] /Users/devindi/.android/build-cache/e5b1b150113ac2f0789b76a886f379cdafa8af2b/output/AndroidManifest.xml:52:5-67
MERGED from [com.crashlytics.sdk.android:answers:1.3.13] /Users/devindi/.android/build-cache/c86f3a3daec296cb6a32deb0b3d0c3f1370a024f/output/AndroidManifest.xml:9:5-67
MERGED from [io.fabric.sdk.android:fabric:1.3.17] /Users/devindi/.android/build-cache/0a51b13dbc46dc870c598edab9d128bf8f26a8d4/output/AndroidManifest.xml:29:5-67

如您所见,我在我的清单中请求了网络许可,并且 hockeyapp、crashlytics、fabric 库也请求了相同的许可。 https://developer.android.com/studio/build/manifest-merge.html

要强制删除权限,只需将 tools:node=”remove” 添加到您的权限声明中,如下所示:

<uses-permission android:name=”android.permission.INTERNET” tools:node=”remove” />