Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio在真实设备上运行应用程序后添加了不需要的权限_Android_Android Gradle Plugin_Build.gradle_Android Manifest_Android Permissions - Fatal编程技术网

Android studio在真实设备上运行应用程序后添加了不需要的权限

Android studio在真实设备上运行应用程序后添加了不需要的权限,android,android-gradle-plugin,build.gradle,android-manifest,android-permissions,Android,Android Gradle Plugin,Build.gradle,Android Manifest,Android Permissions,在设备上运行应用程序后,应用程序需要清单文件中未提及的不需要的位置权限。而当我从我的朋友安卓工作室运行相同的代码时,没有额外的权限要求它正常运行 清单文件 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <us

在设备上运行应用程序后,应用程序需要清单文件中未提及的不需要的位置权限。而当我从我的朋友安卓工作室运行相同的代码时,没有额外的权限要求它正常运行

清单文件

<uses-sdk
    android:minSdkVersion="14"
android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>

    <uses-feature
        android:name="android.hardware.telephony"
        android:required="false" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
所以我无法理解为什么它需要位置许可。如何在我的应用程序中添加此位置权限

compile 'com.google.android.gms:play-services:+'
此库将请求位置权限,因为多个播放服务需要它

首先,不要使用
+
。如果您想允许自由浮动补丁级别(例如,
22.0.+
),这并不完全疯狂,但对版本使用
+
是疯狂的

接下来,考虑使用一个(或多个)更集中的依赖关系,而不是完整的Play Service SDK。这不仅可能会消除您不想要的权限,而且您的APK会小得多。介绍了可用的选项(请参阅“选择性地将API编译到可执行文件”一节)

如果您仍然拥有不想要的权限,则需要确定权限的来源。在模块的
构建/输出/日志/
中应该有一个清单合并报告。这将有点难以理解,但希望您能够确定提供此权限的库。此外,当您编辑清单时,Android Studio 2.2+将在子选项卡中显示合并清单更新2020-03-24:Android Studio的现代版本也会在清单编辑器的“合并清单”子选项卡中显示这些内容,并使用颜色编码尝试向您显示哪些权限来自哪些库

此时,您需要决定如何继续:

  • 删除该权限的最安全的答案是不再使用该库,而是找到其他解决方案来解决您试图使用该库解决的任何问题

  • 或者,在允许的情况下生活

  • 或者,尝试将以下内容添加到应用程序的清单中:

    <uses-permission
         android:name="android.permission.ACCESS_COARSE_LOCATION"
         tools:node="remove" />
    
    
    

这将要求您添加
xmlns:tools=”http://schemas.android.com/tools“
到根
元素(如果它不在那里)。这将告诉构建工具显式排除此权限,即使库提供了此权限。但是,您对这些库的使用可能会中断。只有当您有一个专门的测试团队,可以花时间确保您阻止此权限的决定不会导致崩溃或其他影响用户的行为时,才可以这样做。

对于新版本的Google Play服务库,您必须仅添加库中所需的部分作为依赖项。例如,如果您使用Google Play服务库只是为了显示来自Admob的广告,则替换

compile 'com.google.android.gms:play-services:+'


这将删除其他不必要的权限。

您需要检查合并的清单

您使用的库也可以请求权限

这就是许可的来源


可能您正在使用一些使用添加的置换的库检查位于“app\build\intermediates\manifests\debug”中的清单(其中“app”是您的应用程序的主模块名)。它是否包含位置权限?您能否向我们展示您在项目中可能使用的任何其他库?可能是由
访问\网络\状态
访问\无线\状态
之一引起的?尝试暂时删除这些,看看这是否会取消位置权限。太好了!谢谢Google Play服务添加了一些奇怪的权限,如android.permission.USE_凭据和permission.GET_帐户,我的应用程序不需要这些权限,“删除”解决方案将这些权限踢出去。在did中,只有在查看日志文件时,我才能知道它们来自何处。
compile 'com.google.android.gms:play-services:+'
compile 'com.google.android.gms:play-services-ads:7.5.0'