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同步代码,因为墙的原因导致同步失败。
-
注意只修改列出的条目,没有列出或者没说需要修改的,不要动。
-
分支切换
-
一种是拉代码的时候就指定分支: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
-
以下内容都已三星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
-
-
-
-
-