我所有的
AndroidManifest.xml是:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
我的build.gradle:
apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "net.perspiratron.ifpaprofile" minSdkVersion 15 targetSdkVersion 22 versionCode 3 versionName "1.2" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs',include: ['*.jar']) // wearApp project(':wear') compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.google.android.gms:play-services-analytics:7.5.0' compile 'com.google.android.gms:play-services-location:7.5.0' compile 'com.jjoe64:graphview:4.0.0' }
我唯一添加的是播放服务位置.为什么这个图书馆需要它?
解决方法
简短的答案:我不认为播放服务位置确实需要这些权限.它似乎也不需要android.permission.ACCESS_NETWORK_STATE或android.permission.INTERNET,也正在添加.
更长的答案:
看看我的清单合并日志,似乎所有这四个权限都被包含在播放服务地图的请求中,哪个位置是自动链接的.我的应用程序没有使用-maps,只是位置.
此外,我发现这种行为刚刚出现在播放服务位置的7.5.0版本中;以前的版本不包括-maps,并且不添加这些权限.
实际上我怀疑这种与播放服务地图的连接是偶然的,将来会在GMS的版本中被删除.
跟随Mark Murphy(CommonsWare)提供的链接,您可以通过在清单中添加以下行来从应用程序中删除这些权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" tools:node="remove" /> <uses-permission android:name="android.permission.INTERNET" tools:node="remove" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" />
请注意,您的开头< manifest ...>中还需要xmlns:tools =“http://schemas.android.com/tools”要使这些工作.并且通常的注意事项适用:我的应用程序在采取这一步后工作正常,但YMMV.
更新2015年9月10日:Mark Murphy(@commonsware)在他的博客上完成了an excellent writeup on this issue,包括讨论我的解决方案的风险.