【AOSP】手把手教你编译和调试AOSP源码

news2024/11/20 0:41:23

一、下载AOSP源码

在开始之前,我们先安装编译AOSP需要的一些系统基本依赖,如下命令

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

基于 AOSP 的开发推荐在 Ubuntu 20.04 LTS 下进行,因此你电脑最优选择是 Ubuntu 系统。如果不选择 Ubuntu 系统,也可以使用 DeepinDebian 等环境相似的系统。假设你对AOSP 有一定的了解,但还没有真正实践,这篇文章很适合你。

如果你电脑没有repo工具需要先安装 repo 工具,命令如下

mkdir ~/bin
# 使用tuna镜像下载repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo
# 以下这条命令可以添加到 `~/.bashrc` 文件中
export PATH=~/bin:$PATH

假设电脑已经包含了git工具,接下来需要同步源代码,命令如下

mkdir aosp 
cd asop
# 初始化repo,指定源码分支为 `android-10.0.0_r41`
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r41
# 同步远程代码
repo sync

同步源码的耗时较长,耐心等待即可。源码同步完成后,即可进行第二步以后的操作。

二、编译SDK

初始化 AOSP 编译环境与选择 SDK 作为编译目标

# 初始化环境
source build/envsetup.sh
# 选择编译目标
lunch sdk-eng

终端输出信息如下

pan@pan-PC:~/Android/aosp/android13$ lunch sdk-eng

============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
TARGET_PRODUCT=sdk
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=x86
TARGET_ARCH_VARIANT=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.15.77-amd64-desktop-x86_64-Deepin-20.9
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MASTER
OUT_DIR=out
===========================================

编译sdk

make sdk

最后生成的sdk目录在 out/host/linux-x86/sdk/sdk/android-sdk_eng.{$USER}_linux-x86 下,用于 AOSP 的后续开发和调试。

三、编译AOSP并启动模拟器

初始化 AOSP 编译的目标运行设备,这里我们选择 aosp_x86_64-eng

lunch aosp_x86_64-eng

编译

# 使用 make 数值 的命令进行指定线程数编译,也可以使用 m 命令自动选择最大线程数
make -j$(nproc)

编译完成之后,使用如下命令启动模拟器

emulator

四、使用ASFP打开AOSP的子模块

我们先介绍 ASFP,它是 Android Studio for Platform 的简称,谷歌官方提供了该工具,可以方便的进行基于 AOSP 的开发。如果你电脑上还没有安装 ASFP,可以到 https://developer.android.google.cn/studio/platform?hl=en 下载安装。

这里我们要打开 Setting (系统设置APP)源代码并进行调试,步骤如下:

  • 首页点击:Import Asfp Project

  • 填写项目信息

项目关键信息如下图红标部分
在这里插入图片描述

配置完成之后,点击 Finish 打开到代码编辑器窗口。

  • 配置SDK

(1)打开 Project Struct -> Platform Settings -> SDKs -> + -> Add Android SDK:添加 Android SDK,选择 out/host/linux-x86/sdk/sdk/android-sdk_eng.{$USER}_linux-x86,添加后可重命名为 aosp10-sdk,点击 Apply

(2)打开左侧的Project,配置SDK,选择刚才添加的SDK。

(3)Project Settings -> Modules,确保 Settings 模块已经使用了上述配置的SDK。这个时候项目就配置好了。

五、调试代码

回到代码主编辑器窗口后,首先找到关键的代码打断点,然后点击 Attach Debugger to Android Process 按钮连接到模拟器,就可以看到代码的调试效果了。如下图:
在这里插入图片描述

在上图中,我打断点的位置是Settings 模块的 SettingsHomepageActivity 类的 onCreate 方法。该方法在启动系统设置时被调用,用来初始化界面。

点击 OK 后,我们需要在虚拟机上手动打开系统设置,然后就可以进行调试了。效果如下图:
在这里插入图片描述

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

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

相关文章

三子棋游戏----C语言版【超级详细 + 视频演示 + 完整源码】

㊙️小明博客主页:➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、三子棋的实现思路二、三子棋的实现步骤2.1 先显示游戏的菜单2.2 游戏的具体实现2.2.1 棋盘的初始化2.2.2 展示棋盘2.2.3 下棋🔴玩家下棋🔴电脑下棋2.2…

OpenHarmony开发-系统烧录

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手,详细说明了如何配置开发环境、构建系统镜像等过程,详细描述了烧录过程中的关键步骤,以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…

【Rust】环境搭建

Rust 支持很多的集成开发环境(IDE)或开发专用的文本编辑器。 官方网站公布支持的工具如下(工具 - Rust 程序设计语言) 本课程将使用 Visual Studio Code 作为我们的开发环境(Eclipse 有专用于 Rust 开发的版本&#…

vue使用iview导航栏Menu activeName不生效

activeName不生效 一、问题一、解决方案, 一、问题 根据ivew官网的提示,设置了active-name和open-names以后,发现不管是设置静态是数据还是设置动态的数据,都不生效 一、解决方案, 在设置动态名称的时候&#xff0c…

docker笔记(一):安装、常用命令

一、docker概述 1.1docker为什么会出现 各种环境配置十分繁琐,每一个机器都需要配置环境,难免出现各种问题。 发布一个项目jar需要配置(MySQL、redis、jdk、…),项目不能都带上环境安装打包: 传统&…

Redis实战篇-集群环境下的并发问题

实战篇Redis 3.7 集群环境下的并发问题 通过加锁可以解决在单机情况下的一人一单安全问题,但是在集群模式下就不行了。 1、我们将服务启动两份,端口分别为8081和8082: 2、然后修改nginx的conf目录下的nginx.conf文件,配置反向代…

前端:注册页面(后端php实现)

效果 代码 Regist.php <!-- 内部员工注册 --> <?php require_once get_db_conn.php; $conn db_connect();?> <?php //设置变量的默认值 if (!isset($_POST[UserID])) {$_POST[UserID] ; } if (!isset($_POST[Password])) {$_POST[Password] ; } if (!i…

数据字典

文章目录 一、需求分析二、表设计&#xff08;两张表&#xff09;三、功能实现3.1 数据字典功能3.1.1 列表功能3.1.2 新增数据字典3.1.3 编辑数据字典 3.2 数据字典明细3.2.1 列表功能3.2.2 新增字典明细3.2.3 编辑字典明细 3.3 客户管理功能3.3.1 列表功能3.3.2 新增用户3.3.3…

【最新可用】Claude国内镜像,可上传图片,可用Claude3全系模型(包括Pro版本的Opus)!亲测比GPT好用!

亲测可用&#xff0c;镜像地址&#xff1a;Claude 3 镜像 使用方法 访问镜像&#xff1a;Claude 3 镜像 2. 点击设置&#xff0c;配置授权码&#xff0c;关闭设置。这里免费赠送一个体验版的授权码 sk-SZcJyvx3RXRID624E2D3795578Df44C7Af03F2909a8f5eA0 即可发起对话啦&…

总包不足80w的高龄Android程序员,被面试官diss混得太差,网友狂吐槽……

有网友直言&#xff1a;90%的人一辈子一年也拿不到80万 有网友分析到&#xff1a;看面试情况&#xff0c;没什么希望就直接其实我觉得30岁年薪低于1000万的都是loser&#xff0c;你我都是 有网友说&#xff1a;这几年互联网行业极大发展&#xff0c;让互联网行业成为了明星行…

Python-VBA编程500例-033(入门级)

角色定位(Role Positioning)在编程中的实际应用场景主要体现在以下几个方面&#xff1a; 1、权限管理&#xff1a;在开发企业级应用或复杂的系统时&#xff0c;角色定位用于定义和管理用户的权限。例如&#xff0c;一个系统可能有管理员、普通用户、访客等不同角色&#xff0c…

CSS设置字体样式

目录 前言&#xff1a; 1.font-family&#xff1a; 2.font-style&#xff1a; 3.font-weight&#xff1a; 4.font-size&#xff1a; 5.font-variant&#xff1a; 6.font&#xff1a; 前言&#xff1a; 在网页中字体是重要的组成部分&#xff0c;使用好字体可以让网页更…

手动实现Tomcat底层机制+自己设计Servlet

文章目录 1.Tomcat整体架构分析自己理解 2.第一阶段1.实现功能2.代码1.TomcatV1.java 3.调试阶段1.阻塞在readLine导致无法返回结果 4.结果演示 3.第二阶段1.实现功能2.代码1.RequestHander.java2.TomcatV2.java 3.调试阶段1.发现每次按回车会接受到两次请求 4.结果演示 4.第三…

基于Spring Boot的简历系统设计与开发

基于Spring Boot的简历系统设计与开发 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 部分系统展示 前台首页界面 简历模板管理界面 用户管理界面 管理员登录界…

C++设计模式:策略模式(二)

1、定义与动机 定义一系列算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可互相替换&#xff08;变化&#xff09;&#xff0c;该模式使得算法可独立于使用它的客户程序&#xff08;稳定&#xff09;而变化&#xff08;扩展&#xff0c;子类化&#xff09; 在软…

pinia 的介绍和使用

pinia是vue2,vue2 尤其是vue3官方推荐的状态管理器&#xff0c;和vuex类似&#xff0c;但使用起来更为简单&#xff0c; 概念&#xff1a; state:定义响应式共享变量 getter&#xff1a;相当于计算属性 actions&#xff1a;相当于方法 npm安装 npm install pinia创建pinia ,注…

【Python】常见容器

Python容器 列表元组字符串集合字典 列表 定义方法&#xff1a;[元素1, 元素2, …] 列表一次可以存储多个不同数据类型的数据&#xff0c;支持嵌套。 例如&#xff1a; list1 ["张三", 33, True] print(list1) print(type(list1))list2 [list, "李四", …

企业数据资产评估的财报显性化及数据资产入表的主要应用场景

一、背景 近年来&#xff0c;企业“数据资产”的概念不断受政府/企业重视和建设.根据《数据资产评估指导意见》规定&#xff0c;数据资产评估是指资产评估机构及其资产评估专业人员遵守法律、行政法规和资产评估准则&#xff0c;根据委托对评估基准日特定目的下的数据资产价值…

Halcon的HWindowControl控件在C#WinForm中的使用介绍(包括绘制ROI)

Halcon的HSmartWindowControl控件在C#WinForm中的使用介绍&#xff08;包括绘制ROI&#xff09; 文章目录 Halcon的HSmartWindowControl控件在C#WinForm中的使用介绍&#xff08;包括绘制ROI&#xff09;一、 引入hSmartWindowControl控件二、 编写打开图像功能三、 编写绘制RO…

【热门话题】Stable Diffusion:本地部署教程

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Stable Diffusion&#xff1a;本地部署教程一、引言二、环境准备1. 硬件配置2. …