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

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

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

相关文章

Java高阶私房菜:JVM分代收集算法介绍和各垃圾收集器原理分解

目录 什么是分代收集算法 GC的分类和专业术语 什么是垃圾收集器 垃圾收集器的分类及组合 ​编辑 应关注的核心指标 Serial和ParNew收集器原理 Serial收集器 ParNew收集器 Parallel和CMS收集器原理 Parallel 收集器 CMS收集器 新一代垃圾收集器G1和ZGC G1垃圾收集器…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月3日,星期五

每天一分钟,知晓天下事! 2024年5月3日 星期五 农历三月廿五 1、 气象台:我国南方地区3至5日将出现新一轮较强降水,局地有大暴雨。 2、 广东11地市打破4月雨量历史记录:梅州平均雨量为常年3.5倍。 3、 梅大高速路面塌…

Redis学习笔记(基础)

Redis学习笔记(基础) 一、Nosql概述1.1、为什么使用Nosql1.2、什么是Nosql1.3、阿里巴巴演进分析1.4、NoSQL的四大分类 二、 Redis入门2.1、概述2.2、Windows使用Redis2.3、linux安装2.4、redis-benchmark性能测试2.5、Redis基础知识 三、五大数据类型3.…

NIO(非阻塞I/O)和IO(阻塞I/O)详解

文章目录 一、NIO(Non-blocking I/O,非阻塞I/O)1、Channel(通道)与Buffer(缓冲区)1.1、使用ByteBuffer读取文件1.2、ByteBuffer 方法1.2、ByteBuffer 结构1.3、字符串与 ByteBuffer 互转1.4 Sca…

自然语言处理 (NLP) 中的迁移学习

--懂王 在大数据高速发展的时代,AI的发展日新月异,充满挑战的迎接未来。 自然语言处理 (NLP) 中的迁移学习: 迁移学习在 NLP 中越来越受欢迎,特别是在数据稀缺的情况下。如何有效地利用预训练的语言模型,并将其迁移到新的任务和领…

前端框架编译器之模板编译

未经作者允许,禁止转载 编译原理概述 编译原理:是计算机科学的一个分支,研究如何将 高级程序语言 转换为 计算机可执行的目标代码 的技术和理论。 高级程序语言:Python、Java、JavaScript、TypeScript、C、C、Go 等。计算机可执…

微软开源 MS-DOS「GitHub 热点速览」

上周又是被「大模型」霸榜的一周,各种 AI、LLM、ChatGPT、Sora、RAG 的开源项目在 GitHub 上“争相斗艳”。这不 Meta 刚开源 Llama 3 没几天,苹果紧跟着就开源了手机端大模型:CoreNet。 GitHub 地址:github.com/apple/corenet 开…

golang 基础知识细节回顾

之前学习golang的速度过于快,部分内容有点囫囵吞枣的感觉,写gorm过程中有很多违反我常识的地方,我通过复习去修正了我之前认知错误和遗漏的地方。 itoa itoa自增的作用在编辑error code时候作用很大,之前编辑springboot的error c…

idea常用知识点随记

idea常用知识点随记 1. 打开idea隐藏的commit窗口2. idea中拉取Git分支代码3. idea提示代码报错,项目编译没有报错4. idea中实体类自动生成序列号5. idea隐藏当前分支未commit代码6. idea拉取新建分支的方法 1. 打开idea隐藏的commit窗口 idea左上角File→Settings…

前沿科技应用:AIGC技术的广泛渗透

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

基于alpha shapes的边缘点提取(matlab)

1、原理介绍 由Edelsbrunner H提出的alpha shapes算法是一种简单、有效的快速提取边界点算法。其克服了点云边界点形状影响的缺点,可快速准确提取边界点。如下图所示,对于任意形状的平面点云,若一个半径为a的圆,绕其进行滚动&…

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)

LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab) 目录 LSTM-KDE的长短期记忆神经网络结合核密度估计多变量回归区间预测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.LSTM-KDE的长短期…

Flutter笔记:Widgets Easier组件库(5)使用加减器

Flutter笔记 Widgets Easier组件库(5):使用加减器 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…

机器学习:深入解析SVM的核心概念【三、核函数】

核函数 **问题一:为什么说是有限维就一定存在高维空间可分呢?**原始空间与特征空间为什么映射到高维空间可以实现可分核函数的作用 **问题二:最终怎么得到函数**从对偶问题到决策函数的步骤:结论 **问题三:为什么说特征…

nginx--第三方模块安装上传下载服务

第三方模块安装 准备 cd /usr/local/src/ yum install git -y git clone https://github.com/openresty/echo-nginx-module.git cd nginx-1.24.0 yum -y install perl-devel perl-ExtUtils-Embed zlib-devel gcc-c libtool openssl openssl-devel 编译安装 ./configure \--p…

ZooKeeper知识点总结及分布式锁实现

最初接触ZooKeeper是之前的一个公司的微服务项目中,涉及到Dubbo和ZooKeeper,ZooKeeper作为微服务的注册和配置中心。好了,开始介绍ZooKeeper了。 目录 1.ZooKeeper的基本概念 2.ZooKeeper的节点(ZNode) 3. ZooKeep…

机器学习之基于Tensorflow(LSTM)进行多变量时间序列预测股价

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介:机器学习之基于TensorFlow(LSTM)进行多变量时间序列预测股价 一、项目…

Python量化炒股的获取数据函数—get_fundamentals_continuously()

Python量化炒股的获取数据函数—get_fundamentals_continuously() get_fundamentals()函数只能用于查询某一交易日的股票财务数据信息,如果要查询多个交易日的股票财务数据信息,就要使用get_fundamentals_continuously()函数,语法格式如下&a…

Django数据库创建存储及管理

一、什么是ORM Django的ORM(Object-Relational Mapping)是Django框架中一个非常重要的组件。ORM可以让开发者以面向对象的方式操作数据库,而不需要直接编写SQL语句。 具体来说,Django ORM提供了以下功能: 模型定义:开发者可以在Django应用中定义Python类来表示数据库表,这些…

tensorflow报错

参考 TensorFlow binary is optimized to use available CPU instructions in performance-critical operations._this tensorflow binary is optimized to use availab-CSDN博客 解决Python中cuBLAS插件无法注册问题_unable to register cudnn factory: attempting to re-CS…