2024阅读AOSP源码的正确打开姿势

2024阅读AOSP源码的正确打开姿势

在Android系统开发中,阅读AOSP(Android Open Source Project)源码是非常重要的环节。然而,如何构建一个优雅的阅读环境却是一个不容忽视的问题。本文将介绍不同工具和方法下阅读AOSP源码的正确姿势,并对比其优缺点。

1. 阅读AOSP源码的方式

工具对比

工具描述优点缺点文档路径
Vim等文本工具打开速度快,不用索引源码,不支持代码跳转。速度快不支持代码跳转-
Source Insight界面朴素,索引速度较慢,代码跳转不完整,仅官方支持Window平台。Linux平台支持配置复杂界面简洁仅支持Window平台,代码跳转不完整-
在线源码网站不用repo下载整个源码文件,但需要梯子才能查看,google站点https://cs.android.com/不需要下载整个源码文件需要借助梯子-
IDE贴合实际开发环境,代码跳转、调试友好,IntelliJ/Android Studio支持Java源码环境,CLion支持Native源码环境。实际开发环境友好配置复杂,占用资源较多官方文档

官方支持

2024小编不再推荐你使用vim、SourceInsight等老旧工具查看AOSP源码,局限性太多,小编给你提供以下几种官方支持方式:

脚本工具描述缺点文档路径
IDEGen生成android.ipr项目配置文件和android.iml依赖文件,AndroidStudio打开android.ipr即可导入AOSP。仅支持生成Java源码环境,生成project未配置JDK依赖,因为索引整个AOSP项目导入Android Studio构建非常卡顿,需要手动排除不要的模块目录才能减轻卡顿问题。/development/tools/idegen/README.md
Soong可指定选定的模块生成CMakeLists.txt适用于CLion的项目配置文件,CLion打开即可导入AOSP。仅支持生成Native源码环境,用.mk文件编译(Make构建源码)的模块不会生成CMakeLists.txt文件,需要手动编写.bp(Soong构建)文件编译模块,编译出来的是各个模块单独的CMakeLists.txt,需要手动创建项目总CMakeLists.txt把各个模块合并。/build/soong/docs/clion.md
AIDEGen自动完成指定模块的所有依赖,并自动拉起指定IDE导入项目。如果指定的Native模块依赖很多、很大,工作耗时长/tools/asuite/aidegen/README.md

AOSP的模块概念

使用上面官方支持方式导入AOSP源码之前,你需要了解AOSP模块概念,可简单理解为一个功能模块的代码集合,也就是一个代码集中的目录。文件目录下有 Android.bp(Soong构建配置文件) 或者 Android.mk(GUN Make构建配置文件)即可视为模块。例如:以下目录都可称之为模块:packages/apps/Settingspackages/apps/Launcher3/frameworks/base等。

AOSP的模块可以通过以下命令来查看:

source build/envsetup.sh
#获取所有模块
allmod >> mods.txt
#获取framework模块路径
pathmod framework
#获取libbinder模块路径
pathmod libbinder

2. AOSP源码下载编译

使用IDEGen、Soong及AIDEGen等工具导入AOSP源码前,你首先需要下载并编译AOSP源码,详情请参考之前的文章
AOSP源码下载编译

3. IDEGen生成AOSP源码Java阅读环境(不推荐)

