使用Android Studio 搭建AOSP FrameWork 源码阅读开发环境

news2024/11/25 16:56:25

文章目录

  • 概述
  • 安装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的进程就可以看手机上的状态栏变成了红色的背景
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习笔记-18

异常检测问题 异常检测虽然主要用于无监督学习问题上,但是和监督学习问题很相似。 异常检测(Anomaly Detection):给定正确样本集{ x ( 1 ) , x ( 2 ) . . . x ( n ) x^{(1)},x^{(2)}...x^{(n)} x(1),x(2)...x(n)},记新样本即要检测的样本为…

堆排序以及TOP-K问题

片头 嗨!小伙伴们,大家好!今天我们来深入理解堆这种数据结构,分析一下堆排序以及TOP-K问题,准备好了吗?我要开始咯! 一、堆排序 这里我们先假设要排成升序,也就是从左到右&#xf…

JSP简介——[JSP]1

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

基于php+mysql+html图书管理系统(含实训报告)

博主介绍: 大家好,本人精通Java、Python、Php、C#、C、C编程语言,同时也熟练掌握微信小程序、Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

【C++】命名冲突了怎么办?命名空间来解决你的烦恼!!!C++不同于C的命名方式——带你认识C++的命名空间

命名空间 导读一、什么是C?二、C的发展三、命名空间3.1 C语言中的重名冲突3.2 什么是命名空间?3.3 命名空间的定义3.4 命名空间的使用环境3.5 ::——作用域限定符3.6 命名空间的使用方法3.6.1 通过作用域限定符来指定作用域3.6.2 通过关键字using和关键字namespace…

如何用 Redis 实现延迟队列?

延迟队列是一种常见的消息队列模式,用于处理需要延迟执行的任务或消息。Redis 是一种快速、开源的键值对存储数据库,具有高性能、持久性和丰富的数据结构,因此很适合用于实现延迟队列。在这篇文章中,我们将详细讨论如何使用 Redis…

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么?二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示:这里可以添加本文要记录的大概内容: 课程需要: 提示&#x…

Mysql基础(四)DML之insert语句

一 insert 语句 强调: 本文介绍的内容很基础,仅做记录用,参考价值较少 ① 总述 目的: 增加rows记录1、完整格式insert [into] 表名[字段名1[, 字段名2]] value[s](值1, 值2);备注:指定部分字段添加,没有被指定的字段要么会自动增长,要…

微信小程序demo-----制作文章专栏

前言:不管我们要做什么种类的小程序都涉及到宣传或者扩展其他业务,我们就可以制作一个文章专栏的页面,实现点击一个专栏跳转到相应的页面,页面可以有科普类的知识或者其他,然后页面下方可以自由发挥,添加联…

ensp 配置s5700 ssh登陆

#核心配置 sys undo info-center enable sysname sw1 vlan 99 stelnet server enable telnet server enable int g 0/0/1 port lin acc port de vlan 99 q user-interface vty 0 4 protocol inbound ssh authentication-mode aaa q aaa local-user admin0 password cipher adm…

结构分析的有限元法及matlab实现(徐荣桥)|【PDF教材+配套案例Matlab源码】

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

为何数据库推荐将IPv4地址存储为32位整数而非字符串?

目录 一、IPv4地址在数据库中的存储方式? 二、IPv4地址的存储方式比较 (一)字符串存储 vs 整数存储 (二)IPv4地址"192.168.1.8"说明 三、数据库推荐32位整数存储方式原理 四、存储方式对系统性能的影响…

服务器IP选择

可以去https://ip.ping0.cc/查看IP的具体情况 1.IP位置--如果是国内用,国外服务器的话建议选择日本,香港这些比较好,因为它们离这里近,一般延时低(在没有绕一圈的情况下)。 不过GPT的话屏蔽了香港IP 2. 企…

C++ | Leetcode C++题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution { public:int minPathSum(vector<vector<int>>& grid) {if (grid.size() 0 || grid[0].size() 0) {return 0;}int rows grid.size(), columns grid[0].size();auto dp vector < vector <int>…

WebAuthn 无密码身份认证

文章目录 WebAuthn简介工作原理组成部分架构实现注册认证应用场景案例演示 WebAuthn简介 WebAuthn&#xff0c;全称 Web Authentication&#xff0c;是由 FIDO 联盟&#xff08;Fast IDentity Online Alliance&#xff09;和 W3C&#xff08;World Wide Web Consortium&#x…

【跟马少平老师学AI】-【神经网络是怎么实现的】(八)循环神经网络

一句话归纳&#xff1a; 1&#xff09;词向量与句子向量的循环神经网络&#xff1a; x(i)为词向量。h(i)为含前i个词信息的向量。h(t)为句向量。 2&#xff09;循环神经网络的局部。 每个子网络都是标准的全连接神经网络。 3&#xff09;对句向量增加全连接层和激活函数。 每个…

【Web】CTFSHOW 新手杯 题解

目录 easy_eval 剪刀石头布 baby_pickle repairman easy_eval 用script标签来绕过 剪刀石头布 需要赢100轮&#x1f914; 右键查看源码拿到提示 一眼session反序列化 打PHP_SESSION_UPLOAD_PROGRESS 脚本 import requestsp1 a|O:4:"Game":1:{s:3:"log…

如何将 redis 快速部署为 docker 容器?

部署 Redis 作为 Docker 容器是一种快速、灵活且可重复使用的方式&#xff0c;特别适合开发、测试和部署环境。本文将详细介绍如何将 Redis 部署为 Docker 容器&#xff0c;包括 Docker 安装、Redis 容器配置、数据持久化、网络设置等方面。 步骤 1&#xff1a;安装 Docker 首…

NI CRIO 9045 LABVIEW2020

1.labview工程如果要访问CRIO&#xff0c;需要设置以下&#xff0c;否则在项目中连接失败。 2.项目中如果要传文件&#xff0c;需要安装WebDEV 3.使用WebDAV将文件传输到实时(RT)目标 https://knowledge.ni.com/KnowledgeArticleDetails?idkA03q000000YGytCAG&lzh-CN

34.Docker基本操作

镜像相关的命令 镜像名称分为两部分组成&#xff1a;[repository]:[tag],tag就是镜像的版本。如果tag没有指定默认就是latest,表示最新版本的镜像。 查看docker命令的帮助信息 docker --help 具体某条命令的帮助信息 docker images --help 案例一&#xff1a;从DockerHub中…