当前位置: 首页 > news >正文

使用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)解决方案项目。该项目不仅集成了预训练的高级模型&#xff0c…...

关于Docker alpine

1.拉取alpine镜像 docker pull alpine 2.运行镜像成为容器 docker run -it --rm alpine sh (--rm标志确保容器在退出时被自动删除。) 3.容器建立后&#xff0c;运行 docker exec -it <container_id> sh 4.进入容器里的 alpine环境 ①.配置安装源 cat >/etc…...

【Elasticsearch运维系列】Elasticsearch7.12.1启动指定版本JDK:你学废了吗?

一、背景 一套生ES集群&#xff0c;版本为7.12.1&#xff0c;近期频繁告警&#xff0c;频繁出现索引分片异常&#xff0c;索引状态异常&#xff0c;导致应用无法正常写入ES&#xff0c;另外&#xff0c;也经常出现节点掉问题。通过分析相关ES日志&#xff0c;显示和当前JAVA G…...

思通数科大模型在智能数据查询系统中的深度应用:销售数据分析的革新

在企业决策支持系统中&#xff0c;销售数据分析占据着举足轻重的地位。思通数科的大模型技术&#xff0c;结合自然语言处理&#xff08;NLP&#xff09;和机器学习&#xff0c;为智能数据查询系统提供了强大的分析能力。本文将详细描述思通数科大模型在销售数据分析中的应用&am…...

上位机图像处理和嵌入式模块部署(树莓派4b和qt应用全屏占有)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们都知道&#xff0c;嵌入式应用一般都是为了某一个特定应用而存在的。也就是说&#xff0c;和pc不同&#xff0c;这个嵌入式板子一般都是为了解…...

QT:QT窗口(一)

文章目录 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项添加分割线 工具栏创建工具栏设置停靠位置创建工具栏的同时指定停靠位置使用QToolBar类提供的setAllowedAreas函数来设置停靠位置 设置浮动属性设置移动属性 状态栏状态栏的创建在状态栏中显示实时消息在状态栏中显示永久…...

matlab例题大全

1.第1章 MATLAB系统环境 1.1 注&#xff1a;plot函数为画图函数。例plot&#xff08;x1,y1,:,x2,y2,*&#xff09;; 1.2 注&#xff1a;root为求根函数。p为方程变量前面系数矩阵。 1.3 注&#xff1a; 2*x3y-1*z 2; 8*x2*y3*z 4; 45*x3*y9*z 23 求&#xff1a;x,y,z的…...

SwiGLU激活函数

SwiGLU激活函数已经成为LLM的标配了。它是GLU的变体&#xff0c;公式如下&#xff1a; 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的慢查询时&#xff0c;通常需要结合多个方面进行分析和优化&#xff0c;包括索引优化、SQL语句重构、数据库结构调整等。下面&#xff0c;我将通过一个例子来说明如何优化MySQL的慢查询&#xff0c;包括多表关联和条件查询。 假设我们有一个简化的电子商务系统…...

开源数据可视化大屏对接表单数据实践!

如果你需要一个表单系统&#xff0c;进行数据收集&#xff1b;可以使用tduck填鸭进行私有化部署&#xff0c;进行表单制作&#xff0c;完成数据收集。 在实际业务中&#xff0c;往往需要将收集的数据进行展示或分析&#xff1b;此时就可以使用表单数据推送到TReport中&#xf…...

08.图形化界面字体问题处理

图形化界面字体问题处理 发现图形存在乱码&#xff0c;不显示文字 zabbix服务器的字符集所在的路径下&#xff1a; /usr/share/zabbix/assets/fonts 将本地windows系统的字体进行上传&#xff0c;选择一个自己喜欢的字体 上传到系统路径下并且直接覆盖掉 回到web浏览器界面…...

【代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II】

代码随想录算法训练营第37期 第二天 | LeetCode977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II 一、977.有序数组的平方 解题代码C&#xff1a; class Solution { public:vector<int> sortedSquares(vector<int>& nums) {int len nums.size();fo…...

Java:Servlet详解

目录 一、什么是Servlet 二、Servlet原理 Servlet的生命周期 三、 Servlet注释 WebServlet 一、什么是Servlet Servlet是JavaWeb开发的一种技术&#xff0c;Servlet程序需要部署在Servlet容器&#xff08;服务端&#xff09;中才能运行&#xff0c;常见的Servlet容器有Tom…...

Oracle存储过程怎么定义类并继承

在Oracle数据库中&#xff0c;存储过程&#xff08;Stored Procedure&#xff09;是用于执行特定功能的预编译的SQL代码块。然而&#xff0c;Oracle的存储过程并不直接支持面向对象的编程概念&#xff0c;如类&#xff08;Class&#xff09;和继承&#xff08;Inheritance&…...

14_Scala面向对象编程_属性

文章目录 属性1.类中属性声明2.系统默认赋值3.BeanProperty4.整体代码如下 属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...