You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于移除QUERY_ALL_PACKAGES权限后应用仍下架的技术问询

问题背景
  • 应用因QUERY_ALL_PACKAGES权限违规被下架,已移除该权限但应用仍处于下架状态
  • 官方提示问题疑似由历史版本导致,但无法下架历史版本
  • 官方明确要求使用<queries>元素声明特定包可见性替代全量查询,涉及拆分包SPLIT_BUNDLE 4400012和SPLIT_BUNDLE 4400018
  • 已通过Android Studio排查APK、清单文件及编译目录,未发现该权限,第三方库排查也无结果
针对性解决步骤

1. 彻底排查拆分包的权限声明

由于问题指向特定拆分包,需单独检查这两个bundle的清单文件:

  • 找到项目中对应拆分包的模块(通常在src/main/AndroidManifest.xml或拆分模块的清单文件)
  • 检查是否存在android.permission.QUERY_ALL_PACKAGES声明,包括是否通过tools:node="remove"未生效的情况
  • 若使用动态功能模块,确认模块清单是否继承了主模块的权限,可添加tools:node="remove"强制移除

2. 验证构建输出的所有APK/AB包

  • 使用aapt dump permissions <apk-path>命令直接解析拆分包APK的权限列表,确认是否存在目标权限(比Android Studio可视化分析更准确)
  • 检查App Bundle构建输出的bundle目录下的所有模块文件,确认权限是否被意外打包

3. 处理历史版本遗留问题

  • 向官方提交申诉,明确说明:
    • 当前版本已完全移除QUERY_ALL_PACKAGES权限,并附上aapt解析的权限列表截图/文本
    • 说明已按照要求通过<queries>声明了所需的特定包可见性,附上清单文件中<queries>配置的代码片段
    • 解释无法下架历史版本的情况,请求官方针对当前合规版本恢复上架
  • 申诉时重点强调:当前版本的功能实现未依赖全量包查询,完全符合<queries>的窄范围可见性要求

4. 确认<queries>配置的正确性

确保<queries>元素正确覆盖了所有需要访问的应用包名,示例配置:

<queries>
    <!-- 声明需要访问的特定应用包名 -->
    <package android:name="com.example.targetapp1" />
    <package android:name="com.example.targetapp2" />
    <!-- 若需要基于Intent过滤,可添加intent节点 -->
    <intent>
        <action android:name="android.intent.action.SEND" />
        <data android:mimeType="text/plain" />
    </intent>
</queries>

5. 排查构建脚本与依赖的隐式引入

  • 检查项目的build.gradle文件,确认是否有通过manifestPlaceholders或其他构建逻辑动态添加权限的情况
  • 使用./gradlew app:dependencies(对应模块命令)分析依赖树,查看是否有第三方库间接引入该权限,可通过exclude规则移除:
dependencies {
    implementation('com.example.somelibrary') {
        exclude group: 'androidx.core', module: 'core' // 示例,根据实际依赖调整
    }
}

内容的提问来源于stack exchange,提问作者user14534315

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:20:35