在设备上运行应用程序后,应用程序需要清单文件中未提及的不需要的位置权限。当我从我的朋友 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'
}
所以我无法理解为什么它需要位置许可。如何在我的应用程序中添加此位置权限?
compile 'com.google.android.gms:play-services:+'
该库将请求位置权限,因为多个 Play 服务都需要它。
首先,永远不要使用+
。如果您想允许自由浮动的补丁级别(例如,22.0.+
),这并不完全疯狂,但是使用+
对于版本is insane.
接下来,考虑使用一个(或多个)更集中的依赖项,而不是完整的 Play Services SDK。这不仅可能会消除您不需要的权限,而且您的 APK 也会小很多。文档涵盖可用选项(请参阅“选择性地将 API 编译到可执行文件中”部分)。
如果您最终仍然获得不需要的权限,那么您将需要确定这些权限来自何处。应有一份清单合并报告build/outputs/logs/
你的模块。这可能有点难以理解,但希望您能够识别提供此权限的库。此外,当您编辑清单时,Android Studio 2.2+ 将在子选项卡中显示合并的清单。更新2020-03-24:现代版本的 Android Studio 还在清单编辑器的“合并清单”子选项卡中显示这些内容,并使用颜色编码来尝试向您显示哪些权限来自哪些库。
那时,您需要决定如何继续:
这将需要您添加xmlns:tools="http://schemas.android.com/tools"
到根<manifest>
元素(如果尚不存在)。这将告诉构建工具明确排除此权限,即使库正在贡献它。然而,您对这些库的使用可能会中断。仅当您有专门的测试团队可以花费所需的时间来确保您阻止此权限的决定不会导致崩溃或影响用户的其他行为时,才可以执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)