2015-05-30 33 views
19

Sau khi chạy ứng dụng trên ứng dụng thiết bị, yêu cầu quyền vị trí không mong muốn không được đề cập trong tệp kê khai. Trong khi tôi đang chạy cùng một mã từ studio Android của bạn tôi hơn là chạy bình thường mà không cần sự cho phép thêm.Android studio thêm quyền không mong muốn sau khi chạy ứng dụng trên thiết bị thực

tập tin Manifest

<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" 
     minSdkVersion 14 
     targetSdkVersion 21 

     // Enabling multidex support. 
     multiDexEnabled true 

    } 


    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 project(':boxAndroidLibraryV2') 

    compile 'com.google.http-client:google-http-client-gson:1.19.0' 
    compile 'com.google.code.gson:gson:2.1' 
    compile 'com.google.android.gms:play-services:+' 
    compile files('libs/HockeySDK-3.0.2.jar') 
    compile files('libs/dropbox-android-sdk-1.6.3.jar') 

    compile 'com.google.apis:google-api-services-drive:v2-rev164-1.20.0' 


    compile files('libs/in-app-purchasing-2.0.59.jar') 
    compile files('libs/json_simple-1.1.jar') 
    compile 'com.android.support:multidex:1.0.0' 
    compile 'com.android.support:appcompat-v7:21.0.3' 
    compile files('libs/slf4j-api-1.7.5.jar') 
    compile files('libs/jackrabbit-webdav-2.7.2.jar') 
    compile files('libs/commons-httpclient-3.1.jar') 
    compile project(':utilities') 
    compile files('libs/pass-v1.1.3.jar') 
    compile files('libs/sdk-v1.0.0.jar') 
    compile 'com.google.api-client:google-api-client:1.20.0' 
    compile 'com.google.oauth-client:google-oauth-client:1.20.0' 
    compile 'com.google.api-client:google-api-client-android:1.20.0' 
    compile 'com.google.http-client:google-http-client-android:1.20.0' 

} 

configurations { 
    all*.exclude group: 'com.google.guava', module:'guava-jdk5' 
} 

Vì vậy, tôi không thể hiểu tại sao nó đòi hỏi sự cho phép địa điểm. Quyền được thêm vị trí trong ứng dụng của tôi như thế nào?

+1

có thể bạn đang sử dụng một số thư viện sử dụng thêm sự tán thành – Abdellah

+0

Kiểm tra tệp kê khai có trong "app \ build \ intermediates \ manifests \ debug" (trong đó "ứng dụng" là tên mô-đun chính của ứng dụng của bạn). Nó có chứa quyền vị trí không? – fRoStBiT

+1

Bạn có thể cho chúng tôi thấy bất kỳ thư viện bổ sung nào mà bạn có thể đang sử dụng trong dự án của mình không? –

Trả lời

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

Thư viện này sẽ yêu cầu quyền vị trí, như một số phần dịch vụ của Play cần nó.

Trước tiên, không bao giờ sử dụng +. Nếu bạn muốn cho phép các bản vá nổi miễn phí (ví dụ: 22.0.+), điều đó không hoàn toàn điên rồ, nhưng sử dụng + cho phiên bản mất trí.

Tiếp theo, hãy xem xét sử dụng một (hoặc nhiều) phụ thuộc tập trung hơn, chứ không phải SDK dịch vụ Play đầy đủ. Điều này không chỉ có thể loại bỏ sự cho phép mà bạn không muốn, nhưng APK của bạn sẽ nhỏ hơn rất nhiều. The documentation bao gồm các tùy chọn có sẵn (xem phần "Các API biên dịch có chọn lọc trong phần thực thi của bạn").

Nếu bạn vẫn cập nhật các quyền mà bạn không muốn, thì bạn sẽ cần phải xác định nơi quyền truy cập đến. Phải có báo cáo hợp nhất tệp kê khai trong build/outputs/logs/ mô-đun của bạn. Nó sẽ có một chút khó hiểu, nhưng hy vọng bạn có thể xác định thư viện đang đóng góp quyền này. Ngoài ra, Android Studio 2.2+ sẽ hiển thị tệp kê khai đã hợp nhất của bạn trong tab phụ khi bạn chỉnh sửa tệp kê khai của mình.

Vào thời điểm đó, bạn cần phải quyết định cách thức tiến hành:

  • Câu trả lời an toàn nhất mà loại bỏ sự cho phép là không còn sử dụng thư viện đó, nhưng thay vì tìm thấy một số giải pháp khác để bất cứ điều gì vấn đề bạn đang cố gắng để giải quyết với điều đó thư viện

  • Hoặc, sống với sự cho phép

  • Hoặc, hãy thử thêm dòng sau vào manifest của ứng dụng của bạn:

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

này sẽ yêu cầu bạn thêm xmlns:tools="http://schemas.android.com/tools" đến <manifest> tử gốc nếu nó không phải là đã có. Điều này sẽ cho các công cụ xây dựng để loại trừ một cách rõ ràng sự cho phép này, mặc dù các thư viện đang đóng góp nó. Tuy nhiên, việc bạn sử dụng các thư viện đó có thể vi phạm. Chỉ thực hiện việc này nếu bạn có nhóm thử nghiệm chuyên dụng có thể dành thời gian cần thiết để đảm bảo rằng quyết định chặn quyền này sẽ không dẫn đến sự cố hoặc hành vi khác ảnh hưởng đến người dùng.

+0

Tuyệt vời! Cảm ơn! Dịch vụ Google Play thêm một số quyền lạ như android.permission.USE_CREDENTIALS và permission.GET_ACCOUNTS, ứng dụng của tôi không cần bất kỳ điều nào trong số này, giải pháp "xóa" sẽ loại bỏ các quyền này. Đã thực hiện, chỉ khi tìm trong tệp nhật ký, tôi có thể biết họ đến từ đâu. –

4

Đối với các phiên bản mới của thư viện Dịch vụ Google Play, bạn chỉ phải thêm phần bắt buộc của thư viện làm phụ thuộc. Ví dụ, nếu bạn đang sử dụng thư viện Dịch vụ Google Play chỉ hiển thị quảng cáo từ Admob, sau đó thay thế

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

với

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

này sẽ loại bỏ các điều khoản không cần thiết khác.

+0

Cảm ơn bạn rất nhiều! Bạn, thưa ông, cứu tôi! –

Các vấn đề liên quan