Biblioteca de Referência do Play Install Adicionando permissões WRITE_EXTERNAL_STORAGE e READ_EXTERNAL_STORAGE

19

Estamos tentando atualizar a Biblioteca de referências de instalação do Google Play e

Internamente, está adicionando algumas permissões de leitura e gravação externas .

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

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

Nós realmente precisamos ficar com as permissões?

dependência implementation 'com.android.installreferrer:installreferrer:1.1

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

wadali
fonte
11
Isso deve ser corrigido no 1.1.2: issuetracker.google.com/issues/146115244
Ian G. Clifton

Respostas:

4

Eu também me deparei com esta questão.

Mas no meu caso, a versão 1.1 também está adicionando a permissão READ_PHONE_STATE

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

Descompilei o arquivo .aar para o installreferrer: 1.1 e verifiquei o manifest e o arquivo pom, não há nada nesses arquivos para indicar que essas permissões devem ser adicionadas.
O arquivo de manifesto da biblioteca adiciona apenas essa permissão (que sempre existe nas versões anteriores):

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

Não consegui encontrar nenhuma informação oficial sobre isso.
Mas outras bibliotecas do Google tiveram problemas no passado com a adição de permissões adicionais desnecessárias, que foram removidas em uma versão de hotfix logo depois.
Por exemplo, este:
Por que a permissão READ_PHONE_STATE foi adicionada?

Então, espero que o mesmo aconteça aqui.

Moonbloom
fonte
11
O referenciador de instalação adiciona essa permissão devido ao fato de que a versão de destino-sdk é menor do que obtém implicitamente a permissão. Se você der uma olhada no manifest-merger-report, poderá ver o seguinte: 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 Informações sobre a permissão implícita podem ser encontradas nesta documentação: developer.android.com/studio/build/…
Dinesh
6

O referenciador de instalação adiciona essa permissão devido ao fato de targetSdkVersionser um valor menor que a versão na qual a restrição foi adicionada. Se você der uma olhada no relatório manifesto-fusão- gerado na pasta de compilação do seu aplicativo, poderá ver estas informações:

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

Informações sobre como esta permissão implícita do sistema funciona no Android podem ser encontradas nesta documentação: https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts

Dinesh
fonte
4

A partir desta resposta :

Isso ocorre porque eles adicionaram uma dependência ao

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

O que adiciona essas permissões.

Você pode encontrá-lo no arquivo: manifest-merger-blame-debug-report.txt que está em "yourApp / build / intermediates / manifest_merge_blame_file / debug"

Provavelmente é um bug. Além disso, installreferrer 1.1.1não resolve.

A solução mais fácil é fazer o downgrade de installreferrervolta 1.0para agora.

Mas se você precisar desta versão, poderá adicionar:

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

Para desativá-lo. Mas saiba que, se você usar qualquer API que precise dela dentro da biblioteca, isso poderá levar a uma falha , por isso não recomendo.

Luzian
fonte
2

Citando esta resposta (e completando):

As versões 1.1 e 1.1.1 estão ausentes "minSdkVersion". Isso adicionaria automaticamente essas permissões (porque o SDK padrão <4, como dito por @thiagolr). Veja problema semelhante aqui: Google Play Services 12.0.1 .

Solução

A versão 1.1.2 resolve esse problema.

Detalhes

Manifest.xml para v1.0 (de 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 para v1.1 (de 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
fonte
1

Poderíamos teoricamente removê-los completamente com a fusão-manifesto:

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

Mas se a biblioteca ainda funcionar como esperado, é outra história -

é uma exceção, que uma biblioteca do Google exija permissões desnecessárias.

As notas de versão e a documentação não mencionam permissões.

Martin Zeitler
fonte
1

Essas permissões foram adicionadas porque com.android.installreferrerpossui um targetSdkVersion <4. Você pode vê-lo no arquivo manifest-merger-release-report.txt localizado na pasta Temp \ gradleOut \ build \ outputs \ logs dentro do seu projeto. Este é um erro e provavelmente será corrigido em uma versão mais recente.

Para corrigir isso, você precisa descobrir qual plugin está adicionando com.android.installreferrercomo dependência.


No meu projeto, o culpado foi o plugin do Facebook . Ele usa o com.facebook.android:facebook-core:5.15.xpacote que é responsável por adicionar a com.android.installreferrer:installreferrer:1.1dependência.

A solução foi reverter para com.facebook.android:facebook-core:5.13.0, que não tem com.android.installreferrerdependência.

Edite o arquivo FacebookSDK/Plugins/Editor/Dependencies.xmle altere estes pacotes para:

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

Em seguida, não se esqueça de resolver as dependências novamente: Assets > Play Services Resolver > Android Resolver > Force Resolve

thiagolr
fonte
1

1.1.2 é lançado, ele adiciona minSdkVersion corretamente.

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