一、简介

AOSP:Android Open Source Project

二、环境要求

我们可以先了解官网(https://source.android.com/docs/setup/start/requirements?hl=zh-cn)的对设备的要求的介绍:

2.1、软硬件要求



我们可以看到官网对硬件的要求是磁盘最少250GB的可用磁盘空间,内存最少需要 16GB,如何内存不够16GB,这里可以通过交换空间(就是用磁盘空间当内存用,可参考:AOSP源码编译-交换空间)

2.2、搭建构建环境



通过官网介绍可以了解到,构建环境最好是linux系统,而MacOS不在支持了,但是也是可以的。

因此,我们可以在window上安装虚拟机+Ubuntu的形式(VMware的配置可以参考:虚拟机的选择与使用),但是自己正好有一台配置比较低主机直接装的Ubuntu20.04.1 LTS

三、环境搭建

安装好系统后需要安装必要的软件:

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

3.1、镜像地址

AOSP官方地址:

https://source.android.com/docs/setup/build/downloading?hl=zh-cn

中科大镜像:

https://mirrors.ustc.edu.cn/help/aosp.html

清华镜像:

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP

3.2、 下载 repo 工具

mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x ~/bin/repo

repo的运行过程中会尝试访问官方的 git 源更新自己,如果想使用 tuna 的镜像源进行更新,可以将如下内容复制到你的 ~/.bashrc 或者 ~/.zshrc 里。

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
PATH=~/bin:$PATH

3.3、 初始化仓库并同步远程代码

git config --global user.email "you@example.com"
git config --global user.name "Your Name"
mkdir aosp
cd asop
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
repo sync # 会自动下载 当前最新源码

下载指定版本源码

#初始化仓库,-b 指示分支,这里使用 android10
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r41
#同步远程代码
repo sync

-b 后面的值参考源代码标记和 build。这里选用了 android-10.0.0_r41 版本用于学习。Android 每年都会更新一个大版本,学习的角度来说,选择一个不太老的版本即可,不必追新。

3.4、 编译源码

可以参考官网的编译Android

3.4.1 source build

source build/envsetup.sh

3.4.2 lunch

lunch

选择要编译的AOSP版本

简要说明编译的类型:

1.user:限制所有权限,用于发布给用户使用的最终版本。

2.userdebug: 开放部分权限,允许root。

3.eng:工程师模式,开放所有权限并且有额外的调试工具。

如果只是编译出一个正常的AOSP环境,直接选择26

输出提示告诉我们也可以直接使用名称选择版本:lunch aosp_x86_64-eng, 这种方式是一步到位

3.4.3 make

输入m,会根据当前CPU的能力,自动控制性能来编译

输入make -j4,开启多线程4来编译【由于我的电脑处理器数量是2,所以可以用标准的 4 就可以了

make -j4

编译过程很长:

3.4.4 运行模拟器

emulator

四、Android12源码下载与编译

下载

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.1.0_r5
repo sync

编译

source build/envsetup.sh
lunch
make -j2

我们输入lunch后,想选择手机模拟器的进行编译(模拟器的只有sdk开头的才是),发现只有sdk_car_相关的选项没有手机的,这时还是想编译手机的我们可以直接输入lunch sdk_phone_x86_64

五、问题汇总

5.1 repo init错误

主要看下图错误:Hostname mismatch 。遇到该错误尝试换源,如中科大换成清华源。

5.2 编译OOM

在已经设置了交换空间后,编译过程仍会出现OOM:



打开:build/soong/java/droidstubs.go,搜索metalava字样,然后加入下面一行:

5.3 编译报错无日志

终端中并没有任务错误提示,只显示了编译失败。如:



进入out目录,打开error.log查看。

out目录下有error.log、error1.log、error2.log等文件,其中error.log是本次编译的错误日志,error1则为上次编译的错误,以此类推。

5.4 模拟器黑屏

如果模拟器起来后一直是黑屏的,此时可通过adb devices命令查看一下,看看是否有模拟器的设备,如果有则可以人尝试下面的操作:

通过ctrl+c,停止模拟器运行,重新执行emulator , 反复多次启动关闭操作。在尝试了4-5次启动关闭操作后,尝试运行emulator -partition-size 200,此时会显示cold start。然后再次ctrl+c关闭,再次运行emulator,再次显示cold start,并成功显示出主页。

5.5 lunch命令后不显示选项



版本冲突:请先清除repo缓存,命令为 repo forall -c git reset --hard HEAD,再重新执行lunch命令。

AOSP下载且编译的更多相关文章

  1. Mac下载并编译Google安卓AOSP项目代码

    Mac下载并编译Google安卓AOSP项目代码 参考 https://source.android.com/source/index.html 这两天用Mac下载安卓AOSP源码,且把遇到的问题记下 ...

  2. macOS(Sierra 10.12)上Android源码(AOSP)的下载、编译与导入到Android Studio

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机)

    AOSP ON MAKO(在NEXUS 4上刷ANDROID 4.4 源代码包-下载/配置/编译/刷机) 特别感谢google官方文档及AOSP源代码开放 參考链接: https://source.a ...

  4. Android 7.1.1系统源码下载、编译、刷机-Nexus 6实战

    想成为一位合格的Android程序员或者一位Android高级工程师是十分有必要知道Android的框架层的工作原理,要知道其工作原理那么就需要阅读Android的源代码. 想要阅读Android的源 ...

  5. android源码下载以及编译自己的ROM

    android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: =========== ...

  6. Android源码和内核源码的下载,编译和执行

    笔者依据罗升阳老师的<Android 系统源码情景分析>一书,尝试下载,编译和执行Android源码和内核源码.但可能是软件源"被墙"或版本号更新的原因.期间遇到诸多问 ...

  7. Chrome代码下载及编译

    2-3年前在做客户端开发时,看过CHROME的一部分代码,主要是BASE库相关的.其项目之大,编译时间之长给我留下了深刻的印象. 3年后的最近,想着再读一下其他部分的代码,所以就对其纠结的下载和编译过 ...

  8. Android学习系列(38)--Android源码下载和编译

    前面多篇文章介绍到如何下载和编译Android或者CM源码,不过一直都是放在<拓展系列>里.随着学习的深入,android源码是非常有参考和学习价值,强烈推荐大家都去下载,编译,学习,所以 ...

  9. 深入浅出-Android系统移植与平台开发(一)- Android4.0系统的下载与编译

    作者:唐老师,华清远见嵌入式学院讲师. 一.Android4.0系统的下载与编译 Android系统的下载与编译,Google的官方网站上已经给出了详细的说明,请参照Android的官方网址: htt ...

  10. Ubuntu10.04下载并编译Android4.3源代码

    注:转载或引用请标明出处    http://blog.csdn.net/luzhenrong45/article/details/9719433 去年用Ubuntu10.10成功下载并编译Andro ...

