Câu hỏi Tại sao ứng dụng của tôi yêu cầu quyền id điện thoại?


Trong tệp kê khai của tôi, tôi chỉ yêu cầu hai quyền sau:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Nhưng khi tôi cài đặt ứng dụng trên điện thoại của mình, tôi cũng nhận được thông báo này:

Low-risk permissions
Phone ID
Get your phone ID, including IMEI, IMSI, etc.

Từ những gì tôi thu thập được từ câu trả lời SO này, Tôi cần phải sử dụng TelephonyManager và gọi

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

để yêu cầu sự cho phép này. Nhưng tôi không sử dụng TelephonyManager hoặc gọi cho phép đó. Tôi không muốn yêu cầu người dùng cấp quyền này. Tôi đã xem qua các tệp kê khai và tệp gradle của mình. Nó có thể là một số mã tôi sử dụng kích hoạt sự cho phép này được gọi mà không có tôi đặc biệt yêu cầu cho nó? Tôi biết tôi không cho bạn rất nhiều để tiếp tục, bởi tôi không biết nơi khác để xem xét.

Cập nhật 1

Tôi đã tạo một dự án hoàn toàn mới trong Android Studio và tạo APK đã ký từ đó. Tôi đã cài đặt nó nhưng không có quyền được yêu cầu. (Điều đó ít nhất là xác nhận với tôi rằng nó không phải là một số "tính năng mới" trong Android Studio tự động yêu cầu sự cho phép này.)

Cập nhật 2

Kể từ câu trả lời của @ antonio tôi tìm thấy app/build/outputs/logs/manifest-merger-release-report.txt Tuy nhiên, tôi không tìm thấy bất kỳ quyền được ngụ ý nào được yêu cầu.

Cập nhật 3

Dưới đây là những phụ thuộc mà ứng dụng của tôi đang sử dụng (từ gradle.build):

dependencies {
    compile 'com.android.support:support-v4:21.0.3'
    compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:+'
}

Tôi đã thử nghiệm một ứng dụng mới với cả những phụ thuộc này và không có quyền được yêu cầu.

Bước tiếp theo của tôi là thêm mọi hoạt động lại từ đầu và xem liệu tôi có thể tìm thấy nơi quyền này bắt đầu được gọi hay không. Còn tiếp...

Cập nhật 4

Tôi chơi xung quanh với sao chép tất cả mọi thứ vào một dự án mới và tái cấu trúc tên dự án và loại bỏ các mảnh, nhưng hóa ra nó khá phức tạp. Tôi đã không thể cô lập một lý do.

Cập nhật 5

Tôi đặt targetSdkVersion thành 1. Điều này cho phép thông báo mới khi thông báo các quyền trước khi cài đặt ứng dụng:

đọc trạng thái và nhận dạng của điện thoại

Cho phép ứng dụng truy cập các tính năng điện thoại của thiết bị. Điều này   sự cho phép cho phép ứng dụng xác định số điện thoại và thiết bị   ID, cho dù cuộc gọi đang hoạt động và số từ xa được kết nối bởi một   gọi điện.

Các ID điện thoại cũ cho phép thông báo rằng tôi đã viết về lúc đầu vẫn còn đó (hiển thị sau khi ứng dụng được cài đặt). Điều này làm cho tôi tự hỏi nếu nó có liên quan đến hệ điều hành (Tôi đang sử dụng MIUI Android trên điện thoại Xiaomi). Vẫn còn một cái gì đó về các ứng dụng gây ra điều này để hiển thị trong ứng dụng này nhưng không phải trong các ứng dụng khác. Tôi cần phải kiểm tra điều này trên các thiết bị khác tiếp theo.


9
2018-05-16 15:07


gốc


của bạn là gì targetSdkVersion? - Mattia Maestrini
@Mattia, cài đặt hiện tại trong build.gradle là targetSdkVersion 21, minSdkVersion 8, compileSdkVersion 19 - Suragch