导入步骤如下:

  1. 打开终端或命令行窗口。

  2. 运行以下命令:source build/envsetup.sh && make idegen && . development/tools/idegen/idegen.sh。该命令的执行时间可能较长。

  3. 在AOSP代码根目录下找到生成的 android.iml 和 android.ipr 两个文件。

  4. 打开 Android Studio。

  5. 点击 “File” --> “Open”,选择生成的 android.ipr 文件。

  6. 注意,导入整个源码会导致卡顿,你可以排除一些代码。打开 android.iml 文件,将以下内容添加到 <content url="file://$MODULE_DIR$"> 标签中:

     <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$/hardware" />
     <excludeFolder url="file://$MODULE_DIR$/kernel" />
     <excludeFolder url="file://$MODULE_DIR$/out" />
     <excludeFolder url="file://$MODULE_DIR$/pdk" />
     <excludeFolder url="file://$MODULE_DIR$/platform_testing" />
     <excludeFolder url="file://$MODULE_DIR$/prebuilts" />
     <excludeFolder url="file://$MODULE_DIR$/sdk" />
     <excludeFolder url="file://$MODULE_DIR$/system" />
     <excludeFolder url="file://$MODULE_DIR$/test" />
     <excludeFolder url="file://$MODULE_DIR$/toolchain" />
     <excludeFolder url="file://$MODULE_DIR$/tools" />
     <excludeFolder url="file://$MODULE_DIR$/.repo" />
    
  7. 或者在 Android Studio 中手动排除目录。

  8. 最后,点击顶部菜单栏 “File” -> “Project Structure”,配置项目对应的 JDK、SDK。

注意:执行上述步骤需要一定的时间和计算资源,如果你的电脑CPU及内存资源足够,那么这个时间可能快很多。
由于导入整个AOSP项目到Android Studio会非常卡顿,因此不推荐使用。

4. Soong生成AOSP源码Native环境(不推荐)

导入步骤如下:

  1. 打开终端或命令行窗口。
  2. 运行以下命令:
    source build/envsetup.sh
    export SOONG_GEN_CMAKEFILES=1
    export SOONG_GEN_CMAKEFILES_DEBUG=1
    make -j8
    
    这些命令将编译生成整个 AOSP 各个模块的 CMakeList.txt 文件。根据自己电脑的 CPU 参数,可以调整 -j8 后面的数字来指定执行生成任务的线程数。
  3. 如果想编译特定路径的模块,可以运行类似以下命令:
    make frameworks/native/libs/binder
    
  4. 在编译模块的过程中,Soong会将 Native 代码的依赖关系记录到一个文件 CMakeLists.txt 中。生成的 CMakeLists.txt 文件位于对应模块的路径,例如:out/development/ide/clion/frameworks/native/libs/binder/libbinder-arm-android/CMakeLists.txt
  5. 使用 CLion 打开刚生成的 CMakeLists.txt 文件。在 CLion 中打开后可能会看到扁平化的目录结构,需要修改工程根目录。可在顶部菜单栏选择 “Tools” -> “CMake” -> “Change Project Root”,然后选择源码中对应模块的目录,例如 frameworks/native/libs/binder
  6. 如果想引导多个模块,需要手动创建一个顶层的 CMakeLists.txt 文件,将各个生成的模块的 CMakeLists.txt 文件添加进来,类似于以下示例:
    cmake_minimum_required(VERSION 3.6)
    project(native)
    add_subdirectory(services/surfaceflinger)
    add_subdirectory(libs/ui/libui-arm64-android)
    add_subdirectory(libs/gui/libgui-arm64-android)
    

通过以上步骤,你就可以生成并配置好一个用于阅读 AOSP 源码的 Soong 环境。

然而,由于生成CMakeLists.txt文件需要手动编写,且执行命令耗时较长,因此也不推荐使用。

5. AIDEGen生成AOSP源码Java\Native环境(推荐)

AIDEGen是一种生成AOSP源码Java\Native环境的脚本工具,自动完成项目在IDE上的模块依赖、SDK、JDK等环境配置。它支持从Android 10开始生成Java项目,从Android 11开始完全支持Native项目,是目前推荐的使用方式。

导入步骤如下:

  1. 打开终端或命令行窗口。
  2. 运行以下命令:
    source build/envsetup.sh
    lunch aosp_x86_64-eng
    
    这些命令将设置环境并选择构建目标为 64 位 PC 模拟器版本。可以根据需要选择其他目标,请参考官方文档了解更多选项:

