代码之家  ›  专栏  ›  技术社区  ›  Elletlar FireTr3e

在创建声明敏感权限的新应用版本之前,您无法编辑此应用[重复]

  •  1
  • Elletlar FireTr3e  · 技术社区  · 6 年前

    清单文件

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

    enter image description here

    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'
        }
    

    所以我无法理解为什么它需要位置许可。如何在我的应用程序中添加此位置权限?

    0 回复  |  直到 6 年前
        1
  •  39
  •   CommonsWare    4 年前
    compile 'com.google.android.gms:play-services:+'
    

    此库将请求位置权限,因为多个播放服务需要它。

    首先,永远不要使用 + . 如果您希望允许自由浮动的补丁级别(例如。, 22.0.+ )这并不完全疯狂,但使用 对于版本 精神失常的

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

    如果您仍然拥有不想要的权限,则需要确定权限的来源。应该有一个明显的合并报告在 build/outputs/logs/ 更新2020-03-24 :Android Studio的现代版本也会在清单编辑器的“合并清单”子选项卡中显示这些内容,并使用颜色编码尝试向您显示哪些权限来自哪些库。

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

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

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

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

    这将需要您添加 xmlns:tools="http://schemas.android.com/tools" 彻底 <manifest> 您对这些库的使用可能会中断 . 只有当您有一个专门的测试团队,可以花时间确保您阻止此权限的决定不会导致崩溃或其他影响用户的行为时,才可以这样做。

        2
  •  6
  •   Goran Horia Mihail    6 年前

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

    这就是许可的来源。

    enter image description here

        3
  •  4
  •   eyeslave    9 年前

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

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

    具有

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

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