Android Studio开发自定义启动器 内置模拟器找不到目标应用包求助
自定义启动器检索不到目标应用的排查步骤
核心逻辑前置说明
当前代码的包名查询逻辑不存在错误:getPackageManager().getLaunchIntentForPackage() 方法只要返回null,就代表Android系统层面确实没有匹配到对应包名的可启动入口,不需要修改代码的核心判断逻辑,按以下顺序排查即可:
1. 先确认目标应用真的安装在当前运行的模拟器上
- 90%以上同场景新手的问题根源:填写的包名是正确的,但模拟器根本没有安装这个应用
- 比如代码中指定的
com.google.android.youtube,很多默认创建的模拟器用的是纯开源AOSP镜像,本身不预装任何Google系应用,自然检索不到对应包名
- 比如代码中指定的
- 验证方法:
- 直接打开模拟器的应用抽屉,手动翻找有没有要启动的目标APP
- 也可以在Android Studio的Terminal面板执行命令,列出模拟器上所有已安装应用的包名:
在输出结果里搜索填写的目标包名,找不到就说明根本没装,和代码无关adb shell pm list packages
2. 检查Android 11及以上版本的包可见性权限
- 从Android 11(API 30)开始,系统默认限制普通应用检索其他已安装应用的包名,就算目标应用已经装好,你的应用不加权限也会拿到null的启动意图
- 修复方法:打开项目的
app/src/main/AndroidManifest.xml文件,在<application>标签的同级位置添加包查询声明:
很多线上旧教程没有提这个要求,是因为教程发布时该权限规则还未上线,属于高频踩坑点<!-- 放在<manifest>标签内部,<application>标签外部 --> <queries> <package android:name="com.google.android.youtube" /> </queries>
3. 确认模拟器镜像的兼容性
- 如果要启动YouTube这类依赖Google服务框架(GMS)的应用,创建模拟器虚拟机时必须选择标注了Google Play / Google APIs的系统镜像:
- 纯AOSP镜像就算手动拖动APK安装包完成安装,也会因为缺少服务框架导致应用无法正常启动,甚至包名检索失败
- 不要为了图省事给裸AOSP镜像手动装GMS,新手大概率会遇到文件权限、签名不匹配的兼容性问题,直接换带GMS的官方镜像最稳妥
4. 核对实际安装包的包名是否正确
- 部分应用的修改版、渠道定制版,实际安装包名会和官方公开的包名有差异,必须以在模拟器上实际安装的版本包名为准,不能照搬网上的包名列表
内容的提问来源于stack exchange,提问作者Will Jones
相关产品推荐
相关产品推荐

