最近将我的应用程序上载到Google Play时,警告已添加新权限:
我不需要这些权限。我发现它们可能来自我正在使用的库,因此我从<uses-permission>
中删除了所有AndroidManifest.xml
以进行测试。
1。合并清单报告
我检查了/app/build/outputs/logs/manifest-merger-debug-report.txt
中的合并清单报告,结果显示各种库正在添加以下权限:
uses-permission#android.permission.INTERNET
uses-permission#android.permission.ACCESS_NETWORK_STATE
uses-permission#android.permission.WAKE_LOCK
uses-permission#com.google.android.c2dm.permission.RECEIVE
permission#com.pressbible.view.permission.C2D_MESSAGE
uses-permission#com.pressbible.view.permission.C2D_MESSAGE
这些看起来不错,但是并不能说明ACCESS_COARSE_LOCATION
,ACCESS_FINE_LOCATION
和CHANGE_WIFI_STATE
的来源。
2。最终清单
一大堆权限显示在/app/build/intermediates/manifests/full/debug/AndroidManifest.xml
中合并的构建清单的底部
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
清单中没有这些,清单报告中也没有它们。
3。移除尝试
尝试添加行
<uses-permission android:name=”android.permission.[permision-name]” tools:node=”remove” />
对于每个权限都不会删除它们。
4。合并清单视图
我还按照Android文档的建议使用了Merged Manifest View,除了merger-debug-report.txt
我尝试从其他库中搜索清单文件,但没有找到它们。我还尝试了使无效并重新启动,重新启动计算机以及删除所有生成文件的尝试。神秘权限仍然显示在合并的AndroidManifest.xml中。
如何找到这些权限的来源?
如何删除它们?
相关问题:
Disable Dependency Library permission
How to remove specific permission when build Android app with gradle?
Why does removing permission from AndroidManifest.xml not work?
答案 0 :(得分:1)
我在清理一些代码时偶然发现了答案-权限是由插件添加的,而不是由库添加的,这就是为什么它没有出现在上述报告中的原因。
我们使用一个名为ShareSDK的SDK进行共享。它是通过build.gradle
中的这一行添加的:
apply plugin: 'com.mob.sdk'
当我删除此行和相关代码时,合并的清单不再包含额外的权限。对于任何偶然发现此问题的用户,我要提防为中国市场打造的任何库或插件!