Android 系统编译

315 阅读3分钟

环境准备

1.设备
  • mac os 13.0.1 intel cpu
  • 安装pd 虚拟机 运行Ubuntu 22.04
  • Linux配置设置 zhuanlan.zhihu.com/p/139305626
  • Linux分配的内存尽量大点,200G往上
2.源码下载
  • 将下载的aosp-latest.tar解压到你指定的目录

进入AOSP目录

  1. 不需要指定分支
  • 直接repo sync
  • 运行完成后会看到多个目录出现在AOSP 目录下
  1. 需要指定分支
  • 进入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

源码下载
  • 能科学上网下载最好,但是流量占用太大,机场的流量不够折腾,只能投靠清华源mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 这个网站里面有详细的下载说明
  • 我建议使用mirrors.tuna.tsinghua.edu.cn/aosp-monthl… 这个下载方案,手动下载然后repo sync, 虽然使用repo -init -b 分支名称可以直接下载我们想要的分支,但是可能会因为网络原因丢失一些Moudle ,导致编译时找不到
编译过程error
  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