AOSP 在Archlinux 下编译记录


使用Android的好处是可以自由的折腾和开放性的操作系统,本文记录下AOSP在archlinux下的编译环境搭建和错误处理过程.

安装依赖,如果没有开启multilib 支持

  • 需要如下包

    1
    lib32-gcc-libs git gnupg flex bison gperf sdl wxgtk2 squashfs-tools curl ncurses zlib schedtool perl-switch zip unzip libxslt python2-virtualenv bc rsync ncurses5-compat-libs(AUR) lib32-zlib lib32-ncurses lib32-readline lib32-ncurses5-compat-libs(AUR)
  • AOSP可以直接安装AUR仓库的 aosp-devel

    1
    yaourt -S aosp-devel
  • 编译lineageOS 可以直接安装AUR仓库的 lineageos-devel

    1
    yaourt -S lineageos-devel

配置java环境

  • 可以直接安装jdk8-openjdk 或者下载oracle官方jdk

    1
    sudo pacman -S jdk8-openjdk
  • 贴下ORACLE JDK的环境变量的配置

    1
    2
    3
    4
    5
    #set java environment 
    JAVA_HOME=/home/juve/Android/jdk1.8.0_152
    export JRE_HOME=/home/juve/jdk1.8.0_152/jre
    export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

编译

  • 同步AOSP的源码

  • 这里记录下使用清华大学的镜像来同步源码,就可以不用FQ了,比较方便
  • 下载 repo 工具:

    1
    2
    3
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
    chmod a+x repo
    sudo mv repo /usr/bin/
  • repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里

    1
    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
  • 同步源码并切换分支

    1
    2
    repo init -u https://aosp.tuna.tsinghua.edu.cn/mirror/manifest -b master
    repo sync
  • AOSP的编译需要Python2.x archlinux下可以直接安装 python2-virtualenv 来初始化源码的工作环境

    1
    sudo pacman -S python2-virtualenv
  • 安装完后执行

    1
    2
    virtualenv2 venv
    source venv/bin/activate
  • 初始化设备信息

    1
    2
    3
    4
    source build/envsetup.sh
    lunch (选择要编译的设备)
    make -j$( nproc --all )
    emulator (模拟器)

记录下添加新设备

  • 新设备需要 device,kernel,vendor源码,自己会写的大牛就别看了,我这里使用github上已有的
  • 这里使用local_manifests 来同步github上要使用的代码 (remote 如果在项目的manifests里定义过这里其实可以省略,当然写上也没关系)
  • 在.repo/local_manifests/ 目录下添加这个xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="UTF-8"?>
    <manifest>
    <!-- Github remote -->
    <remote name="github"
    fetch="https://github.com/" />
    <project name="LineageOS/android_device_xiaomi_polaris" path="device/xiaomi/polaris" remote="github" revision="lineage-16.0"/>
    <project name="LineageOS/android_kernel_xiaomi_sdm845" path="kernel/xiaomi/polaris" remote="github" revision="lineage-16.0"/>
    <project name="LineageOS/android_device_xiaomi_sdm845-common" path="device/xiaomi/sdm845-common" remote="github" revision="lineage-16.0"/>
    <project name="LineageOS/android_kernel_xiaomi_sdm845" path="kernel/xiaomi/sdm845" remote="github" revision="lineage-16.0"/>
    <project name="LineageOS/android_packages_resources_devicesettings" path="packages/resources/devicesettings" remote="github" revision="lineage-16.0"/>
    <project name="palaych/proprietary_vendor_xiaomi_polaris" path="vendor/xiaomi/polaris" remote="github" revision="pie"/>
    </manifest>
  • 添加完毕后 执行repo sync 就可以了

  • 添加机型设备到lunch列表(在device所在目录下新建vendorsetup.sh,添加内容:)

    1
    add_lunch_combo xxx (这里名字和device里的设置关联,lunch的时候会自动发现)
  • 同步完成后开始初始化设备信息并编译

    1
    2
    3
    4
    source build/envsetup.sh
    lunch (选择要编译的设备)
    make -j$( nproc --all )
    emulator (模拟器)
  • 好久没写blog了,差点忘了怎么写,lunch和make 在实际中还有很多错误,自行Google了