LineageOS的代码下载、编译及真机运行

  • 最近给电脑换了块硬盘,重装完系统重新下载代码时,发现很多细节都忘记了,尤其是环境搭建这种只做一次的工作,因此有必要把步骤记录一下,以便后续查阅。

  • LineageOS是一个开源的Android系统,代码基本与AOSP相同,LineageOS支持更多的设备,门槛更低。官网地址:https://wiki.lineageos.org

  • 前期准备:

    • LineageOS的代码环境要求与AOSP类似,首先安装curl以便安装repo,然后安装git以便同步代码

    • 软硬件要求与AOSP基本一致,该过程参考AOSP中的相关介绍:https://mp.csdn.net/postedit/88922211

  • 代码下载

    • LineageOS的代码下载依然使用清华源:https://mirrors.tuna.tsinghua.edu.cn/help/lineageOS/

    • 在下载代码前,强烈建议修改host文件,以便于访问github.com,LineageOS在代码下载及编译的过程中,都需要访问github以下载文件,github在笔者网络下延迟高,网速慢,因此可以使用站长工具的dns工具解析github.com,自己ping以下各个ip的延迟,将最稳定一些的那个ip写入到host中。

    • 创建并切换到工作目录

    • 初始化代码仓库

      • 使用清华源:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b cm-14.1,后面的分支信息是可选的,没有则默认为主分支,可以后续切换。

      • 使用LineageOS:repo init -u https://github.com/LineageOS/android.git -b lineage-16.0

      • 仓库初始化完成后,为了从清华源同步代码,需要将.repo/manifest.xml的相关信息修改,以便于指向清华源。(注意这一步是必须的,否则LineageOS默认的会去https://android.googlesource.com同步代码,因为墙的原因导致同步失败。

        • LineageOS的代码下载、编译及真机运行

        • LineageOS的代码下载、编译及真机运行

        • LineageOS的代码下载、编译及真机运行

        • 注意只修改列出的条目,没有列出或者没说需要修改的,不要动。

      • 分支切换

        • 一种是拉代码的时候就指定分支:repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b <分支>,因为谷歌被墙的原因,可能一开始不知道准确的分支,或者使用清华源的打包方式下载,没法在一开始就指定分支。

        • 在.repo/manifests文件夹下切分支,在该文件下使用git branch -a即可看到所有的分支信息,使用git checkout <分支> 切换到对应的分支即可,切换完后返回工作目录重新repo sync 一遍。

      • 异常处理

        • 清华源说可能会出现 部分仓库例如Lineage_framework_base同步的时候会出现bundle错误,这时候可以使用命令repo sync --no-clone-bundle进行同步就没有问题了。没遇到过这个问题,暂时记录一下。

  • 代码编译

    • 准备工作

      • 首先保证所下的代码分支版本信息与自己的设备相匹配,比如我的是三星S5(G9008V),对应的版本是lineageos-16.0,版本信息可以在建仓的时候指定,或者通过切分支实现。

      • 在LineageOS下载设备的对应版本的ROM,并使用该ROM刷机,因为要从该ROM中提取设备的驱动等。

    • 刷机

      • 刷机指引有对应的网页,在ROM下载页有Installation instructions

        • LineageOS的代码下载、编译及真机运行

      • 以下内容都已三星S5 G9008V为依据

        • 下载并编译heimdall

          • heimdall是适用于三星的DownloadMode(类似于Fastboot mode)一款开源软件,用于向三星手机安装第三方Recovery。

          • heimdall的项目地址为https://gitlab.com/BenjaminDobell/Heimdall,使用git将该项目clone下来,不要直接下载编译好的版本,编译好的版本在我的电脑上会报错,但是使用源码自编译的可以正常使用,因此推荐自己编译。

            • 编译的时候参考https://gitlab.com/BenjaminDobell/Heimdall/raw/master/Linux/README进行编译

            • 需要安装依赖项: build-essential, cmake, zlib1g-dev,qt5-default, libusb-1.0-0-dev and OpenGL (e.g libgl1-mesa-glx and libgl1-mesa-dev). 推荐安装apt-file,可以在找不到编译因找不到某个so文件报错时,通过apt-file search <file>查找依赖,然后安装。如果某个依赖已经安装但是仍然存在so找不到的情况,卸载重装。。。或者检查软链接

            • 执行编译

              • cd <heimdall_dir>
                mkdir build
                cd build
                cmake -DCMAKE_BUILD_TYPE=Release ..
                make

                 

            • 将编译后的build/bin添加到path,以便方便的使用heimdall命令。
        • 检查heimdall是否可用
          • 执行命令 heimdall print-pit

            • 因为使用了libusb,此时可能会报libusb的权限错误,使用chmod -R 777 /device/bus/usb/ 修改权限即可

          • 如果手机正常重启,说明heimdall工作正常。

          • 手机同时按 音量- , home , 电源键,然后按音量+确认,进入Download模式,然后使用usb连接电脑

        • 使用heimdall安装第三方Recovery

          • 选择的第三方Recovery是TWRP,在TWRP网站上下载针对G9008V的最新版本的twrp镜像,https://dl.twrp.me/kltechn/

            • twrp的镜像格式为: twrp-x.x.x-x-kltechn.img, x是版本号数字,kltechn是手机代号,g9008v的代号就是kltechn

          • 再次进入Download模式(同时按音量-,home和电源键)

          • 执行命令:heimdall flash --RECOVERY twrp-x.x.x-x-kltechn.img --no-reboot,当进度条走完,命令行执行完毕后,断开usb链接,按音量+,home和电源键,手动重启进入twrp的recovery

          • 在recovery界面可以选择格式化数据等操作

          • 在recovery的advance选项中,选择sideload,进入sideload模式,在电脑端使用adb sideload命令将ROM刷入手机: adb sideload filename.zip

          • 刷完可以返回主界面选择重启,也可以将google apk刷入手机https://wiki.lineageos.org/gapps.html,或者将su补丁刷入手机以获得root权限https://download.lineageos.org/extras

        • 编译

          • 确定版本信息无误,且手机也刷机成功后,就可以执行代码的编译了

          • 首先需要满足AOSP的软硬件需求

          • 安装依赖

            • bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

            • * LineageOS 16.0: OpenJDK 1.9 (included by default)

            • * LineageOS 14.1-15.1: OpenJDK 1.8 (install openjdk-8-jdk)

            • * LineageOS 11.0-13.0: OpenJDK 1.7 (install openjdk-7-jdk)*

            • 对于Ubuntu16.04之前的版本:* libwxgtk3.0-dev → libwxgtk2.8-dev

          • 执行编译前准备

            • source build/encsetup.sh #检查并准备环境
              
              breakfast kltech #选择设备信息,并从github上下载设备相关文件
              
              
              ####以下两步骤仅在第一次编译时需要执行
              
              cd device/samsung/kltechn #切换到设备目录
              
              . ./extract-files.sh  #从手机中导出设备驱动等so文件,该步骤手机必须连接电脑
              
              
              #####以下四步建议写到一个文件或者写到~/.bashrc里,以便每次编译时快速方便的执行
              
              export USE_CCACHE=1
              
              ccache -M 50G
              
              export CCACHE_COMPRESS=1
              
              croot
              
              
              ##开始编译
              
              brunch kltechn