环境搭建之使用Androidstudio来看framework代码
Android studio读Android源码
目录
linux环境配置
1. 配置
进到Android源码目录:
source build/envsetup.sh
lunch sdk_phone_x86
mmm development/tools/idegen/
sh ./development/tools/idegen/idegen.sh
2. 替换android.iml,加快index速度
<?xml version="1.0" encoding="UTF-8"?>
<module version="4" relativePaths="true" type="JAVA_MODULE">
<component name="ModuleRootManager" />
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<!--sourceFolder标签表示需要索引的代码目录-->
<sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
<!--excludeFolder标签表示这个目录下所有内容都不索引-->
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth" />
<excludeFolder url="file://$MODULE_DIR$/external/chromium" />
<excludeFolder url="file://$MODULE_DIR$/external/emma" />
<excludeFolder url="file://$MODULE_DIR$/external/icu4c" />
<excludeFolder url="file://$MODULE_DIR$/external/jdiff" />
<excludeFolder url="file://$MODULE_DIR$/external/webkit" />
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs" />
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/tests" />
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/tools" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/ndk" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/vendor" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="inheritedJdk" />
<orderEntryProperties />
</component>
</module>
3. 打开Androidstudio,导入android.ipr文件
File -> Open,然后打开android.ipr文件就可以了
4. 修改JDK + SDK
由于我用的Android 10的源码,所以需要修改JDK和SDK,然后debug的时候才会识别emulator设备
(1)File -> Settings -> Android SDK -> SDK Platforms -> 添加Andorid 10的sdk
(2)File -> Project Structure -> SDKs -> + -> 选择添加Android 29也就是10的sdk
(3)File -> Project Structure -> Project -> Project SDK -> 选择10的
5. 打开emulator
emulator -verbose -show-kernel
6. 打开debug模式
选择emulator就可以对system_process进行debug了
windows环境
1. 下载Android源码
1. 打开https://mirror.tuna.tsinghua.edu.cn/help/AOSP/
2. 下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar包
2. 新建Android studio工程
1. File -> New -> New Project -> No activity -> 随便起个名字 -> finish
3. 导入framework源码
1. 将上面下载的aosp-lastest.tar压缩包解压
2. 切换到Android Q的一个分支上,例如:android-10.0.0_r13
导入其他源码也是类似的:
下面以导入frameworks/base/services/core和frameworks/base/core源码为例:
3. 将frameworks/base/services/core和frameworks/base/core源码拷贝到app/src目录下
4. 打开app.iml文件,寻找src/main/java那一行,并复制它,在下面添加,注意添加的是java文件夹:
<sourceFolder url="file://$MODULE_DIR$/src/core-test/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/service-core-test/java" isTestSource="false" />
4. 新建一个具有root权限的emulator
avd manager -> create virtual device -> 选择pixels 3,然后next -> img选择x86列 -> 然后选择没有(Google APIs)的Android 10.0的x86 img,然后next -> 然后硬件参数随意
5. 进行单步调试debug
1. Ctrl + N搜索ActivityTaskManagerService.java文件,然后在该文件中搜索startActivity函数,打上断点
或者搜索ActivityThread.java文件,然后在该文件中搜索performResumeActivity函数,打上断点
2. 右上角debug图标,选择system_server进程
或者选择com.android.launcher3进程
3. 然后打开一个应用,或者返回桌面,就会看到断点生效了,就可以进行单步调试了。
system_server启动单步调试
// frameworks/base/services/java/com/android/server/SystemServer.java
import android.os.Debug;
public static void main(String[] args) {
// 添加下面这两句,编译之后启动,Android studio中system_server连接调试就可以了
// android.ddm.DdmHandleAppName不设置名字的话,Android studio单步调试页面显示进程名为?
android.ddm.DdmHandleAppName.setAppName("system_process", UserHandle.myUserId());
android.os.Debug.waitForDebugger();
new SystemServer().run();
}
Android studio快捷键
ctrl + n 查找文件
Ctrl + f 查找符号
ctrl + 鼠标 跳转符号
alt + 左右箭头 返回或者前进刚才的位置
参考
1. Android 开机启动调试,system_process调试
https://blog.csdn.net/l491337898/article/details/81432456