Android 系统编译

环境准备

1.设备

mac os 13.0.1 intel cpu
安装pd 虚拟机 运行Ubuntu 22.04
Linux配置设置 https://zhuanlan.zhihu.com/p/139305626
Linux分配的内存尽量大点,200G往上

2.源码下载

能使用Google源最好,如果不能使用
可以使用清华源https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下
将下载的aosp-latest.tar解压到你指定的目录
进入AOSP目录,
1.不需要指定分支
直接repo sync
运行完成后会看到多个目录出现在AOSP 目录下
2.需要指定分支
进入aosp/.repo/manifests

##查看所以分支
git branch -a 
##按q可以退出
##查看本地分支
git branch
##查看远程分支
git branch -r
git branch -r |grep android-10 ##(可以过滤版本号,数据过多) 

切换到需要的分支

##拉取切换远程分支
git checkout android-10.0.0_r4 origin/android-10.0.0_r4
##android-10.0.0_r4 本地分支命名,可自定义
##origin/android-10.0.0_r4 远程分支命名,查找到需要的远程分支名直接复制就可以
##切换本地分支
git checkout android-10.0.0_r4 

在aosp目录执行repo sync
运行完成后会看到多个目录出现在AOSP 目录下

编译代码

#进入aosp 目录下
#初始化脚本环境
source build/envsetup.sh
lunch
##选择你需要的环境(我这边选择的x86_64)
make
##进入漫长的等待,也可能出现环境问题导致中止,解决问题后继续make就可以了
image.png

image.png

踩坑记录

1.Mac系统

我使用的系统版本mac os 13.0.1 intel cpu,最后编译问题太多我mac转Linux了,mac上装个pd 弄个Linux

环境问题

1.需要新建个区分大小的盘,内容尽量大一点200g+,如果不区分后面编译会失败
2.编译的时候会出现,diff -c 等指令方法无法识别(mac的diff和Linux的不是同一个),不能正确比较两个文件的一致性,会判定你修改了系统文件,导致编译失败,我当时的解决方法是将找到文件中的diff指令修改为mac的格式,有些没找到平替的直接删除了,编译可以通过
3.后面还有几处错误,我记不清了,当时没记录,我给归咎为mac当时的环境不适合Android的编译不对,我修改了几处后,实在改不动了,我就放弃了

2.Linux系统

系统版本 Ubuntu 22.04

源码下载

1.能科学上网下载最好,但是流量占用太大,机场的流量不够折腾,只能投靠清华源https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
这个网站里面有详细的下载说明
2.我建议使用https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
这个下载方案,手动下载然后repo sync,
虽然repo -init -b 分支名称可以直接下载我们想要的分支,但是可能会丢失一些Moudle ,导致编译时找不到

编译过程

1.ninja: build stopped: subcommand failed
编译时运行内存不够用,需要扩容下swap

  • 先free -h 查看下swap内存


    image.png
  • 关闭swapfile
sudo swapoff /swapfile (如果关闭失败,可以重启下Linux,使swap的使用为空)
  • 写入需要的大小内容,根据自己需求控制bs 和 count ,内存=bs*count
sudo dd if=/dev/zero of=/swapfile bs=1G count=10
  • 创建swap文件,打开swap文件
sudo mkswap /swapfile
sudo swapon /swapfile
  • 实例图
    image.png

    2./bin/bash: line 1: m4 command not found
    安装m4
sudo apt install m4

3.error while loading shared libaries: libncurses.so.5:cannot open shared object file: No such file or directory
安装libncurses5 根据需求安装64 或 32

sudo apt install libncurses5 (64位)
sudo apt install libncurses5:i386 (32位)

4.repo reset: error: Entry 'command.py' not uptodate. Cannot merge

##本地repo和项目不一致 同步一下就可以
cd .repo/repo
git pull 

5.error: Please update ABI references with: $ANDROID_BUILD_TOP/development/vndk/tools/header-checker/utils/create_reference_dumps.py
错误视图

image.png

检查了下libutils.so.lsdump 文件,发现为空,因为是在out目录下,应该是上次错误导致文件创建后没有写入内容,再make时,导致读取失败
将空的libutils.so.lsdump删除,再make就可以了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容