https://source.android.google.cn/docs/setup/build/building?hl=zh-cn#choose-a-target

  1. 生成 Java 源码环境并启动 Android Studio 导入项目,可以运行以下命令:

    aidegen framework -i s
    

    这将生成 framework 模块的 Java 源码环境,并自动启动 Android Studio 导入项目。

  2. 如果想生成 Native 项目的源码环境,并启动 CLion 导入项目,可以运行类似以下命令:

    aidegen frameworks/base/core/jni frameworks/native/libs/binder -i c
    

    这将生成与 Binder 相关的 Native 层源码环境,并自动启动 CLion 导入项目。

  3. 如果之前已经使用过 aidegen 生成过模块,可以添加 -s 参数来跳过部分过程以加速任务执行。

通过以上步骤,你可以快速生成 AIDEGen 环境,帮助你更便捷地在 IDE 中阅读和开发 AOSP 源码。

想要进一步了解aidegen的使用技巧,请参考小编之前的文章:
aidegen:为AOSP代码中Java和C / C ++项目自动生成ide配置

另外,附上aidgen详细使用说明如下:

$ aidegen --help
usage: aidegen [module_name1 module_name2... project_path1 project_path2...]

AIDEgen

This CLI generates project files for using in IntelliJ, such as:
    - iml
    - .idea/compiler.xml
    - .idea/misc.xml
    - .idea/modules.xml
    - .idea/vcs.xml
    - .idea/.name
    - .idea/copyright/Apache_2.xml
    - .idea/copyright/progiles_settings.xml

- Sample usage:
    - Change directory to AOSP root first.
    $ cd /user/home/aosp/
    - Generating project files under packages/apps/Settings folder.
    $ aidegen packages/apps/Settings
    or
    $ aidegen Settings
    or
    $ cd packages/apps/Settings;aidegen

positional arguments:
  targets               Android module name or path.e.g. Settings or packages/apps/Settings

optional arguments:
  -h, --help            show this help message and exit
  -d {0,1,2,3,4,5,6,7,8,9}, --depth {0,1,2,3,4,5,6,7,8,9}
                        The depth of module referenced by source.
  -v, --verbose         Display DEBUG level logging.
  -i IDE, --ide IDE     Launch IDE type, j: IntelliJ, s: Android Studio, e: Eclipse, c: CLion, v: VS Code. The default value is 'u': undefined.
  -p IDE_INSTALLED_PATH, --ide-path IDE_INSTALLED_PATH
                        IDE installed path.
  -n, --no_launch       Do not launch IDE.
  -r, --config-reset    Reset all saved configurations, e.g., preferred IDE version.
  -s, --skip-build      Skip building jars or modules that create java files in build time, e.g. R/AIDL/Logtags.
  -a, --android-tree    Generate whole Android source tree project file for IDE.
  -e [EXCLUDE_PATHS [EXCLUDE_PATHS ...]], --exclude-paths [EXCLUDE_PATHS [EXCLUDE_PATHS ...]]
                        Exclude the directories in IDE.
  -V, --version         Print aidegen version string.
  -l LANGUAGE, --language LANGUAGE
                        Launch IDE with a specific language, j: Java, c: C/C++, r: Rust. The default value is 'u': undefined.

INFO: To report an AIDEGen tool problem, please use this link: https://goto.google.com/aidegen-bug

参数说明如下:

6. 最佳实践

在完成Ubuntu软硬件、AndroidStudio、CLion、Git、Repo、Python的配置后,可以使用以下命令完成源码拉取、编译依赖、启动IDE的任务:

mkdir aosp && cd aosp && repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-13.0.0_r41 && repo sync && source build/envsetup.sh && lunch aosp_x86_64-eng && aidegen framework -i s && aidegen frameworks/native -i c

完成以上步骤后,可以在AndroidStudio、CLion中查看AOSP源码。如果电脑性能良好、带宽充足,可以大大提高源码阅读的效率。

总之,选择合适的工具和方法,以及合理的配置,对于构建高效的AOSP源码阅读环境至关重要。建议开发者根据实际需求和环境,选择适合自己的阅读方式。

7. 参考链接及资源

