使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境
文章目录
- 概述
- 安装Android Studio
- 编译源码
- 使用Android Studio打开源码
- 制作ipr文件
- 直接编译成功后自动打开Android Studio
- 修改SystemUI验证开发环境
概述
我们都知道Android的系统源码量非常之大,大致有frameworka层源码,硬件层(HAL)源码,内核层(Kernel)源码,之前了解到大佬看源码都是使用Source Insight,所以我也去学着使用Source Insight 看android的源码,但是作为一个六年的android应用开发来说,Android Studio的使用已经深入骨髓,再去联系使用Source Insight非常不适应。那能不能使用Android Studio去看源码呢?当然可以呀,只是需要我们加工一下源码而已,做Android的AOSP开发推荐使用Ubantu系统,编译源码方便。本文就是介绍如何加工源码,然后使用Android Studio打开我们加工好的源码,并能在源码中通过点击方法名,类名等跳转到指定的定义。
安装Android Studio
首先我们需要安装Android Studio,这里是指在Ubantu的环境中安装Android Studio,前面的文章中介绍过通过安装Toolbox去获取安装Android Studio,安装完后我们需要安装好对应的Android SDK,然后需要记住我们的Android Studio的安装位置后面用得上
Toolbox的界面如下所示:

编译源码
当我们下载好源码后可以对源码进行一次整体编译,源码下载和编译的方法可以在网上找,特别多,这里就不赘述佬,编译成功后就可以开始制作对应的索引文件了,这里可以用两种方式来,一种是代码编译通过后,通过命令生成ipr索引文件,然后再使用Android Studio打开,这种方式很适合我们使用移动硬盘将源码拷贝,然后在其他的机器上阅读源码,第二种方式是直接通过命令编译完源码后直接打开Android Studio,直接阅读源码,这里要求在本机中安装Android Studio,并且源码只能使用本机的Android Studio打开,下面就介绍如何使用Android 打开导入源码。
使用Android Studio打开源码
制作ipr文件
首先在源码的根目录下执行分别执行下面的命令
source build/envsetup.sh
mmm development/tools/idegen/
development/tools/idegen/idegen.sh
执行完上面的命令后会在源码的根目录下生成一个android.ipr文件,下图中红圈圈住的文件,我们使用Android Studio打开这个文件就行了,然后我们就能看到framework的源码了,对于Android的应用开发者和FrameWork开发者来说这里就够用了,当然,如果是HAL和内核的开发者还是老实使用Source insight吧。
注意:如果需要将源码拷贝到移动硬盘,需要注意不能只拷贝android.ipr文件,需要将整个源码目录都拷贝进去,因为android.ipr文件只是一个索引文件,只拷贝它是无法浏览源码滴

通过Android Studio找到ipr文件并打开

等进度条走完就能开心的阅读修改源码了

直接编译成功后自动打开Android Studio
这种方法比较简单也比较推荐,如果不打包源码带走的话,直接在源码的根路径运行下面的命令
aidegen -i s -p /home/zhongxj/android-studio
如果要只想打开某个模块,比如SystemUI,直接使用命令:
aidegen SystemUI -i s -p /home/zhongxj/android-studio
这个命令表示编译完整的依赖 -i s代表通过Android Studio打开依赖,-p表示Android Studio的路径,如果加 -s表示跳过编译依赖,这个命令执行完后就会自动打开Android Studio。

这里读者可能看到橙色的文件夹不太舒服,没关系咱们直接通过配置给去掉就好了,进入Project Structure
比如上图中我们要去掉system 的橙色标志,我们可以看到选中system文件夹后,在右上角有个Excluded的图标是选中的,我们点击一下他,就可以去掉这个橙色的图标了

再看system文件夹就是正常的颜色了,在Project Structure 还必须配置好SDK ,这里就不展示了,交给读者,就像开发应用的时候配置SDK一样就行。很简单
修改SystemUI验证开发环境
首先我们使用下面的命令编译SystemUI并且使用Android Studio打开
aidegen SystemUI -i s -p /home/zhongxj/android-studio
编译完打开Android Studio时可能会看到一堆爆红,如下所示
不要慌,我们添加配置就可以了,进入Project Structure ,找到Modules,在SystemUI上点击右键,在弹出的窗口中点击“+”号,点击Android,如下图所示,并且配置好SDK,如下图所示
完成后就可以看到我们的XML布局文件不爆红了,而且还能预览了
这时我们修改下对应的布局文件,比如把系统状态栏背景改成红色,找到status_bar.xml,并将其颜色改成红色,如下图所示
然后编译SystemUI
make SystemUI -j3
编译完成后会得到一个SystemUI.apk,这个APK的路径会在编译的日志中看到,如下图所示

得到APK后就可以找对应的手机或者模拟器,将SystemUI.apk推入手机替换掉原来的SystemUI.apk看效果,这里需要注意手机必须能够root,并且能够remount,这样才能替换SystemUI.apk,替换完后使用kill命令杀下SystemUI的进程就可以看手机上的状态栏变成了红色的背景