Các câu trả lời:


Điều này xảy ra vì bạn đang nhập thư viện có targetSdkVersion thấp hơn targetSdkVersion của ứng dụng của bạn

Từ Tài liệu Manifest Sáp nhập:

Khi nhập thư viện có targetSdkVersion thấp hơn   nhập ứng dụng targetSdkVersion, một số quyền có thể   tự động được thêm vào tệp kê khai kết quả được hợp nhất.   Điều này là cần thiết vì các thư viện này nhắm mục tiêu thời gian chạy, nơi các quyền đó được cấp hoàn toàn. Do đó tuyên bố sự cho phép đó là không cần thiết. Tuy nhiên, trong các bản phát hành Android gần đây hơn, các quyền này không được tự động cấp. Do đó, một thư viện nhắm mục tiêu thời gian chạy cũ như vậy mà không có quyền sẽ không hoạt động đúng sau khi được hợp nhất trong ứng dụng nhắm mục tiêu thời gian chạy gần đây hơn.

Các quyền có thể được thêm vào là:

  • WRITE_EXTERNAL_STORAGE Đã thêm khi nhập thư viện có targetSdkVersion <4
  • READ_EXTERNAL_STORAGE Đã thêm khi nhập thư viện được khai báo WRITE_EXTERNAL_STORAGE
  • READ_PHONE_STATE Đã thêm khi nhập thư viện có targetSdkVersion <4
  • READ_CALL_LOG Được thêm khi nhập thư viện có targetSdkVersion <16 và sử dụng quyền READ_CONTACTS
  • WRITE_CALL_LOG Được thêm khi nhập thư viện có targetSdkVersion <16 và sử dụng quyền WRITE_CONTACTS

Bạn có thể kiểm tra báo cáo được tạo bởi Manifest Sáp nhập (In \ app \ build \ output \ apk \ manifest-merger-XXX-report) để xem thư viện nào gây ra việc thêm quyền READ_PHONE_STATE. Bạn sẽ thấy một cái gì đó như:

android:uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from AndroidManifest.xml:2:1 reason: the.library has a targetSdkVersion < 4

16
2018-05-16 15:32



Điều này rất thú vị. Tôi cảm thấy như tôi gần gũi hơn nhiều để giải quyết vấn đề này ngay bây giờ. Tôi đã tìm thấy báo cáo bạn đã mô tả (xem bản cập nhật của tôi), nhưng tôi không thể tìm thấy bất kỳ nội dung nào yêu cầu quyền READ_PHONE_STATE. - Suragch
Bạn có phụ thuộc vào một dự án Android khác không? Bạn có thể đăng bài dependencies phần của build.gradle của bạn? - antonio
Tôi đã đăng các phụ thuộc. Tôi cũng sẽ cố gắng chạy ứng dụng mà không có SQLiteAssetsHelper để xem điều đó có tạo ra sự khác biệt hay không. - Suragch
Bạn có thể thử đặt targetSdkVersion thành 1 trong dự án của bạn không? Nếu quyền READ_PHONE_STATE biến mất, chúng ta sẽ biết rằng chúng ta đang đi đúng hướng nghĩ rằng Manifest Sáp nhập đang thêm nó. - antonio
Điều đó rất hữu ích. (Xem cập nhật 5) Mặc dù vấn đề chưa được giải quyết nhưng nó cho tôi thấy rằng có thể thông điệp tôi đã thấy ban đầu không thực sự là quyền READ_PHONE_STATE. Không dành nhiều thời gian của bạn về điều này. Tôi đánh giá cao tất cả những khách hàng tiềm năng mới mà bạn đã cho tôi. Nếu tôi nhận được giải pháp cuối cùng, tôi sẽ đăng cập nhật. - Suragch


Thêm mã sau vào AndroidManifest.xml của bạn để xóa (các) quyền không cần thiết:

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

Nguồn:

https://stackoverflow.com/a/27542669/406295


4
2017-08-11 01:38