编译 LineageOS 源码


资料来源如下

  • 记录下编译LINEAGEOS的过程
  • Ubuntu 16.04 LTS 下编译 LineageOS 源码
  • Build for klte

编程环境

  • Ubuntu16.04

导语

  • 记录编译LineageOS 15.1的过程,备忘.

编译LineageOS源码

准备

  • 硬件上

    • 大于100G的硬盘剩余空间.SSD加速有奇效.
    • 推荐i7+8G以上配置.(4代i7+16G+SSD编译时间2.5h参考)
  • 软件

    • google官方的教程是ubuntu版本为14.04,这里使用16.04
    • 全翻墙的环境,下载的话源码大约20GB.
  • 其他

    • 足够耐心,相信大半问题都是网络导致的.
    • 以下默认科学上网良好情况下进行.

编译环境

  • 依赖组件

    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
  • LineageOS 14.1以上需要openjdk-8,这里是LineageOS 15.1.直接安装且不需要配置环境变量.

    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

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

初始化 LineageOS 存储库

  • 设置git

    • 设置邮箱
      1
      2
      git config --global user.email "[email protected]"
      git config --global user.name "Your Name"
    • 生成SSH key 添加到 github (LineageOS代码现在托管在github)
      过程自行google吧.
  • 初始化存储

    • 新建目录

      1
      mkdir -p ~/lineage-15.1
    • 初始化LineageOS的repo

      • 命令

        1
        repo init -u https://github.com/LineageOS/android.git -b lineage-15.1
      • Enable color display in this user account (y/N)? y

      • ubuntu16即使设置了终端使用http代理,但git还是需要手动设置才能通过代理访问网络(本地http代理端口为80)

        1
        git config --global http.proxy "localhost:80"
      • 这里可能因为网络或其他原因失败,删除 lineage-15.1/.repo文件夹,重新初始化即可.

  • 同步源码

    • 同步命令
      1
      repo sync -f -j4 -c --no-clone-bundle
    • 注解:
      -f : 强制
      -j4 : 4线程,梯子良好情况下,更多线程无意义.
      –no-clone-bundle : 忽略 clone 失败的信息
    • 源码大约20G,国内的网络环境下需要很长一段时间了.
    • 如果遇到同步失败,网络没问题情况下,执行repo sync即可,已经下载的数据不会再次重复.
  • 同步设备代码(这里是Galaxy S5 代号 klte )

    • 命令

      1
      2
      source build/envsetup.sh
      breakfast klte
    • 执行后会同步 S5 对应的设备文件,大约1G.

    • 获取设备vendor文件

      • 通过设备adb获取.
        确保手机已经连接电脑,然后进入 ~/android/system/device/<厂商>/<设备> 目录。然后执行:
        1
        ./extract-files.sh
      • 或者在TheMuppets获取.
        • 手动下载添加.
        • 或者在LineageOS/.repo/local_manifests/roomservice.xml最后添加
          1
          <project name="TheMuppets/proprietary_vendor_samsung"  path="vendor/samsung"  remote="github"/>
        • 执行repo sync会将三星的所有设备vendor文件同步到本地

编译

  • 设置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
  • 编译变量

    • 带root export WITH_SU=true
    • 设置编译变量 . ./build/envsetup.sh
  • 编译

    • 命令
      1
      2
      croot
      brunch klte
    • 之后是相当漫长的等待了.i7 16G SSD 2.5h.

结束

  • 在OUT文件夹中,有编译完成的ROM.
    lineage-15.1-20180729-UNOFFICIAL-klte.zip

  • ROM的其他修改及优化,待续.