播放安装引荐来源库,添加WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限


19

我们正在尝试更新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中修复:issuetracker.google.com/issues/146115244
Ian G. Clifton

Answers:


4

我也遇到过这个问题。

但就我而言,1.1版本还添加了READ_PHONE_STATE权限

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

我已经将.aar文件反编译为installreferrer:1.1并检查了manifest和pom文件,这些文件中没有任何内容指示应添加这些权限。
库清单文件仅添加此权限(在以前的版本中始终具有此权限):

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

我尚未找到有关此的任何官方信息。
但是过去,其他Google库在添加其他不需要的权限时遇到了问题,之后不久便在修补程序版本中将其删除。
例如,这:
为什么要添加READ_PHONE_STATE权限?

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


1
由于目标target-sdk-version低于隐式获得许可的事实,因此安装引荐来源网址会添加此许可。如果你看一看清单合并报告,你可以看到这一点: 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 在隐式权限的信息可以在这个文件中找到:developer.android.com/studio/build/...
迪内希

6

由于targetSdkVersion的值比添加限制的版本低,因此安装引荐来源网址会添加此权限。如果您查看应用程序的build文件夹中生成的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


4

这个答案

这是因为他们为

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

其中添加了那些权限。

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

这可能是一个错误。此外,installreferrer 1.1.1也无法解决。

最简单的解决方案暂时降级installreferrer1.0

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

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

要禁用它。但是请知道,如果您在库中使用任何需要它的API,则可能会导致崩溃,所以我不建议您这样做。


2

引用此答案(并完成):

版本1.1和1.1.1缺少“ minSdkVersion”。这将自动添加这些权限(因为@thiagolr表示默认的SDK <4)。在此处看到类似的问题: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>

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图书馆需要不必要的权限是一个例外。

发行说明文档不提权限。


1

添加这些权限是因为com.android.installreferrertargetSdkVersion <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.1.2发布后,它会正确添加minSdkVersion。

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="22" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.