美文网首页Android技术知识Android知识Android开发
生命不止,折腾不息 —— LineageOS编译指南

生命不止,折腾不息 —— LineageOS编译指南

作者: CodeMyLove | 来源:发表于2017-06-06 14:56 被阅读1451次

    前言

    CM解散后,全部项目都转移到了LineageOS上,看到官网上还在支持着一加手机,既然如此,那今天就来下载源码编译一把,看看LineageOS都做了什么改动。

    准备工作

    1. 一台支持LineageOS 的手机,可以查看官方支持列表 看看你的手机是否在支持列表,我的是oneplus one
    2. 一台安装了Ubuntu的机器,硬盘空间至少100G以上。
    3. 科学上网——这个自己搞定吧,我这边是自动科学上网的

    准备环境

    安装编译包

    Ubuntu 16.4 以下的机器执行以下命令:

     sudo apt-get install bc bison build-essential curl flex g++-multilib gcc-multilib git 
     gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-
     dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk2.8-dev libxml2 
     libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-
     dev ImageMagick
    

    Ubuntu 16.4 以上的机器执行以下命令:

     sudo apt-get install bc bison build-essential curl flex g++-multilib gcc-multilib git  
     gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-
     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 ImageMagick
    

    安装JDK

    我们今天编译的是基于 Android 7.1.1 的 LineageOS 14.1,所以需要安装OpenJDK 1.8,网上太多教程了,就不详细介绍了,可以搜索 “openjdk-8-jdk ubuntu” 关键字安装。

    创建编译目录

    mkdir -p ~/android/lineage
    

    下载repo命令

    Android代码是由repo管理的,所以需要下载 repo 这个二进制文件

    curl https://storage.googleapis.com/git-repo-downloads/repo > repo
    sudo chmod a+x repo
    sudo cp repo /bin/repo
    

    初始化仓库

    cd ~/android/lineagerepo init -u https://github.com/LineageOS/android.git -b cm-14.1
    

    下载源码

    repo sync -j8 --no-clone-bundle
    

    顺便可以了解下参数哦(来自网络):

     -j:开启多线程同步操作,会加快sync命令的执行速度。默认情况下,使用4个线程并发进行sync。
     -c, –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程
     分支,当远程分支比较多的时候,下载的代码量就大。使用该参数,可以缩减下载时
     间,节省本地磁盘空间。
     -d, –detach:脱离当前的本地分支,切换到manifest.xml中设定的分支。在实际操作
     中这个参数很有用,当我们第一次sync完代码后,往往会切换到dev分支进行开发。
     如果不带该参数使用sync, 则会触发本地的dev分支与manifest设定的远程分支进行
     合并,这会很可能会导致sync失败。
     -f, –force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git
     库。
     –no-clone-bundle:在向服务器发起请求时,为了做到尽快的响应速度,会用到内容
     分发网络(CDN, Content Delivery Network)。同步操作也会通过CDN与就近的服务器
     建立连接, 使用HTTP/HTTPS的$URL/clone.bundle来初始化本地的git库,
     clone.bundle实际上是远程git库的镜像,通过HTTP直接下载,这会更好的利用网络
     带宽,加快下载速度。
    

    解压proprietary blobs

    挂载system文件

    proprietary blobs 可以从刷写了LineageOS的设备或者LineageOS的OTA全量包中解压出来,为了方便,我们直接从OTA升级包中解压就好。
    下载一加的LineageOS全量升级包,如果你找不到,我帮你传到百度云了。下载完成后就可以开始解压了
    首先创建文件夹

    mkdir ~/android/system_dump/cd ~/android/system_dump/
    

    解压OTA包到system_dump中

    unzip path/to/lineage-*.zip system.transfer.list system.new.dat
    

    接下来得转换dat这个文件成img,需要下载一个sdat2img

    git clone [https://github.com/xpirt/sdat2img](https://github.com/xpirt/sdat2img)
    

    下载完成后,解压dat

    python sdat2img/sdat2img.py system.transfer.list system.new.dat system.img
    

    解压完成后挂载system.img

    mkdir system/sudo mount system.img system/
    

    抽取proprietary blobs

    好了,接下来就可以把system中的文件抽取出来了,回到~/android/lineage/device/oneplus/bacon目录

    cd ~/android/lineage/device/oneplus/bacon
    ./extract-files.sh ~/android/system_dump/
    

    抽取完毕,卸载system.img

    sudo umount ~/android/system_dump/systemrm -rf ~/android/system_dump/
    

    准备编译

    source build/envsetup.shbreakfast bacon
    

    加快编译速度

    为了加快编译,建议添加 ccache

    export USE_CCACHE=1
    export CCACHE_COMPRESS=1  
    

    以上可以添加到~/.bashrc文件中
    配置ccache大小

    prebuilts/misc/linux-x86/ccache/ccache -M 50G
    

    配置jack

    jack是LineageOS 14.1使用的JAVA编译器,需要配置一下避免内存不足

    export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
    

    这个也可以配置到~/.bashrc文件中

    开始编译

    终于可以开始编译了,输入

    crootbrunch bacon
    

    生成OTA包

    假设我们的编译成功了,那么我们进入输入目录

    
    cd $OUT
    

    你会看见以下两个文件:

    1. recovery.img 这个是系统的recovery image.
    2. lineage-14.1-20170515-UNOFFICIAL-bacon.zip OTA安装包

    相关文章

      网友评论

        本文标题:生命不止,折腾不息 —— LineageOS编译指南

        本文链接:https://www.haomeiwen.com/subject/dqngfxtx.html