Play安装引荐库添加WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限

22
我们正试图更新Google Play安装引荐库,内部正在添加一些外部读写权限。
<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


1
这个问题应该在1.1.2版本中修复:https://issuetracker.google.com/issues/146115244 - Ian G. Clifton
7个回答

8

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


5
引用此回答(并补充):
版本1.1和1.1.1缺少“minSdkVersion”。这将自动添加这些权限(因为默认SDK<4,如@thiagolr所说)。此处查看类似问题:Google Play服务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>

4

我也遇到了这个问题。

但是在我的情况下,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"/>

我没有找到任何官方信息。
但是过去其他谷歌程序库存在添加额外或不必要权限的问题,这些权限随后被删除,修复版本很快更新发布。
例如,这个链接:
Why has the READ_PHONE_STATE permission been added?

所以我希望同样的事情也会在这里发生。


2
安装引荐器添加此权限是因为目标 SDK 版本较低,它会隐式获取该权限。如果查看清单合并报告,您可以看到以下内容: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有关隐式权限的信息可以在此文档中找到: https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts - Dinesh

4

编辑:解决方法:版本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)

已过时:

最简单的解决方法是暂时将installreferrer降级到1.0

但如果您需要此版本,则可以添加:

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

要禁用它。 但是请注意,如果您在库内使用需要它的任何API,可能会导致崩溃,因此我不建议这样做。


2

1.1.2版本已发布,它正确地添加了minSdkVersion。

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

2
这些权限是由于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

理论上,可以使用清单合并工具完全删除它们:

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

但如果图书馆仍然可以正常工作,那就是另一回事了 -
Google图书馆需要不必要的权限通常是一个例外。 发布说明文档没有提到权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接