如何在Android Studio中追踪URL打开流程及解决调试无输出问题
解决方案:AOSP URL打开流程追踪与调试,以及M1 Ubuntu下载问题
一、Android Studio Attach调试无输出的问题
你的当前方法存在局限:直接Attach单个进程抓不到完整的URL打开流程——点击URL会涉及系统Resolver进程(应用选择器)、发起方进程(短信/Google应用)、目标浏览器进程三个核心环节,而且默认编译的AOSP系统进程是不可调试的,导致断点无法触发。
解决步骤:
重新编译开启全局Debuggable的AOSP镜像
编辑AOSP源码根目录下的build/make/core/main.mk,找到DEFAULT_DEBUGGABLE行,修改为:DEFAULT_DEBUGGABLE := true或者在对应设备的
device/<厂商>/<机型>/device.mk中添加:PRODUCT_DEBUGGABLE := true执行
make -j$(nproc)重新编译系统镜像,刷入模拟器后,所有系统进程即可被调试。同时调试关键进程
URL打开的核心流程涉及两个必调进程:com.android.server.resolver:系统应用选择器进程,是URL跳转的第一个入口- 目标浏览器进程(比如
com.android.chrome或系统自带浏览器)
在Android Studio中通过「Attach Debugger to Android Process」同时Attach这两个进程,优先调试Resolver进程。
设置核心断点
直接在这些关键类的方法上打:- Resolver入口:
com.android.server.resolver.ResolverManagerService的startResolveActivity方法 - Intent解析:
android.content.Intent的parseUri方法 - 启动流程:
com.android.server.am.ActivityManagerService的startActivityAsUser重载方法 - 浏览器侧:以Chrome为例,
org.chromium.chrome.browser.IntentHandler的handleIntent方法
- Resolver入口:
用Logcat先定位流程
如果调试断点无反应,先通过Logcat抓关键日志缩小范围:adb logcat -s ActivityManager ResolverManager点击URL后,日志会显示Intent的传递路径、启动的组件名,再对应到代码添加断点。
二、M1 Ubuntu环境下载AOSP失败的解决
关键配置与修复:
使用ARM64原生Ubuntu
不要用x86_64转译版本,直接安装Ubuntu 22.04 LTS ARM64版本,适配M1架构。安装完整依赖
执行以下命令安装编译AOSP所需的所有依赖:sudo apt update && sudo apt install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python3-pip修复Repo工具的Python兼容
M1 Ubuntu默认只有Python 3,而Repo工具可能默认调用Python 2,解决方式:- 初始化Repo时指定Python 3:
repo init -u <镜像地址> -b <分支> --config=repo.python=python3 - 若已初始化,编辑
~/.repo/repo/main.py,把第一行的#!/usr/bin/env python改成#!/usr/bin/env python3
- 初始化Repo时指定Python 3:
切换国内镜像源
官方源网络不稳定,用清华镜像替代(替换成你需要的分支):repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r33 repo sync -j$(nproc)
内容的提问来源于stack exchange,提问作者Jomanah OB
相关产品推荐
相关产品推荐