相关文章:
使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境
文章目录 概述安装Android Studio编译源码使用Android Studio打开源码制作ipr文件直接编译成功后自动打开Android Studio 修改SystemUI验证开发环境 概述 我们都知道Android的系统源码量非常之大,大致有frameworka层源码,硬件层(HAL)源码,内…...
区块链 | IPFS:CID
🦊原文:Anatomy of a CID 🦊写在前面:本文属于搬运博客,自己留存学习。 1 CID 在分布式网络中与其他节点交换数据时,我们依赖于内容寻址(而不是中心化网络的位置寻址)来安全地定位…...
PostgreSQL(十二)报错:Tried to send an out-of-range integer as a 2-byte value: 51000
目录 一、报错场景二、源码分析三、实际原因(更加复杂)四、解决思路 一、报错场景 今天写了一个历史数据处理程序,在开发环境、测试环境都可以正常执行,但是放到生产环境上就不行,报了一个这样的错误: or…...
Linux守护进程
进程组和会话在 UNIX 系统中是非常重要的概念,特别是在进行作业控制和终端会话管理时。下面是关于进程组和会话的详细解释: 进程组(Process Group) 定义与作用: 进程组是一个或多个进程的集合,这些进程通常…...
HarmonyOS 应用开发——入门
首先当然是华为的官方文档了,要认真学习: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-overview-0000001478061421-V2 不想花时间看,可以看我下面总结的干货,哈哈 第一个问题:stage架构和fa架构的区…...
开源免费的发票识别OCR应用:Invoice
Invoice:轻松识别,发票电子化扫描烦恼消- 精选真开源,释放新价值。 概览 Invoice 是github社区上一个采用开源许可协议发布的增值税发票光学字符识别(OCR)解决方案项目。该项目不仅集成了预训练的高级模型,…...
关于Docker alpine
1.拉取alpine镜像 docker pull alpine 2.运行镜像成为容器 docker run -it --rm alpine sh (--rm标志确保容器在退出时被自动删除。) 3.容器建立后,运行 docker exec -it <container_id> sh 4.进入容器里的 alpine环境 ①.配置安装源 cat >/etc…...
【Elasticsearch运维系列】Elasticsearch7.12.1启动指定版本JDK:你学废了吗?
一、背景 一套生ES集群,版本为7.12.1,近期频繁告警,频繁出现索引分片异常,索引状态异常,导致应用无法正常写入ES,另外,也经常出现节点掉问题。通过分析相关ES日志,显示和当前JAVA G…...
思通数科大模型在智能数据查询系统中的深度应用:销售数据分析的革新
在企业决策支持系统中,销售数据分析占据着举足轻重的地位。思通数科的大模型技术,结合自然语言处理(NLP)和机器学习,为智能数据查询系统提供了强大的分析能力。本文将详细描述思通数科大模型在销售数据分析中的应用&am…...
上位机图像处理和嵌入式模块部署(树莓派4b和qt应用全屏占有)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 我们都知道,嵌入式应用一般都是为了某一个特定应用而存在的。也就是说,和pc不同,这个嵌入式板子一般都是为了解…...
QT:QT窗口(一)
文章目录 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项添加分割线 工具栏创建工具栏设置停靠位置创建工具栏的同时指定停靠位置使用QToolBar类提供的setAllowedAreas函数来设置停靠位置 设置浮动属性设置移动属性 状态栏状态栏的创建在状态栏中显示实时消息在状态栏中显示永久…...
matlab例题大全
1.第1章 MATLAB系统环境 1.1 注:plot函数为画图函数。例plot(x1,y1,:,x2,y2,*); 1.2 注:root为求根函数。p为方程变量前面系数矩阵。 1.3 注: 2*x3y-1*z 2; 8*x2*y3*z 4; 45*x3*y9*z 23 求:x,y,z的…...
SwiGLU激活函数
SwiGLU激活函数已经成为LLM的标配了。它是GLU的变体,公式如下: SwiGLU ( x , W , V , b , c , β ) Swish β ( x W b ) ⊗ ( x V c ) \operatorname{SwiGLU}(x, W, V, b, c, \beta)\operatorname{Swish}_\beta(x Wb) \otimes(x Vc) SwiGLU(x,…...
MySQL慢查询优化
当需要优化MySQL的慢查询时,通常需要结合多个方面进行分析和优化,包括索引优化、SQL语句重构、数据库结构调整等。下面,我将通过一个例子来说明如何优化MySQL的慢查询,包括多表关联和条件查询。 假设我们有一个简化的电子商务系统…...
开源数据可视化大屏对接表单数据实践!
如果你需要一个表单系统,进行数据收集;可以使用tduck填鸭进行私有化部署,进行表单制作,完成数据收集。 在实际业务中,往往需要将收集的数据进行展示或分析;此时就可以使用表单数据推送到TReport中…...
08.图形化界面字体问题处理
图形化界面字体问题处理 发现图形存在乱码,不显示文字 zabbix服务器的字符集所在的路径下: /usr/share/zabbix/assets/fonts 将本地windows系统的字体进行上传,选择一个自己喜欢的字体 上传到系统路径下并且直接覆盖掉 回到web浏览器界面…...
【代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II】
代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II 一、977.有序数组的平方 解题代码C: class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int len nums.size();fo…...
Java:Servlet详解
目录 一、什么是Servlet 二、Servlet原理 Servlet的生命周期 三、 Servlet注释 WebServlet 一、什么是Servlet Servlet是JavaWeb开发的一种技术,Servlet程序需要部署在Servlet容器(服务端)中才能运行,常见的Servlet容器有Tom…...
Oracle存储过程怎么定义类并继承
在Oracle数据库中,存储过程(Stored Procedure)是用于执行特定功能的预编译的SQL代码块。然而,Oracle的存储过程并不直接支持面向对象的编程概念,如类(Class)和继承(Inheritance&…...
14_Scala面向对象编程_属性
文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值,为了解决此问题可以采…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
