Android应用启动崩溃排查:已配置权限仍因权限缺失崩溃?
这种突然炸锅的权限崩溃真的很头疼——明明之前好好的,自己啥代码都没改就崩了,我帮你梳理几个大概率的排查方向:
常见排查点
Manifest权限的隐性坑
你已经在AndroidManifest.xml里加了INTERNET和ACCESS_COARSE_LOCATION,但要注意:- 如果你是Android 10+(API 29)的设备,要是应用用到了后台定位,光有
ACCESS_COARSE_LOCATION还不够,得额外加ACCESS_BACKGROUND_LOCATION权限; - 检查下manifest里有没有不小心用
tools:node="remove"把权限给覆盖删掉了,这种隐性配置很容易忽略。
- 如果你是Android 10+(API 29)的设备,要是应用用到了后台定位,光有
运行时权限的执行时机错了
你说实现了运行时权限,但会不会是需要权限的代码先跑了,权限请求后到?比如启动页刚加载就直接调用定位/网络请求,但用户还没点权限同意弹窗,这时候直接触发SecurityException崩溃。去看看Application类或者启动Activity的初始化逻辑,是不是把敏感操作放在了权限通过之前?系统/设备偷偷改了权限
你没改代码,但手机可能偷偷搞事情:- 比如系统自动更新了Android版本,新系统对权限的要求更严了;
- 某些手机管家、清理工具会自动重置应用权限,或者你不小心在系统设置里把应用权限关掉了。去手机的「应用设置-你的应用-权限」里确认下,权限是不是都开着?
Logcat日志没看全
你只贴了崩溃开头,关键的异常栈信息没放出来——比如崩溃是不是SecurityException?日志里的Caused by:行一定会明确指出是哪个权限缺失、在哪行代码触发的。把完整的崩溃栈找出来,直接就能定位问题。混淆工具搞的鬼
如果最近开启了ProGuard/R8混淆,有可能是混淆把权限检查的逻辑给误删了。试试关闭混淆重新打包,看看是不是就正常了?
内容的提问来源于stack exchange,提问作者Escaper