https://source.android.google.cn/docs/setup/build?hl=zh-cn

8. 福利放送

如果你打算入坑Android Framework开发,小编给你准备了一份免费学习资料,请关注 虎哥Lovedroid 并回复fw666

领取《Android Framework核心源码笔记》核心资料。

下面是资料部分截图



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/394871.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

渲染效果图为什么都选择使用云渲染,优势有哪些?

随着3D技术在动画、电影、游戏、建筑等领域的广泛应用&#xff0c;渲染作为3D制作流程中的重要环节&#xff0c;其效率和成本直接影响着项目的最终成果。 近年来&#xff0c;云渲染技术的兴起为3D创作者提供了一种全新的选择&#xff0c;与传统的本地渲染相比&#xff0c;云渲…

【Wio Terminal】输入/输出

输入/输出 一、概述1、硬件原理图Terminal引脚分布及功能Wio Terminal Grove端口引脚分配 二、使用Wio Terminal上的Grove模拟端口1、RPI 模拟引脚2、Grove引脚配置3、示例 三、使用 Wio Terminal上的Grove数字端口1、RPI 数字引脚2、Grove引脚配置将 Grove I2C 端口用作数字端…

数据结构1.0(基础)

近java的介绍&#xff0c; 文章目录 第一章、数据结构1、数据结构 &#xff1f;2、常用的数据结构数据结构&#xff1f; 逻辑结构and物理结构 第二章、数据结构基本介绍2.1、数组&#xff08;Array&#xff09;2.2、堆栈&#xff08;Stack&#xff09;2.3、队列&#xff08;Que…

2024阿里云云服务器ECS价格表出炉

2024年最新阿里云服务器租用费用优惠价格表&#xff0c;轻量2核2G3M带宽轻量服务器一年61元&#xff0c;折合5元1个月&#xff0c;新老用户同享99元一年服务器&#xff0c;2核4G5M服务器ECS优惠价199元一年&#xff0c;2核4G4M轻量服务器165元一年&#xff0c;2核4G服务器30元3…

C++之Easyx——图形库的基本准备工作

什么是Easyx&#xff1f; EasyX Graphics Library 是针对 Visual C 的免费绘图库&#xff0c;支持 VC6.0 ~ VC2022&#xff0c;简单易用&#xff0c;学习成本极低&#xff0c;应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。 它比Red PandaDev C上的图形库功能要强…

海外大带宽服务器连接失败:原因与解决策略

​随着全球互联网的发展&#xff0c;越来越多的企业和个人选择使用海外大带宽服务器来满足数据传输和业务需求。然而&#xff0c;在实际使用中&#xff0c;有时会出现服务器连接失败的问题。本文将为您分析原因并提供相应的解决策略。 一、海外大带宽服务器连接失败的原因 网络…

Feign 第一次调用为什么会很慢?

前言 首先要了解 Feign 是如何进行远程调用的&#xff0c;这里面包括&#xff0c;注册中心、负载均衡、FeignClient 之间的关系&#xff0c;微服务通过不论是 eureka、nacos 也好注册到服务端&#xff0c;Feign 是靠 Ribbon 做负载的&#xff0c;而 Ribbon 需要拿到注册中心的…

libgdx的完整教程

概述&#xff1a;如果大家想用java做游戏&#xff0c;那么libgdx可能是一个好的选择。LibGDX是一个强大的跨平台2D/3D游戏开发框架。 LibGDX的主要特点包括&#xff1a; 强兼容性&#xff1a;LibGDX能够运行在多种平台上&#xff0c;包括但不限于Mac、Linux、Windows以及Andr…

零基础学编程从哪开始,中文编程工具免费版下载及构件用法教程

一、前言 零基础学编程从哪开始&#xff0c;中文编程工具免费版下载及构件用法教程 今天给大家分享的中文编程开发语言工具资料如下&#xff1a; 编程入门视频教程链接 http://​ https://edu.csdn.net/course/detail/39036 ​ 编程工具及实例源码文件下载可以点击最下方…

