播放安装引荐库添加 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
我也遇到过这个问题。
但就我而言,1.1 版本还添加了 READ_PHONE_STATE 权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
我已经反编译了 installreferrer:1.1 的 .aar 文件并检查了清单和 pom 文件,这些文件中没有任何内容表明应该添加这些权限。
library manifest文件只增加了这个权限(之前的版本一直都有):
<uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>
我没能找到关于此的任何官方信息。
但是其他 Google 库过去在添加额外的、不需要的权限方面存在问题,这些权限在不久之后的修补程序版本中被删除。
例如,这个:
所以我希望这里也会发生同样的事情。
理论上可以通过清单合并将它们一起删除:
<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 库需要不必要的权限。
release notes and the documentation权限不提。
Install referrer 添加此权限是因为 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.2(及更高版本)解决了这个问题。
来自:
这是因为他们添加了一个依赖
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
也没有解决。
解法:
更新至 installreferrer 1.1.2
或以上任何版本(当前版本为 2.1`)
已过时:
最简单的解决方案是暂时将 installreferrer
降级回 1.0
。
但是如果你需要这个版本,你可以添加:
<uses-permission android:name="<permission_name>" tools:node="remove" />
禁用它。
但是请注意,如果您在库中使用任何需要它的 API,它可能会导致崩溃,所以我不建议这样做。
添加这些权限是因为 com.android.installreferrer
的 targetSdkVersion < 4。您可以在位于 manifest-merger-release-report.txt 的文件中看到它在项目中的 Temp\gradleOut\build\outputs\logs 文件夹中。这是一个错误,可能会在较新的版本中修复。
为了解决这个问题,您需要找出哪个插件正在添加 com.android.installreferrer
作为依赖项。
在我的项目中,罪魁祸首是 Facebook 插件。它使用负责添加 com.android.installreferrer:installreferrer:1.1
依赖项的 com.facebook.android:facebook-core:5.15.x
包。
解决方案是回滚到 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.1.1 "minSdkVersion"。这将自动添加这些权限(因为@thiagolr 所说的默认 SDK < 4)。在此处查看类似问题:Google Play Services 12.0.1。
解决方案
版本 1.1.2 解决了这个问题。
详情
Manifest.xml 用于 v1.0(来自 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 for v1.1(来自 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.2发布,正确添加minSdkVersion
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="22" />
我们正在尝试更新 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
我也遇到过这个问题。
但就我而言,1.1 版本还添加了 READ_PHONE_STATE 权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
我已经反编译了 installreferrer:1.1 的 .aar 文件并检查了清单和 pom 文件,这些文件中没有任何内容表明应该添加这些权限。
library manifest文件只增加了这个权限(之前的版本一直都有):
<uses-permission android:name="com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"/>
我没能找到关于此的任何官方信息。
但是其他 Google 库过去在添加额外的、不需要的权限方面存在问题,这些权限在不久之后的修补程序版本中被删除。
例如,这个:
所以我希望这里也会发生同样的事情。
理论上可以通过清单合并将它们一起删除:
<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 库需要不必要的权限。
release notes and the documentation权限不提。
Install referrer 添加此权限是因为 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.2(及更高版本)解决了这个问题。
来自
这是因为他们添加了一个依赖
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
也没有解决。
解法:
更新至 installreferrer 1.1.2
或以上任何版本(当前版本为 2.1`)
已过时:
最简单的解决方案是暂时将 installreferrer
降级回 1.0
。
但是如果你需要这个版本,你可以添加:
<uses-permission android:name="<permission_name>" tools:node="remove" />
禁用它。 但是请注意,如果您在库中使用任何需要它的 API,它可能会导致崩溃,所以我不建议这样做。
添加这些权限是因为 com.android.installreferrer
的 targetSdkVersion < 4。您可以在位于 manifest-merger-release-report.txt 的文件中看到它在项目中的 Temp\gradleOut\build\outputs\logs 文件夹中。这是一个错误,可能会在较新的版本中修复。
为了解决这个问题,您需要找出哪个插件正在添加 com.android.installreferrer
作为依赖项。
在我的项目中,罪魁祸首是 Facebook 插件。它使用负责添加 com.android.installreferrer:installreferrer:1.1
依赖项的 com.facebook.android:facebook-core:5.15.x
包。
解决方案是回滚到 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.1.1 "minSdkVersion"。这将自动添加这些权限(因为@thiagolr 所说的默认 SDK < 4)。在此处查看类似问题:Google Play Services 12.0.1。
解决方案
版本 1.1.2 解决了这个问题。
详情
Manifest.xml 用于 v1.0(来自 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 for v1.1(来自 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.2发布,正确添加minSdkVersion
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="22" />