• Ubuntu20编译最新版Android源码教程


    自己买的mini小主机到了,最初的想法是在家搭建一个自己的小服务器,存储些文件,当NAS玩,顺便学学Linux。机器的配置是16G i7-8750H,有12线程,想着核数多正好可以用来跑跑编译,几个小时跑下来恰好可以测试一下机器的稳定性,于是开始折腾Android源码编译。

    1. 参考资料

    https://source.android.com/setup

    https://blog.csdn.net/u012932409/article/details/104144461

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

    https://blog.csdn.net/whereisdog/article/details/88090553

    2. 准备工作

    2.1. 安装Git

    下载python(一般都有,可以先试试有没有python指令):

    sudo apt-get install python

    下载Git:

    sudo apt-get upgrade
    sudo apt-get install git
    

    设置Git账户:

    git config --global user.email "sandeepin@qq.com"
    git config --global user.name "sandeepin"
    

    配置PATH环境变量:

    mkdir ~/bin
    echo "PATH=~/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc
    

    2.2. 安装curl库

    安装curl用于方便后续下载文件:

    sudo apt-get install curl
    

    3. 下载源码

    3.1. 下载 repo 工具

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
    chmod a+x ~/bin/repo
    

    3.2. 这里使用每月更新的初始化包作为源码

    网络拉70多G的代码不容易,所以我选择使用每月更新的初始化包快速实现代码下载和编译,详细细节请参考清华源的文档。

    下载https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。

    由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。

    使用方法如下:

    wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
    tar xf aosp-latest.tar
    cd AOSP   # 解压得到的 AOSP 工程目录
    # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
    repo sync # 正常同步一遍即可得到完整目录
    # 或 repo sync -l 仅checkout代码
    

    此后,每次只需运行 repo sync 即可保持同步。 我们强烈建议您保持每天同步,并尽量选择凌晨等低峰时间

    Sandeepin自己的miniPC下载耗时26m33.771s,repo sync -l耗时21m31.690s,我的是机械硬盘,其实更推荐使用SSD,对后面的编译也有好处。

    4. 编译源码

    4.1. 安装依赖库

    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
    sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
    sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
    sudo apt-get install git-core gnupg flex bison gperf build-essential
    sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
    sudo apt-get install libc6-dev-i386
    sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
    sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
    sudo apt-get install lib32z-dev ccache
    sudo apt-get install libssl-dev
    

    4.2. 开始编译

    通过lscpu命令查看当前cpu的详细信息,一般设置为自己CPU核数2倍,我设为12。

    执行命令:

    source build/envsetup.sh
    lunch 1
    time make -j12
    

    编译的时候报错:

    网上找了很多方法:

    sudo ln -s /usr/lib32/libncurses.so.6.2 /usr/lib32/libncurses.so.5
    sudo ldconfig
    

    没有解决。

    sudo apt-get install libncurses5:i386

    没有解决。

    最后看到一个方法,缺少libncurses.so.5,sudo apt-get install libncurses5后还是提示clang++运行时候缺少libncurses.so.5,解决办法:

    find / -name libncurses.so.5

    找到以后

    sudo cp /data/android/androidnew/aosp/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/sysroot/usr/lib/libncurses.so.5 /usr/lib

    终于OK,如果之后编译再提示缺啥依赖so,也用类似方法解决。

    最后终于编译成功,303分钟,大约5个小时,不容易啊!第一次编译Android原生系统源码,纪念一下!

  • 相关阅读:
    Sql ----- sqlserver 中的if 判断 case... when
    Bootstrap ---------
    js:定时弹出图片(获取属性、setInterval函数)
    js:轮播图(获取属性、setInterval函数)
    js:表单校验(获取元素、事件)
    js:获取元素的值(id、标签、html5新增、特殊元素的获取)
    js:流程控制(分支结构、顺序结构、循环结构)
    拦截器原理(AOP、责任链模式、拦截器的创建、自定义拦截器)
    Action类
    Struts2配置文件(动态方法调用)
  • 原文地址:https://www.cnblogs.com/sandeepin/p/ubuntu20-aosp-latest.html
Copyright © 2020-2023  润新知