Google Play下架应用,Manifest XML未找到READ_CALL_LOG/WRITE_CALL_LOG违规权限?
别慌,这种因敏感权限问题被Google下架的情况挺常见的,我给你整理几个实用的排查方向,一步步来:
1. 先找合并后的最终Manifest文件
Android会自动合并你自己写的AndroidManifest.xml和所有依赖库的Manifest,所以你本地XML里没找到的权限,大概率是第三方库偷偷引入的:
- 打开Android Studio,点击顶部菜单栏的
Tools > Android > Merge Manifest,就能看到合并后的完整权限列表,直接搜索READ_CALL_LOG和WRITE_CALL_LOG,就能定位到是哪个模块(自己的代码还是某个依赖库)带进来的; - 或者直接去项目目录里找:
app/build/intermediates/merged_manifests/debug(或release)/AndroidManifest.xml,打开这个文件搜索目标权限更直接。
2. 全局搜索整个项目的权限痕迹
用Android Studio的全局搜索快捷键(Ctrl+Shift+F,Mac是Cmd+Shift+F),搜索READ_CALL_LOG和WRITE_CALL_LOG:
- 看看有没有代码里做了动态权限请求(比如
requestPermissions()方法里用到这些权限); - 排查是否有其他配置文件里声明了这些权限(虽然可能性低,但不妨扫一遍)。
3. 逐个排查第三方依赖库
打开你模块下的build.gradle文件,查看dependencies块里的所有依赖:
- 重点留意和通话、通讯录、广告相关的SDK,这类库经常会默认添加敏感权限;
- 可以尝试逐个注释掉可疑的依赖,重新构建项目后再看合并后的Manifest里是否还有那两个权限,这样就能精准定位到是哪个库搞的鬼。
4. 强制移除不必要的权限
如果确认你的应用根本不需要这些权限,就算是第三方库引入的,也可以在自己的AndroidManifest.xml里强制移除:
<!-- 记得先在根节点添加tools命名空间:xmlns:tools="http://schemas.android.com/tools" --> <uses-permission android:name="android.permission.READ_CALL_LOG" tools:node="remove" /> <uses-permission android:name="android.permission.WRITE_CALL_LOG" tools:node="remove" />
tools:node="remove"会告诉Android打包时忽略这个权限,不管它是从哪里来的。
另外你提到的那个“无法修改的manifest类文件”,应该是Android自动生成的Manifest相关类,那个是根据XML文件自动生成的,不用管它,所有权限配置都以AndroidManifest.xml为准。
内容的提问来源于stack exchange,提问作者svb
相关产品推荐
相关产品推荐

