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

bfnvny8b  于 2023-03-06  发布在  Android
关注(0)|答案(4)|浏览(158)

在设备上运行应用程序后,应用程序需要不需要的位置权限,清单文件中没有提到。而当我运行相同的代码从我的朋友Android Studio比它运行正常,无需额外的权限。
清单文件

<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" />

Build.gradle

    apply plugin: 'com.android.application'

    android {
        compileSdkVersion 21
        buildToolsVersion "21.1.2"

        defaultConfig {
            applicationId "xxxxxxx"
        }
        dexOptions {

            javaMaxHeapSize "4g"
        }

        packagingOptions {
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/NOTICE'
        }

        lintOptions{
            abortOnError false
        }
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        compile 'com.google.android.gms:play-services:+'

        compile 'com.android.support:multidex:1.0.0'
        compile 'com.android.support:appcompat-v7:21.0.3'
    }

所以我不明白为什么它需要位置权限。这个位置权限是如何添加到我的应用程序中的?

mfuanj7w

mfuanj7w1#

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

此库将请求位置权限,因为有多个播放服务需要此权限。
首先,不要使用+,如果你想允许自由浮动的补丁级别(例如22.0.+),这并不完全是疯狂的,但是在版本 * 中使用+是疯狂的。
接下来,请考虑使用一个(或多个)更集中的依赖项,而不是完整的Play Services SDK。这不仅可能会消除您不想要的权限,而且您的APK也会小很多。文档介绍了可用的选项(请参阅“选择性地将API编译到可执行文件”部分)。
如果你仍然拥有你不想要的权限,那么你需要确定这些权限是从哪里来的。在你的模块的build/outputs/logs/中应该有一个清单合并报告。这可能有点难以理解,但是希望你能确定提供这个权限的库。另外,编辑清单时,Android Studio 2.2+将在子选项卡中显示合并清单。更新2020-03-24:现代版本的Android Studio还会在清单编辑器的“Merged Manifest”子选项卡中显示这些内容,并使用颜色编码来尝试显示哪些权限来自哪些库。
此时,您需要决定如何继续:

  • 删除该权限的最安全的方法是不再使用该库,而是找到其他方法来解决您试图使用该库解决的任何问题
  • 或者,活在许可之下
  • 或者,尝试将以下内容添加到应用的清单:
<uses-permission
     android:name="android.permission.ACCESS_COARSE_LOCATION"
     tools:node="remove" />

如果<manifest>元素还没有xmlns:tools="http://schemas.android.com/tools"元素,这将要求您将其添加到根元素<manifest>中。这将告诉生成工具显式地排除此权限,即使库正在提供此权限。但是,使用这些库可能会破坏。只有当您有专门的测试团队可以花费所需的时间来确保您阻止此权限的决定不会导致崩溃或影响用户的其他行为。

gorkyyrv

gorkyyrv2#

您需要检查合并的清单。
您使用的库也可以请求权限。
这就是许可的来源。

jm81lzqq

jm81lzqq3#

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

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

compile 'com.google.android.gms:play-services-ads:7.5.0'

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

9bfwbjaz

9bfwbjaz4#

有时候,我们在项目中添加了第三方库,他们会请求我们没有添加的权限,您可以通过此路径查看哪个库正在使用哪个权限。

    • 转到:**

[项目根目录]/应用程序/构建/输出/日志/清单合并调试报告. txt

你可以在那里找到你所有的许可
通过合并清单检查权限的另一种方法是
为此:
1.运行您的应用
1.转到清单文件
1.单击合并清单

相关问题