使用AndroidStudio调试Framework源码

目前虽然谷歌推出了ASFP用于查看和调试源码,但是ASFP只能在Linux上使用,并且内存占用比AndroidStudio还高。所以,本文的目标就是直接使用AndroidStudio在Windows/Mac/Linux上查看和调试源码(不过这里仅能查看和调试Java代码),本文演示也是在Windows上演示的,可能在不同操作系统上有细微差异。

准备工作

1.首先我们肯定是要下载我们的源码了,因为Windows上不支持repo命令,所以我们只能直接通过git命令下载指定的仓库了,一般来说Framework大部分的Java源码都在frameworks/base这个仓库,所以我们这里就先下载frameworks/base仓库代码。这里建议大家在下载源码时,最好按照源码的目录结构来新建目录以及下载源码。比如我这里源码根目录就是:D:\aosp,所以我frameworks/base仓库的路径就是:D:\aosp\frameworks\base

2.源码下载好了,我们自然是需要一台user debug的Android设备了,然后我们需要执行如下命令:

bash 复制代码
adb root
adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
adb reboot

然后我们等待设备重启即可。

配置AndroidStudio

1.首先我们先通过AndroidStudio的File-Open,直接打开我们的源码根目录,如下图所示

2.然后我们右键我们的根目录,点击Open Module Settings,如下图所示:

3.然后按照如下图所示操作,如果需要选择多个源码路径,重复第二步和第三步即可

操作完成以后会如图所示,选择完成以后记得点Apply。

4.选择完源码以后,我们还需要选择我们的SDK。这里选择SDK主要在你没有完全导入完源码的时候,方便你跳转查看代码。选择的原则就是和你源码的Android版本匹配即可。我这里就选择的是API 35,对应的就是Android15。

5.接着我们还需要让IDE能够优先识别我们的源码而不是SDK的代码,所以我们还需要按照如下操作执行一下,执行完也需要点击Apply按钮。

执行完成以后如下图所示:

6.这一步操作有时候做完以后,我们再次打开这个界面,发现SDK又跑到上面去了,这时候我们可以直接关闭AndroidStudio,在源码根目录下找到.idea文件夹,然后里面有个iml文件(大家记得打开隐藏文件夹显示)。我们手动改一下这个文件的内容即可,如下图所示:

调试源码

配置好AndroidStudio,我们就可以开始Debug我们的源码了,打断点这些操作就不复述了。下面就只讲一下如何开启Debug。

我们操作步骤还是Run-Attach Debugger to Android Process,如下图所示。

然后选择我们需要debug的进程即可,这里注意一下system_server进程实际是system_process。

最后附上一张Debug成功的截图:

相关推荐
我命由我123451 天前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
金融RPA机器人丨实在智能2 天前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
程序员老刘·3 天前
Android Studio Otter 3 发布:日常开发选AS还是Cursor?
flutter·android studio·ai编程·跨平台开发·客户端开发
JMchen1234 天前
AR Core与CameraX的融合:测量应用从原理到实现
android·经验分享·程序人生·ar·移动开发·android studio·camerax
JMchen1234 天前
Android相机硬件抽象层(HAL)逆向工程:定制ROM的相机优化深度指南
android·开发语言·c++·python·数码相机·移动开发·android studio
我命由我123455 天前
Android 开发问题:Duplicate class android.support.v4.app.INotificationSideChannel...
android·java·开发语言·java-ee·android studio·android-studio·android runtime
帅得不敢出门5 天前
Android定位RK编译的system.img比MTK大350M的原因
android·framework·策略模式
风流倜傥唐伯虎7 天前
./gradlew assembleDebug和gradle build区别
android·android studio
我命由我123457 天前
Android 开发 Room 数据库升级问题:A migration from 6 to 7 was required but not found.
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
JMchen1237 天前
现代Android图像处理管道:从CameraX到OpenGL的60fps实时滤镜架构
android·图像处理·架构·kotlin·android studio·opengl·camerax