Odtwórz Zainstaluj bibliotekę polecającą Dodawanie uprawnień WRITE_EXTERNAL_STORAGE i READ_EXTERNAL_STORAGE

19

Próbujemy zaktualizować Google Play Zainstaluj bibliotekę polecających i

Wewnętrznie dodaje pewne zewnętrzne uprawnienia do zapisu .

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

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

Czy naprawdę musimy trzymać się uprawnień?

zależność implementation 'com.android.installreferrer:installreferrer:1.1

Źródło https://developer.android.com/google/play/installreferrer/library.html

wadali
źródło
1
Powinno to zostać naprawione w 1.1.2: Issuetracker.google.com/issues/146115244
Ian G. Clifton

Odpowiedzi:

4

Natknąłem się również na ten problem.

Ale w moim przypadku wersja 1.1 dodaje również uprawnienie READ_PHONE_STATE

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

Dekompilowałem plik .aar dla installreferrer: 1.1 i sprawdziłem plik manifestu i pom, w tych plikach nie ma nic, co wskazywałoby, że należy dodać te uprawnienia.
Plik manifestu biblioteki dodaje tylko to uprawnienie (które zawsze ma w poprzednich wersjach):

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

Nie udało mi się znaleźć żadnych oficjalnych informacji na ten temat.
Ale w innych bibliotekach Google występowały w przeszłości problemy z dodawaniem dodatkowych, niepotrzebnych uprawnień, które następnie zostały wkrótce usunięte w wersji poprawki.
Na przykład:
Dlaczego dodano uprawnienia READ_PHONE_STATE?

Mam więc nadzieję, że to samo się tutaj wydarzy.

Moonbloom
źródło
1
Odsyłacz instalacji dodaje to uprawnienie ze względu na fakt, że wersja docelowa sdk jest niższa niż niejawnie uzyskuje to uprawnienie. Jeśli spojrzysz na raport manifestu fuzji, zobaczysz to: 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 Informacje na temat domyślnego pozwolenia można znaleźć w tej dokumentacji: developer.android.com/studio/build/…
Dinesh
6

Odsyłacz instalacji dodaje to uprawnienie, ponieważ targetSdkVersionjest to wartość niższa niż wersja, w której dodano ograniczenie. Jeśli spojrzysz na wygenerowany raport manifestu połączenia w folderze kompilacji aplikacji, możesz zobaczyć następujące informacje:

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

Informacje na temat działania tego niejawnego uprawnienia systemu na Androidzie można znaleźć w tej dokumentacji: https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts

Dinesh
źródło
4

Z tej odpowiedzi :

Jest tak, ponieważ dodali zależność do

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

Co dodaje te uprawnienia.

Można go znaleźć w pliku: manifest-scaler-blame-debug-report.txt, który znajduje się w „yourApp / build / intermediates / manifest_merge_blame_file / debug”

To prawdopodobnie błąd. Ponadto, installreferrer 1.1.1nie rozwiązuje go.

Najłatwiejszym rozwiązaniem jest na razie installreferrerpowrót do 1.0starszej wersji.

Ale jeśli potrzebujesz tej wersji, możesz dodać:

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

Aby to wyłączyć. Ale wiedz, że jeśli użyjesz interfejsu API, który potrzebuje go w bibliotece, może to doprowadzić do awarii , więc nie polecam tego robić.

Luzian
źródło
2

Cytując tę odpowiedź (i wypełniając):

W wersji 1.1 i 1.1.1 brakuje „minSdkVersion”. Spowoduje to automatyczne dodanie tych uprawnień (ponieważ domyślny zestaw SDK <4, jak powiedział @thiagolr). Zobacz podobny problem tutaj: Usługi Google Play 12.0.1 .

Rozwiązanie

Wersja 1.1.2 rozwiązuje ten problem.

Detale

Manifest.xml dla wersji 1.0 (z 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 dla wersji 1.1 (z 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
źródło
1

Teoretycznie można je całkowicie usunąć za pomocą połączenia manifestów:

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

Ale jeśli biblioteka nadal będzie działać zgodnie z oczekiwaniami, to inna historia -

jest raczej wyjątkiem, że biblioteka Google wymaga niepotrzebnych uprawnień.

Informacje o wersji i dokumentacja nie wspominają o uprawnieniach.

Martin Zeitler
źródło
1

Te uprawnienia są dodawane, ponieważ com.android.installreferrerma targetSdkVersion <4. Możesz to zobaczyć w pliku manifestu-połączenia-wydania-raportu.txt znajdującym się w Temp \ gradleOut \ build \ Output \ logs w twoim projekcie. To jest błąd i prawdopodobnie zostanie naprawiony w nowszej wersji.

Aby to naprawić, musisz dowiedzieć się, która wtyczka dodaje com.android.installreferrerjako zależność.


W moim projekcie winowajcą była wtyczka Facebooka . Korzysta z com.facebook.android:facebook-core:5.15.xpakietu odpowiedzialnego za dodanie plikucom.android.installreferrer:installreferrer:1.1 zależności.

Rozwiązaniem było przywrócenie do com.facebook.android:facebook-core:5.13.0, które nie ma com.android.installreferrerzależności.

Edytuj plik FacebookSDK/Plugins/Editor/Dependencies.xmli zmień te pakiety na:

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

Następnie nie zapomnij ponownie rozwiązać zależności: Assets > Play Services Resolver > Android Resolver > Force Resolve

tiagolr
źródło
1

Wydano 1.1.2, dodaje poprawnie minSdkVersion.

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="22" />
Yu-Hsuan
źródło