0%

Android笔记—编译Syberia Project


  • 编译Syperia Project

  • 更新

    1
    19.11.15 初始

导语

  • 备忘.

准备

  • 硬件上

    • 大于100G的硬盘剩余空间.SSD最好.
    • i7以上配置.(4代i7+SSD编译时间3.5h参考)
  • 软件

    • 网络环境.
  • 其他

    • 足够耐心,以及大半问题都是网络问题.

编译环境

  • 依赖组件

    1
    2
    3
    sudo apt install -y bc bison build-essential curl flex gcc-multilib git git-core gnupg gperf g++-multilib libesd0-dev libgl1-mesa-dev liblz4-tool libncurses5-dev libreadline6-dev \
    libsdl1.2-dev libwxgtk3.0-dev libxml2 libxml2-utils libx11-dev lib32ncurses5-dev lib32z1-dev lzop pngcrush schedtool squashfs-tools \
    unzip xsltproc zip zlib1g-dev
  • 额外组件,可能会使用.

    1
    sudo apt install imagemagick libbz2-dev libssl-dev lzma ncftp bash-completion
  • jdk

    1
    sudo apt install -y openjdk-8-jdk
    • 安装完成后输入java -version,返回1.8即正确安装.

安装repo

  • repo是google用来管理android源码的工具,基于git实现.android源码的代码量级,直接使用git….你可以试试….

  • repo实际上是个python2的脚本.

  • 下载并设置环境变量

    1
    2
    3
    4
    5
    mkdir -p ~/bin
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    echo "export PATH=~/bin:$PATH" >> ~/.bashrc
    source ~/.bashrc
  • ps

    • 实在下载不下来,手动拖下来.
    • 或者转清华源.

初始化存储库

  • 设置git等,不加赘述.

  • 初始化存储库

    1
    repo init -u https://github.com/syberia-project/manifest.git -b 9.0
  • 同步源码

    1
    repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags
    • 注解:
      -f : 强制
      –no-clone-bundle : 忽略 clone 失败的信息
    • 源码大约80G,需要很长一段时间了.
    • 如果遇到同步失败,网络没问题情况下,执行repo sync即可,已经下载的数据不会再次重复.
  • 获取 vendor , kernel 等.可以从设备直接获取,此处不表了.需要 adb root,但是大部分手头设备都没有.这里直接在github上下载了.

    • 加载环境变量,设置机型.

      1
      2
      . build/envsetup.sh
      lunch syberia_<device-codename>-userdebug
    • 打开 /device/下对应厂商和机器的 syberia.dependencies,将文件中所有依赖都加入到 .repo/local_manifests/roomservice.xml文件中.要特别注意文件路径.因为是首次编译,还有内核的代码等.

  • 再次同步

    1
    repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags

编译

  • 设置ccache,这里设置缓存50G

    1
    2
    3
    sudo apt install ccache -y
    echo export USE_CCACHE=1 >> ~/.bashrc
    prebuilts/misc/linux-x86/ccache/ccache -M 50G
  • 设置 jack 使用更多的内存

    1
    2
    export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
    source ~/.bashrc
    • 有时需要重启jack

      1
      2
      out/host/linux-x86/bin/jack-admin kill-server
      out/host/linux-x86/bin/jack-admin start-server
  • 编译

    1
    2
    3
    . build/envsetup.sh
    lunch syberia_<device-codename>-userdebug
    make bacon
    • 首次编译包括内核等,大概3.5h.第二次以后1.5h.

结束

  • 在OUT文件夹中,有编译完成的ROM