环境搭建之使用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
posted @ 2021-04-14 22:14  pyjetson  阅读(1249)  评论(0编辑  收藏  举报