10

我只有在AndroidManifest.xml是:爲什麼play-services-location需要android.permission.WRITE_EXTERNAL_STORAGE和android.permission.READ_EXTERNAL_STORAGE權限?

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

上傳APK到開發者控制檯後,增加了兩個新的權限: enter image description here

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

我添加的唯一東西是play-services-location。爲什麼這個圖書館需要它?

+0

http://stackoverflow.com/questions/30546197/android-studio-add-unwanted-permission-after-running-application-on-real-device – CommonsWare

+0

好吧,我添加了play-services-location ... – dols

+0

更改了問題的標題.. – dols

回答

16

簡答:我不相信play-services-location確實需要這些權限。它似乎也不需要android.permission.ACCESS_NETWORK_STATEandroid.permission.INTERNET,它們也被添加。

更長的回答: 看看我的清單合併日誌,似乎所有這四個權限都包含在play-services-maps的請求中,這些地址是自動鏈接的。我的應用程序沒有使用-maps,只是-location。

此外,我發現這種行爲剛剛出現在play-services-location的7.5.0版本中;之前的版本不包括-maps,並且不添加這些權限。

我真的懷疑這個連接到play-services-maps是偶然的,並且將在未來版本的GMS中被刪除。

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

請注意,您還需要xmlns:tools="http://schemas.android.com/tools"在:

由馬克·墨菲(CommonsWare)中給出的鏈接起來之後,您可以通過添加以下行到你的清單,從應用中刪除這些權限您的開放<manifest ... >元素使這些工作。而通常的注意事項適用於:我的應用程序採取這一步後,罰款,但YMMV。


更新2015年9月10日:馬克·墨菲(@commonsware)做an excellent writeup on this issue在他的博客,其中包括我的解決方案的風險進行了討論。

+0

謝謝,我使用apktool來驗證apk中的AndroidManifest.xml是否具有我期望的權限。 – dols

+1

有一點要注意的是,位置依賴於地圖,因爲地圖是包含[LatLng](https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLng)的地圖, ,這是許多位置API的基礎。 – ianhanniballake

+0

我不明白我使用的圖書館如play-services可以爲我請求權限嗎? –

相關問題