移除AndroidManifest.xml中的权限为何不生效?
我来帮你拆解这个常见的编译权限问题——自己构建的APK出现了商店版没有的权限,大概率是清单合并机制或者第三方依赖在幕后起作用,下面是几个具体的排查和解决方向:
第三方依赖悄悄引入权限
很多看似和网络无关的Android库,会在自身的AndroidManifest.xml里声明INTERNET权限。当你构建项目时,Android的清单合并工具会自动把所有依赖的权限整合到最终的APK清单中。比如Crash上报库、分析统计库,甚至一些UI组件库都可能附带这个权限。
你可以在Android Studio里直接查看合并后的最终清单:打开app/build/intermediates/merged_manifests/[你的构建变体]/AndroidManifest.xml,搜索INTERNET就能定位到是哪个依赖库添加的权限。缺少强制移除权限的声明
如果你只是删掉了自己Manifest里的权限声明,但依赖库的权限还在,合并后的清单依然会保留它。这时候需要用tools:node="remove"来强制移除:<uses-permission android:name="android.permission.INTERNET" tools:node="remove" />注意要在Manifest的根标签里添加
xmlns:tools="http://schemas.android.com/tools"命名空间,否则tools标签会报错。构建变体/产品风味的配置差异
商店版可能用了特定的构建配置(比如release风味),其中包含了移除权限的逻辑,而你编译的是默认的debug变体,没有应用这个配置。可以检查Module级别的build.gradle文件里的productFlavors或buildTypes区块,看看有没有针对不同变体的权限处理规则。Gradle/AGP版本差异
如果你使用的Gradle或Android Gradle Plugin(AGP)版本和开发者上传商店时的版本不一致,某些新版本可能会默认添加权限或者修改清单合并规则。可以尝试把AGP版本降到项目README中提到的版本,再重新编译测试。
建议你先从查看合并后的清单入手,定位到权限的来源,再针对性解决问题。
内容的提问来源于stack exchange,提问作者Welcor

