Відтворити Встановити бібліотеку посилань, додавши WRITE_EXTERNAL_STORAGE та READ_EXTERNAL_STORAGE дозволів


19

Ми намагаємось оновити Бібліотеку перезавантажень Google Play і

Внутрішнє додавання деяких зовнішніх дозволів на читання .

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

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

Чи дійсно нам потрібно дотримуватися дозволів?

залежність implementation 'com.android.installreferrer:installreferrer:1.1

Джерело https://developer.android.com/google/play/installreferrer/library.html


1
Це має бути зафіксовано в 1.1.2: issueetracker.google.com/isissue/146115244
Ian G. Clifton

Відповіді:


4

Я також натрапив на це питання.

Але в моєму випадку версія 1.1 також додає дозвіл READ_PHONE_STATE

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

Я декомпілював .aar-файл для installreferrer: 1.1 і перевірив файл маніфесту та pom, у цих файлах немає нічого, що вказувало б на те, що ці дозволи слід додати.
Файл маніфесту бібліотеки додає лише цей дозвіл (який завжди є в попередніх версіях):

<uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>

Я не зміг знайти жодної офіційної інформації щодо цього.
Але в інших бібліотеках Google в минулому виникали проблеми з додаванням додаткових, непотрібних дозволів, які потім були видалені у виправленій версії незабаром після.
Наприклад, так:
Чому додано дозвіл READ_PHONE_STATE?

Тож я сподіваюся, що те саме відбудеться і тут.


1
Референт встановлення додає цей дозвіл через те, що цільова-sdk-версія нижче, ніж вона неявно отримує дозвіл. Якщо ви подивитеся на звіт маніфесту-злиття, ви можете побачити таке: uses-permission#android.permission.READ_PHONE_STATE IMPLIED from android/app/src/main/AndroidManifest.xml:1:1-130:12 reason: com.android.installreferrer has a targetSdkVersion < 4 Інформація про неявний дозвіл можна знайти в цій документації: developer.android.com/studio/build/…
Дінеш

6

Референт встановлення додає цей дозвіл через те, що значення targetSdkVersionє нижчим за версію, в яку було додано обмеження. Якщо ви подивитесь на створений звіт про маніфест злиття у папці збірки свого додатка, ви можете побачити цю інформацію:

uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from android/app/src/main/AndroidManifest.xml:1:1-130:12 reason: com.android.installreferrer has a targetSdkVersion < 4

Інформацію про те, як працює цей неявний системний дозвіл на Android, можна знайти в цій документації: https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts


4

З цієї відповіді :

Це тому, що вони додали залежність до

com.google.android.gms:play-services-measurement:17.2.1

Що додає ці дозволи.

Ви можете знайти його у файлі: manifest-merger-blame-debug-report.txt, який знаходиться у розділі "yourApp / build / intermediates / manifest_merge_blame_file / debug"

Це, мабуть, помилка. Крім того, installreferrer 1.1.1це не вирішує.

Найпростіше рішення - installreferrerповернутись до того, щоб повернутись назад 1.0.

Але якщо вам потрібна ця версія, ви можете додати:

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

Щоб відключити його. Але знайте, що якщо ви будете використовувати будь-який API, який потребує його всередині бібліотеки, це може призвести до збоїв , тому я не рекомендую цього робити.


2

Цитуючи цю відповідь (і заповнюючи):

У версіях 1.1 та 1.1.1 відсутні "minSdkVersion". Це автоматично додасть ці дозволи (оскільки SDK за замовчуванням <4, як сказав @thiagolr). Дивіться подібну проблему тут: Google Play Services 12.0.1 .

Рішення

Версія 1.1.2 вирішує цю проблему.

Деталі

Manifest.xml для v1.0 (від https://mvnrepository.com/artifact/com.android.installreferrer/installreferrer/1.0 )

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.installreferrer" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" />

    <application />

</manifest>

Manifest.xml для v1.1 (від https://mvnrepository.com/artifact/com.android.installreferrer/installreferrer/1.1 )

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.installreferrer">

    <uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" />

    <application />

</manifest>

1

Теоретично можна було б видалити їх цілком за допомогою маніфесту злиття:

<manifest
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" 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>

Але якщо бібліотека все ще працюватиме так, як очікувалося, це вже інша історія -

це швидше виняток, що для бібліотеки Google потрібні зайві дозволи.

В примітках до випуску і документація не згадують дозволу.


1

Ці дозволи додаються, оскільки com.android.installreferrerмає targetSdkVersion <4. Ви можете бачити його у файлі manifest-merger-release-report.txt, який знаходиться у папці Temp \ gradleOut \ build \ outputs \ logs всередині вашого проекту. Це помилка, і вона, ймовірно, буде виправлена ​​в більш новій версії.

Для того, щоб виправити це, вам потрібно з’ясувати, який плагін додається com.android.installreferrerяк залежність.


Винуватцем мого проекту став плагін Facebook . Він використовує com.facebook.android:facebook-core:5.15.xпакет, який відповідає за додавання com.android.installreferrer:installreferrer:1.1залежності.

Рішенням було відкат до com.facebook.android:facebook-core:5.13.0, який не має com.android.installreferrerзалежності.

Відредагуйте файл FacebookSDK/Plugins/Editor/Dependencies.xmlта змініть ці пакети на:

<androidPackage spec="com.facebook.android:facebook-core:[5,5.13.0)" />
<androidPackage spec="com.facebook.android:facebook-applinks:[5,5.13.0)" />
<androidPackage spec="com.facebook.android:facebook-login:[5,5.13.0)" />
<androidPackage spec="com.facebook.android:facebook-share:[5,5.13.0)" />

Далі, не забудьте знову вирішити залежності: Assets > Play Services Resolver > Android Resolver > Force Resolve


1

1.1.2 випущено, він додає minSdkVersion правильно.

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="22" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.