近日,Android开发者社区中出现了一个引发广泛关注的技术问题:对于从Google Play商店安装的“次要包”(secondary package)应用,USE_FULL_SCREEN_INTENT 和 SYSTEM_ALERT_WINDOW 这两个关键系统权限无法正常触发后台屏幕启动,导致闹钟、来电全屏通知以及悬浮窗等功能失效。这一问题已困扰多个拥有多APK分发架构的应用团队,尤其影响依赖附属包的辅助工具、健康监测和通讯类应用。
权限的作用与“次要包”的背景
USE_FULL_SCREEN_INTENT 是Android 10(API 29)引入的权限,允许应用在锁屏或全屏状态下显示高优先级的通知(如闹钟、来电、紧急提醒)。SYSTEM_ALERT_WINDOW 则是更经典的“悬浮窗权限”,让应用可以在其他应用上方绘制窗口——常见于聊天气泡、录屏控制、步数浮窗等功能。两者对于提升用户体验至关重要。
所谓“次要包”,指的是开发者利用Google Play的“多APK发布”功能,为同一应用创建多个包名不同的扩展模块。例如,一个主闹钟应用(主包)可能会附带一个“白噪音播放器”(次要包),后者需要独立获取全屏通知权限才能在后台唤醒屏幕播放闹铃。然而,开发者在测试中发现,这些从Play Store安装的次要包,无论怎样申请权限,系统似乎都不会真正授予其“后台启动屏幕”的能力。
问题复现:权限已授予,但无实际效果
多位开发者表示,他们在清单文件中正确声明了权限,并在运行时通过弹窗请求用户授权。系统设置中也显示权限已为“允许”,但实际运行时,次要包发起的全屏intent或悬浮窗却被系统静默拦截。一位开发者在技术论坛上描述:“主包可以正常弹窗和启动全屏,但同一账号下的次要包却完全不行。即便使用startActivity设置FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TOP,活动也不会出现在前台。”
更有开发者尝试了利用AlarmManager设置精确闹钟,并携带USE_FULL_SCREEN_INTENT标志,结果在锁屏状态下仅有普通通知音效,无全屏界面弹出。这对于依赖次要包实现闹铃或来电场景的应用来说,几乎是毁灭性的缺陷。
可能原因:系统针对安装来源的隐式限制
经过深入排查,社区初步推测问题根源在于Android系统对“包安装器”(Package Installer)的权限审核逻辑。从Play Store下载的应用会经过Google Play Protect的扫描,而系统可能为每个应用设置了一个“信任等级”。对于主包,系统因其拥有完整功能声明而赋予较高权限;但对于次要包,系统可能将其视为“继承包”或“扩展包”,默认不赋予其直接启动前台活动的资格。
另一种可能是,次要包在安装时并未获得与主包等同的“角色”(role)声明。例如,SYSTEM_ALERT_WINDOW在某些厂商定制系统中要求应用具有“可访问性服务”或“电话服务”角色,而次要包未被系统识别为合法的角色持有者。此外,USE_FULL_SCREEN_INTENT自Android 12起增加了更严格的限制——仅允许在后台已拥有“可见窗口”的应用使用,次要包因后台优先级较低,可能被视为不符合条件。
影响范围:从闹钟到医疗监测,波及广泛
这一Bug的影响面不容小觑。除了常见的闹钟和来电显示应用,许多健康监测类App会使用次要包实现后台心率预警;辅助功能应用(如屏幕阅读器、浮窗翻译)也需要SYSTEM_ALERT_WINDOW始终可用。如果次要包无法正常工作,用户将面临关键通知遗漏或辅助工具失灵的风险。
目前,尚无官方修复补丁。部分开发者提出临时工作区:将次要包功能合并回主包,或使用android:sharedUserId共享进程ID(但Google已不推荐该做法且存在安全隐患)。也有开发者尝试通过MANAGE_OVERLAY_PERMISSION权限(需要用户手动跳转设置页授权)绕过,但该权限在Android 14以上逐渐收紧。
期待谷歌回应
截至发稿,Google尚未在公开问题追踪器中承认此Bug。但鉴于多APK分发模式在大型应用中愈发常见,这一兼容性问题若持续存在,可能迫使开发者调整架构。我们建议受影响的用户及时更新应用,并关注Play Console中的权限测试报告。同时,呼吁谷歌尽快明确对次要包权限的行为定义,或在未来的Android版本中提供更透明的授权机制。
毕竟,在用户信任与系统安全之间取得平衡,才是Android生态良性发展的基石。