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