随机推荐

  1. 【译】介绍 MSTest Runner – CLI、Visual Studio 等

    原文 | Amaury Levé, Marco Rossignoli, Jakub Jareš 翻译 | 郑子铭 我们很高兴推出 MSTest runner,这是一个用于 MSTest 测试的新型轻量 ...

  2. HBase-通过外部表将Hive数据写入到HBase

    a) 准备测试数据 这里准备的csv文件data_test.csv,内容没用''包裹,逗号作为列分隔符 171301,燕青,男,27,发展部 171207,武松,男,39,开发部 171307,李逵, ...

  3. JS Leetcode 74. 搜索二维矩阵题解分析,二分法与坐标轴法

    壹 ❀ 引 本题来自Leetcode74. 搜索二维矩阵,虽然难度是中等,但如果站在做出来的角度,你会发现其实并不难,题目描述如下: 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值. ...

  4. 多线程系列(三) -synchronized 关键字使用详解

    一.简介 在之前的线程系列文章中,我们介绍了线程创建的几种方式以及常用的方法介绍. 今天我们接着聊聊多线程线程安全的问题,以及解决办法. 实际上,在多线程环境中,难免会出现多个线程对一个对象的实例变量 ...

  5. SVG与foreignObject元素

    SVG与foreignObject元素 可缩放矢量图形Scalable Vector Graphics - SVG基于XML标记语言,用于描述二维的矢量图形.作为一个基于文本的开放网络标准,SVG能够 ...

  6. Doris Fe在Mac上搭建开发环境踩坑记录

    1. 拉取代码到本地 git clone https://github.com/apache/doris.git 2. 参考Doris的文档,但别全信(信了你就上当了) 参考第一篇 https://d ...

  7. 利用BARK和Telebot进行VPS实时预警推送

    前言 在服务器的日常维护和蓝队的日常监控中,经常需要对服务器出现的各种问题进行及时的预警推送.国外的服务器推荐使用telebot,而国内由于特殊的网络环境,则推荐使用BARK.Chanify等进行推送 ...

  8. OpenCV开发笔记(六十):红胖子8分钟带你深入了解Harris角点检测(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. 【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided

    问题描述 在App Service For Linux 中,部署NodeJS应用,应用启动失败. 报错信息为: 2023-08-29T11:21:36.329731566Z RangeError: I ...

  10. 浅入 ABP系列(3):增加日志组件、依赖注入服务

    目录 自动依赖注入 添加日志依赖 添加日志功能 依赖注入 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 前面两篇我们搭建了一个基础的.简单的,具有统一响应格式的 ...