阅读 820

【每日一技】Android 12 源码已出,如何便捷地阅读 AOSP 源码与调试系统进程

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

系列介绍

每日一技系列 是一个 How to 的系列,内容摘自我维护的知识星球:Android 解忧杂货铺,专注于高质量碎片化知识的分享。

目前星球中已经有600多位小伙伴,感兴趣的小伙伴可以在底部加我微信进入。

前言

今天,Android 12 源码已开源:

AS 快速查看

这里分享一个在 AS 中查看 Android 12 源码源码的方式:Settings -> Appearance&Behavior -> System Settings -> Android SDK 选择并应用。

此时我们在 compileSdk 为 31 的项目里点击跳转 framework 的类便可跳转。

断点调试系统进程

很多时候我们希望能够断点调试系统进程。如果想调试系统进程需要 ro.debuggable = 1,真机可以借助 Magisk 修改,不过我们也可以借助使用模拟器实现:

新建模拟器时选择 非 Google Play 的 64 位镜像,即可得到 ro.debuggable = 1 的模拟器设备。

断点时勾选所有进程,此时在选择进程时便可看到系统进程了。之后我们选择 system_process 点击 OK。

为了使代码行数对应,我们需要保证使用的源码版本与模拟器的版本一致:

之后便可以像平时一样断点啦~

关于编译源码和导出自定义 AVD 的内容,可以 移步

平台代码与三方库代码

打开 Android Studio Project 视图中的 External Libraries,可以看到项目里引入的第三方库,还有一个 android.jar

很多新手搞不清楚这个 android.jar 与其他三方库的区别,这一小节我们简单聊一下这个问题。

AOSP 的源码编译完成后会在 out 目录生成各种产物,处理 *.img 镜像文件外还有 framework.jar 等 jar 包。我们在前面看到的 android.jar 就是这样生成的。

这个 android.jar 是与平台相关的,即不同的 ROM 版本对应的代码是不同的。

例如:

Android 10 的 android.app.Activity.java 中新增了一个 onTopResumedActivityChanged() 回调方法,帮助开发者在多窗口模式下判断 Activity 的焦点。

Android 12 新增了 SplashScreen API,通过定义启动过程的图标及动画,使启动过程看起来更加「丝滑」。

我们常用的第三方库,如 Jetpack androidx* 是与平台无关的:

上图中,Jetpack 组件的 Activity 源码是打到我们的 apk 包中的,而 android.app.Activity 是平台代码,由设备提供。

在线网站查看

我们可以在 cs.android.com/ 查看 AOSP,AndroidX,Android Studio 等源码:

关于我

人总是喜欢做能够获得正反馈(成就感)的事情,如果感觉本文内容对你有帮助的话,麻烦点亮一下👍,这对我很重要哦~

我是 Flywith24人只有通过和别人的讨论,才能知道我们自己的经验是否是真实的,加我微信交流,让我们共同进步。

关注公众号,点击底部 联系我 -> 知识星球 加入免费的知识星球

文章分类
Android
文章标签