簡體   English   中英

Play 安裝引用庫添加 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 權限

[英]Play Install Referrer Library Adding WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE permissions

我們正在嘗試更新 Google Play Install Referrer Library 和

在內部,它正在添加一些外部讀寫權限。

<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

由於targetSdkVersion的值低於添加限制的版本,因此安裝引用者會添加此權限。 如果您查看應用程序構建文件夾中生成的manifest-merger-report ,您可以看到以下信息:

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

引用此答案(並完成):

版本 1.1 和 1.1.1 缺少“minSdkVersion”。 這將自動添加這些權限(因為@thiagolr 所說的默認 SDK < 4)。 在此處查看類似問題: Google Play Services 12.0.1

解決方案

1.1.2 版解決了這個問題。

細節

v1.0 的 Manifest.xml(來自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>

v1.1 的 Manifest.xml(來自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.1 版本還添加了 READ_PHONE_STATE 權限

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

我已經反編譯了 installreferrer:1.1 的 .aar 文件並檢查了清單和 pom 文件,這些文件中沒有任何內容表明應該添加這些權限。
庫清單文件僅添加此權限(在以前的版本中始終具有):

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

我一直無法找到有關此的任何官方信息。
但其他 Google 圖書館過去曾在添加額外的、不需要的權限時遇到問題,不久之后這些權限在修補程序版本中被刪除。
例如,這個:
為什么添加了 READ_PHONE_STATE 權限?

所以我希望這里也會發生同樣的事情。

編輯:解決方案:版本1.1.2 (及更高版本)解決了這個問題。

這個答案

這是因為他們添加了對

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

它添加了這些權限。

您可以在“yourApp/build/intermediates/manifest_merge_blame_file/debug”下的文件中找到它:manifest-merger-blame-debug-report.txt

這是一個錯誤。 此外, installreferrer 1.1.1沒有解決它。

解決方案:更新至installreferrer 1.1.2或以上任何版本(當前版本為 2.1`)

過時的:

最簡單的解決方案是installreferrerinstallreferrer降級回1.0

但是如果你需要這個版本,你可以添加:

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

要禁用它。 但是要知道,如果您將在庫中使用任何需要它的 API,則可能會導致崩潰,因此我不建議您這樣做。

添加這些權限是因為com.android.installreferrer的 targetSdkVersion < 4。您可以在位於項目內Temp\\gradleOut\\build\\outputs\\logs文件夾的manifest-merger-release-report.txt文件中看到它。 這是一個錯誤,它可能會在較新的版本上修復。

為了解決這個問題,您需要找出哪個插件將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.2 發布,正確添加 minSdkVersion。

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

理論上可以通過清單合並將它們完全刪除:

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

但是,如果圖書館仍能按預期工作,那就是另一回事了——

谷歌圖書館需要不必要的權限,這是一個例外。

發行說明文檔沒有提到權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM