AOSP源码下载编译

news/2025/3/26 20:02:38/文章来源:https://www.cnblogs.com/jokershow/p/18790700

环境:
Android13源码下载和构建之后会占用接近300G空间,构建多个版本会占用更多,
16GB及以上内存,32GB及以上swap空间,否则编译初期容易OOM,导致终端闪退

ArchLinux: 6.2.13-arch1-1 (64-bit)
JAVA:openjdk version "9"
PYTHON: Python 3.11.5
----------
i5双核
16G内存
32GB的Swap空间
1T硬盘

注意:若需要编译源码刷机,需要先确定要刷的手机支持的aosp版本,参考
aosp下载、编译、刷机和单编framework(android 12)

android-10.0.0_r47之下载、编译、运行

已不建议直接下载压缩包,建议直接使用repo更新,原因是多数系统python已被升级成了python3,python2被完全移除。而清华镜像压缩包里面的repo还是python2时候创建的,会引起各种初始化异常

1. 下载初始化包,约60G:https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
2. 解压预下载包,解压出aosp目录,只有隐藏文件夹.repo
tar xf aosp-latest.tar

  1. 创建目录,初始化仓库
    查看android版本号
mkdir aosp
cd aosp
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r47
  1. 指定版本,同步代码
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r47
repo sync

若失败则重新执行,sync支持断点

 repo sync --fail-fast

也可以用脚本执行同步

touch repo.sh   
vim repo.sh 
chmod a+x repo.sh  
./repo.sh

脚本:

    #!/bin/bashrepo sync -j4while [ $? -ne 0 ]doecho "======sync failed ,re-sync again======"sleep 3repo sync -j4done
  1. 查看分支,获取同步版本名
cd .repo/manifests 
git branch -a
  1. 在aosp目录选择需要同步的版本
cd ~/aosp
repo init -b android-10.0.0_r47 
repo sync -c # 只同步当前分支,得到完整目录
repo start android-10.0.0_r47_dev --all # 创建分支用于开发
  1. 初始化编译环境

注意 若也是编译android10,为了编译顺利,建议线去看AOSP编译问题,提前做好设置

source build/envsetup.sh
  1. 删除上一次编译的结果,初次编译可以不需要这一步
make clobber
  1. 根据列表,选择与设备对应的编译版本
    编译Android13时,要需要用模拟器运行,要使用
    lunch sdk_x86_64-userdebug,否则不会生成userdata-qemu.img,无法启动模拟器

    lunch列表中没有 sdk_x86_64-userdebug
# lunch sdk_x86_64-userdebug # android13
lunch aosp_x86_64-eng # android10 可用此命令
  1. 开始编译,编译需要十几个小时
make
  1. 模拟器运行
emulator
  1. 关闭模拟器
pkill qemu #关闭模拟器
  1. 若需要重新编译system.img

Android比较重要的三个img文件:

    make systemimage #system.imgmake userdataimage #userdata.imgmake ramdisk #ramdisk.imgmake snod #快速打包system.img (with this command, it will build a new system.img very quickly. well, you cannot use “make snod” for all the situations. it would not check the dependences. if you change some code in the framework which will effect other applications)
#source build/envsetup.sh
#lunch 对应的编译版本
make systemimage
  1. 重新编译某个模块
mmm  frameworks/base/services

若提示no such file or directory: frameworks/base/services,用下面命令

cd frameworks/base/services
mmm .
  1. 编译SDK
    注意: 每次执行make命令,都会先清空out目录,所以先备份一下之前make处来的out目录下的文件,再make sdk

直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android。

# 重新拉取生成SDK的一些工具
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -g all,-notdefault,tools
repo sync
source build/envsetup.shlunch sdk_x86_64-eng
# or
#lunch sdk_x86_64-userdebug
# or
#lunch sdk_x86_64-usermake sdk

下载AOSP源码编译、调试、刷机
AOSP 源码整编单编
Android源码编译SDK

内核源码

选择版本,goldfish是虚拟机使用

$ git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
# $ git clone https://android.googlesource.com/kernel/goldfish.git  #太慢# goldfish 项目包含适用于所模拟的平台的内核源代码。
# msm 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作使用 Qualcomm MSM 芯片组的起点。
# omap 项目用于 PandaBoard 和 Galaxy Nexus,可用作使用 TI OMAP 芯片组的起点。
# samsung 项目用于 Nexus S,可用作使用 Samsung Hummingbird 芯片组的起点。
# tegra 项目用于 Xoom、Nexus 7 (2012)、Nexus 9,可用作使用 NVIDIA Tegra 芯片组的起点。
# exynos 项目包含适用于 Nexus 10 的内核源代码,可用作使用 Samsung Exynos 芯片组的起点。
# x86_64 项目包含适用于 Nexus Player 的内核源代码,可用作使用 Intel x86_64 芯片组的起点。
# hikey-linaro 项目用于 HiKey 参考板,可用作使用 HiSilicon 620 芯片组的起点。$ git branch -a # 查看分支
# 切换对应分支
$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29

编译报错

AOSP编译问题

AIDEGen + Android Studio 查看和修改系统源码

去 google 官方下载 Android Studio,并将其放到 /opt 目录下。

接下来,选择我们的目标 Product:

source build/envsetup.sh
lunch aosp_x86_64-eng

做好以上准备工作后,我们就可以打开系统模块了,这里我们以 Settings 为例:
Settings 更换为其他模块名或是模块存在的路径即可打开其他模块

aidegen Settings -i s -s # -i 表示使用ide,s 表示 Android Studio ,-s 表示跳过编译

Android 系统开发工具推荐
使用 AIDEGen 将 AOSP 项目导入 Android Studio

切换manifest分支,即android版本分支

当前分支为android-5.1.1_r15,需要切换为android-5.1.1_r26 (仍然使用中科大的镜像源)

cd .repo/manifests 
git branch -a | grep android- | cut -d / -f 3
git branch -a | cut -d / -f 3 # 获取分支名repo init -b android-5.1.1_r26
repo sync -c

一篇通俗易懂的repo教程
repo 操作命令

切换源

修改aosp/.repo/manifests.git/config文件下面位置

[remote "origin"]# 清华地址#url = http://aosp.tuna.tsinghua.edu.cn/platform/manifest# 科大地址url = git://mirrors.ustc.edu.cn/aosp/platform/manifest fetch = +refs/heads/*:refs/remotes/origin/*
[manifest]

Cuttlefish:新一代云端 Android 模拟器

运行前,要安装CuttleFish所需的依赖,Arch linux使用 yay -S cuttlefish-user-git 来安装即可。
下载镜像运行
编译AOSP运行

其他

使用Android Studio导入AOSP源码的奇技淫巧

Android 镜像使用帮助

repo和Git的关系

repo的实际使用

Android init启动流程初识(基于Android10源码分析)

SystemServer启动解析

优化

Android Profiler(一)CPU Profiler

Android Profiler(二)Memory Profiler

Android Profiler之CPU

Shallow Size和Retained Size详解

LeakCanary 与内存泄漏定位

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

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

相关文章

图像信号处理平台设计原理图:721-基于VU9P的32+8路光纤交换板卡硬件设计

基于TSI721的 PCIe转RapidIO高速数据传输卡 一、板卡概述本卡是基于IDT TSI721桥芯片,用于实现Serial RapidIO(S-RIO) Gen2.1到PCI Express (PCIE) Gen2.1协议转换,将基于RapidIO的对等网络多重处理器集群拓展至x86处理器环境,能够实现基于RapidIO的对等网络多重处理器集群和…

Vue3 路由, Vue router (Part2)

Vue 路由 Vue routerpath: name: component: redirect: children: meta:在Web开发中,特别是在使用Vue.js这类现代前端框架时,经常会涉及到路由和组件的组织方式。你提到的路径(path)、名称(name)、组件(component)、重定向(redirect)、子路由(children)和元信息(m…

浏览器 + AI 插件

浏览器添加 AI 插件,就是给浏览器安装振翅高飞的翅膀。前情概要 我是浏览器的重度使用者,每天的工作几乎都可以在浏览器端完成,所以对浏览器很依赖。碰到浏览器插件,自然都要高看一眼,因为她们可以增强浏览器的功能,昨天看到聚合网站今日热榜中的栏目 “小众软件” 介绍 …

Contest3924 - 计科23级算法设计与分析平时作业-03

题目链接 A.Knight Moves 题面思路 马的bfs、最短路径问题。模板题 示例代码 #include<bits/stdc++.h>using namespace std;#define ll long long //#define int ll #define pii pair<int, int> #define all(x) x.begin(),x.end() #define fer(i, m, n) for(int i …

UML之包含用例

UML提供include机制避免用例重复,实现共享。本文介绍创建被包含用例的步骤,并通过实例展示其在基础用例共享、复杂用例分解及继承用例复用等场景下的应用。对于规模较大的用例,建模过程中经常会发现多个用例存在共享相同的子目标或子行为的情况。为避免重复并实现共享,UML提…

基于ESP32的物联网传感器和超声波距离传感器,Watmonitor可进行实时水位监测

Watmonitor是一个使用物联网传感器进行实时水位监测的自托管应用程序,具有多语言支持和易于访问的数据。Watmonitor是一个多功能的、自托管的web应用程序,专为实时水位监测而设计。使用基于ESP32的物联网传感器和超声波距离传感器,它可以跟踪各种环境中的水位,如水井,水箱…

【Java】【SpringBoot】Quartz——动态任务调度

回顾:前面学习了quartz的基础使用:https://www.cnblogs.com/luyj00436/p/18781141 定时任务可能是按照预设的时间进行。可是实际中,我们肯定希望自由的进行任务生成、暂停、恢复、删除、更新等操作。 Quartz本身没有提供动态调度的功能,需要自己根据相关的API开发。 场景订…

GrapeCity Documents V8.0 新版本特性

GcExcel V8.0 新版本特性丰富,包括:数据导入方面,可从多种数据源(如自定义对象、DataTable 等)导入,为 IRange.ImportData (..) 新增重载;假设分析上,通过 IWorksheet.Scenarios 接口支持 “方案” 功能,可进行多种操作且受保护工作表也能编辑;数据透视表能绑定表格数…

如何寻找替代FTP传输文件的软件,解决文件传输难题?

FTP因其操作简单、客户端种类多、价格低廉(甚至免费)等优势,受到众多企业的青睐,在全世界范围内得到广泛的应用。但它也面临着一些安全和效率方面的挑战,因此企业都在寻找可平滑替代FTP传输文件的软件。有以下局限性: 1.安全性弱:明文传输,漏洞频发,容易遭到DOS攻击;…

20244205 《Python程序设计》实验一报告

课程:《Python程序设计》 班级: 2442 姓名: 高赫 学号:20244205 实验教师:王志强 实验日期:2025年3月24日 必修/选修: 公选课 1.实验内容 (1).熟悉Python开发环境; (2).练习Python运行、调试技能; (3).编写程序,练习变量和类型、字符串、对象、缩进和注释等; (4).编…

微积分的本质——导数.18790288

本篇为3b1b系列【微积分的本质】笔记 原视频:02-导数的悖论 | 03-用几何来求导 | 04-直观理解链式法则和乘积法则定义导数 这是一个随着时间变化,车辆行驶距离的坐标图在横轴的任何一个点\(t\)上,如果你去查看车的车速表,上面都有一个数字表示当前的车速,但这是如何计算的…

推荐8款 .NET 开源、免费、实用的 Windows 效率软件

前言 今天大姚给大家推荐8款基于 .NET 开源、免费、实用的 Windows 效率软件,开发工作提升利器,希望可以帮助到有需要的小伙伴。 DevToys DevToys是一个专门为开发者设计的Windows工具箱,完全支持离线运行,无需使用许多不真实的网站来处理你的数据,常用功能有:格式化(支…