酷开会员丨春节回家,用酷开系统欢聚K歌,唱出团圆喜乐

每当春节临近&#xff0c;总会在大街小巷听到熟悉的旋律&#xff0c;比如《恭喜发财》、比如《好运来》……这些氛围感满满的歌曲&#xff0c;代表着年味&#xff0c;寓示着团圆。 春节&#xff0c;是万家团圆的喜庆时刻&#xff0c;也是亲朋好友欢聚一堂的日子。亲友聚会&…

找座位 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。 现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位…

阿里云香港轻量应用服务器是什么线路?

阿里云香港轻量应用服务器是什么线路&#xff1f;不是cn2。 阿里云香港轻量服务器是cn2吗&#xff1f;香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器&#xff0c;通过mtr traceroute测试了一下&#xff0c;最后一跳是202.97开头的ip&#xff0c;1…

【深蓝学院】移动机器人运动规划--第5章 最优轨迹生成--笔记

文章目录 1. Preliminaries2. Multicopter dynamics and differential flatness&#xff08;多旋翼动力学和微分平坦特性&#xff09;2.1 Differential Flatness2.2 具体建模2.3 Flatness Transformation的解析推导 3. Trajectory Optimization轨迹优化3.1 Problem formulation…

五步解决 Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法

Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法 参考debian网址https://packages.debian.org/buster/并搜索想要的软件或者工具等&#xff0c;如libc6,有结果如下&#xff1a; 具体就不介绍了&#xff0c;请浏览官网了解。 第一步&#xff1a;添加软件源&#xff0c;在/et…

【BUG】段错误

1. 问题 8核工程&#xff0c;核4在运行了20分钟以上&#xff0c;发生了段错误。 [C66xx_4] A00x53 A10x53 A20x4 A30x167e A40x1600 A50x850e2e A60x845097 A70xbad9f5e0 A80x0 A90x33 A100x53535353 A110x0 A120x0 A130x0 A140x0 A150x0 A160x36312e35 A170x20 A180x844df0 …

Filterajax

1.Filter概念 概念:表示过滤器,是JavaWeb三大组件(Servlet,Filter,Listener)之一;过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能.过滤器可以完成一些通用操作比如:登录添加购物车,视频广告,敏感字符处理等等... 2.Filter快速入门 3.Listener 4.Ajax学习 1.使用场…

成功交易者需要历经多少磨难才能成就辉煌?

前言 王国维在《人间词话》中说&#xff1a;古今之成大事业、大学问者&#xff0c;必经过三种之境界&#xff1a;“昨夜西风凋碧树&#xff0c;独上高楼&#xff0c;望尽天涯路。” 此第一境也。“ 衣带渐宽终不悔&#xff0c;为伊消得人憔悴。” 此第二境也。“众里寻他千百度…

开源模型应用落地-工具使用篇-SLB(二)

一、前言 通过学习"开源模型应用落地"系列文章&#xff0c;我们成功地建立了一个完整可实施的AI交付流程。现在&#xff0c;我们要引入负载均衡&#xff0c;以提高我们的AI服务的性能和故障转移能力。本文将详细介绍如何使用腾讯云的负载均衡技术来将我们的AI服务部署…

archLinux安装记录

archLinux安装记录 基于wsl的arch 启用wsl 首先&#xff0c;按Win S搜索启用或关闭Windows功能&#xff08;Turn Windows features on or off&#xff09;,打开虚拟机平台和WSL&#xff0c;并重启Windows。 重启后&#xff0c;进入Windows设置&#xff0c;检查更新。 更新完…

适用于 Windows 的 12 个最佳 PDF 编辑器

PDF文档的普遍存在按理说&#xff0c;PDF文档的可读性和可移植性受到专业文档的青睐。 然而&#xff0c;PDF格式的可食用性是一大缺陷。幸运的是&#xff0c;各种 PDF 编辑工具和软件使 PDF 的编辑变得更加容易&#xff0c;这篇文章旨在帮助我们的读者找到其中最好的工具和软件…