Lire l'installation de la bibliothèque de référents en ajoutant les autorisations WRITE_EXTERNAL_STORAGE et READ_EXTERNAL_STORAGE

19

Nous essayons de mettre à jour la bibliothèque de référence d'installation de Google Play et

En interne, il ajoute des autorisations de lecture / écriture externes .

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

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

Avons-nous vraiment besoin de respecter les autorisations?

dépendance implementation 'com.android.installreferrer:installreferrer:1.1

Source https://developer.android.com/google/play/installreferrer/library.html

wadali
la source
1
Cela devrait être corrigé dans 1.1.2: issuetracker.google.com/issues/146115244
Ian G. Clifton

Réponses:

4

J'ai également rencontré ce problème.

Mais dans mon cas, la version 1.1 ajoute également l'autorisation READ_PHONE_STATE

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

J'ai décompilé le fichier .aar pour installreferrer: 1.1 et vérifié le fichier manifeste et pom, il n'y a rien dans ces fichiers pour indiquer que ces autorisations doivent être ajoutées.
Le fichier manifeste de bibliothèque ajoute uniquement cette autorisation (qui est toujours présente dans les versions précédentes):

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

Je n'ai pas pu trouver d'informations officielles à ce sujet.
Mais d'autres bibliothèques Google ont eu des problèmes dans le passé avec l'ajout d'autorisations supplémentaires inutiles, qui ont ensuite été supprimées dans une version de correctif peu de temps après.
Par exemple, ceci:
Pourquoi l'autorisation READ_PHONE_STATE a-t-elle été ajoutée?

J'espère donc que la même chose va se produire ici.

Moonbloom
la source
1
Le référent d'installation ajoute cette autorisation car la version de la cible-sdk est inférieure à celle qu'elle obtient implicitement. Si vous jetez un œil au rapport manifeste-fusion, vous pouvez voir ceci: Des 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 informations sur l'autorisation implicite peuvent être trouvées dans cette documentation: developer.android.com/studio/build/…
Dinesh
6

Le référent d'installation ajoute cette autorisation car il targetSdkVersions'agit d'une valeur inférieure à la version dans laquelle la restriction a été ajoutée. Si vous consultez le rapport de fusion-manifeste généré dans le dossier de génération de votre application, vous pouvez voir ces informations:

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

Des informations sur le fonctionnement de cette autorisation système implicite sur Android sont disponibles dans cette documentation: https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts

Dinesh
la source
4

De cette réponse :

En effet, ils ont ajouté une dépendance à

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

Ce qui ajoute ces autorisations.

Vous pouvez le trouver dans le fichier: manifest-merger-blame-debug-report.txt qui se trouve sous "yourApp / build / intermediates / manifest_merge_blame_file / debug"

C'est probablement un bug. Aussi, installreferrer 1.1.1ne le résout pas.

Solution la plus simple est de rétrograder installreferrerrevenir à 1.0pour l' instant.

Mais si vous avez besoin de cette version, vous pouvez ajouter:

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

Pour le désactiver. Mais sachez que si vous utilisez une API qui en a besoin dans la bibliothèque, cela pourrait entraîner un plantage , donc je ne le recommanderai pas.

Luzian
la source
2

Citant cette réponse (et complétant):

Les versions 1.1 et 1.1.1 ne contiennent pas «minSdkVersion». Cela ajouterait automatiquement ces autorisations (car le SDK par défaut <4 comme dit par @thiagolr). Consultez le même problème ici: Google Play Services 12.0.1 .

Solution

La version 1.1.2 résout ce problème.

Détails

Manifest.xml pour v1.0 (depuis 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 pour v1.1 (depuis 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>
sagis
la source
1

On pourrait théoriquement les supprimer complètement avec la fusion manifeste:

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

Mais si la bibliothèque fonctionne toujours comme prévu, c'est une autre histoire -

c'est plutôt une exception, qu'une bibliothèque Google nécessite des autorisations inutiles.

Les notes de publication et la documentation ne mentionnent pas les autorisations.

Martin Zeitler
la source
1

Ces autorisations sont ajoutées car com.android.installreferrera un targetSdkVersion <4. Vous pouvez le voir sur le fichier manifest-merger-release-report.txt situé dans le dossier Temp \ gradleOut \ build \ outputs \ logs à l' intérieur de votre projet. Il s'agit d'un bug et il sera probablement corrigé sur une version plus récente.

Pour résoudre ce problème, vous devez savoir quel plugin ajoute en com.android.installreferrertant que dépendance.


Dans mon projet, le coupable était le plugin Facebook . Il utilise le com.facebook.android:facebook-core:5.15.xpackage qui est responsable de l'ajout de la com.android.installreferrer:installreferrer:1.1dépendance.

La solution était de revenir à com.facebook.android:facebook-core:5.13.0, qui n'a pas de com.android.installreferrerdépendance.

Modifiez le fichier FacebookSDK/Plugins/Editor/Dependencies.xmlet changez ces packages en:

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

Ensuite, n'oubliez pas de résoudre à nouveau les dépendances: Assets > Play Services Resolver > Android Resolver > Force Resolve

thiagolr
la source
1

1.1.2 est publié, il ajoute correctement minSdkVersion.

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="22" />
Yu-Hsuan
la source