美文网首页
手把手教你搞机

手把手教你搞机

作者: Hly_Coder | 来源:发表于2017-06-04 21:01 被阅读522次

概述

很久很久已前,还是苹果,安卓,黑莓等多方等混战的时代,流传着这么一个段子

苹果: 我工艺精良
黑莓: 我辐射低,通话声音清楚
安卓: 我能刷机

苹果: 我速度快,运行流畅
黑莓: 我收发邮件快捷安全
安卓: 我能刷机

苹果: 。。。。
黑莓: 。。。。
安卓: 我能刷机

时至今日,硝烟散去,各大安卓论坛充斥着各种各样的刷机包,无一列外的是每个刷机包帖子后面都有一大波跟随者献上膝盖,直呼大神。你是否也想体验一把被人簇拥的感觉?不要慌,现在就手把手教你如果制作一个刷机包,让你装x让你飞。

闲扯

如果你想了解一下故事背景,请读完该章节,当然,直接跳过该章节也并不会影响制作刷机包。
本文会基于LineageOS来制作一个刷机包。Lineage你可能没有听说过,但是大名鼎鼎的CM(cyanogenmod)你一定听说过,它提供了很多原生系统没有提供的功能,例如主题切换、支持FLAC音频格式、超级用户权限、不含任何捆绑或间谍软件。依靠种种优势成为了当年最火的三方开源rom,并拥有一大批追随者,比如早期的miui,锤子的Smartisan OS, 一加的Color OS等都是基于CM来深度定制的。
那为什么我们不基于CM而是Lineage来制作呢? 因为,在 2016年12月23日,Cyanogen公司突然宣布关闭CyanogenMod的服务器,其创办人Steve Kondik也离开了该公司,背后真想不得而知,一颗星星瞬间陨落。
好消息是,就在隔天,也就是2016年12月24日,LineageOS正式启动,其源代码沿用了CM,成为了CM的继承者。

准备

既然是制作刷机包,那必须得

  1. 先选定一款手机。这里笔者选取的是Google Nexus 6,可以在某鱼上淘。
  2. Linux操作系统,建议8G ram, 100G storage (如果是Mac,还需要额外操作,请注意!)
  3. 耐心!
  4. 耐心!!

开始

环境配置

  1. adb及fastboot下载, 下载成功后解压unzip platform-tools-latest-linux.zip -d ~,并配置到环境变量中,在~/.profile末尾添加
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
    PATH="$HOME/platform-tools:$PATH"
fi

执行source ~/.profile生效。

  1. 接下来是下载编译android源码需要的编译链和代码管理工具
sudo aptitude intsall 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

这里使用了aptitude替代apt-get,因为aptitude能自动帮我们解决依赖关系,谁用谁知道。

  1. Java环境配置
    因为这里是以android7.0为例,所以需要jdk-1.8以上,配置的具体方法
  2. Jack配置
    由于jack是jdk1.8中的新的编译器,为了防止oom,需要将下面配置
    export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"添加到~/.bashrc

代码下载

考虑到GFW的问题,会尽量使用国内的源进行下载,但是以防万一,最好还是先配置好VPN。

  1. 由于代码是使用repo管理的,所以先下载repo,这里使用的是清华大学的镜像
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo

因为repo的运行过程中会尝试访问google的git源更新自己,如果不想每次翻墙更新可以配置为使用tuna的镜像源进行更新。
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'添加到~/.bashrc末尾

  1. 建立源码目录
mkdir -r ~/android/lineage && cd ~/android/lineage
  1. 初始化下载源
repo init -u https://github.com/LineageOS/android.git -b cm-14.1

完成后会在当前目录下下载一个隐藏目录.repo。 找到.repo/manifest.xml文件,该文件是源码清单文件,里面声明了需要下载哪些文件以及下载源地址(有从github下载也有从aosp下载)。 因为github的源不需要翻墙,我们只需要关心aosp的源,在manifest.xml中找到下面代码

  <remote  name="aosp"
           fetch="https://android.googlesource.com"
           review="android-review.googlesource.com"
           revision="refs/tags/android-7.1.2_r8" />

fetch="https://android.googlesource.com"改为
fetch="https://aosp.tuna.tsinghua.edu.cn"即可。

  1. 下载源码
    repo sync 执行完该句后就只需要静静的等待就可以了。由于代码巨大,所以中途失败是很正常的事情,失败后继续执行repo sync直到成功即可。
  2. kernel下载
    第四步成功后,你会发现源码中是不包含kernel和device文件的,还需要下载kernel和device相关代码。这部分会和你选择的手机密切相关,以Nexus 6为例。
source build/envsetup.sh
breakfast shamu

shamu是Nexus 6的Codename, 具体机型的codename可以参照对照表
执行完breakfast shamu后,会自动下载对应kernel代码。如果自动下载失败,可以手动到Lineage的github找到相应kerneldevice

注意:source build/envsetup.sh ,执行该脚本会添加许多帮助编译的命令,比如breakfast/mm/m/croot..等等,如果不执行该脚本后续无法编译

  1. 额外文件拷贝
    你以为这个时候就算完了吗? 最开始笔者也是这么认为的,然后开始编译,奇葩的是并没有编译失败,然后刷机,就悲剧了。 刷机后开机会卡在kernel启动界面,根本不能进入到开机动画界面。
    那是因为还需要一些额外的文件,而这部分文件LineageOs并没有在github上开源出来,而是直接提供的二进制文件。那我们去哪里找这些二进制文件呢?
    唯一的解决办法是先把Nexus 6刷成LineageOs后,再从手机里面将二进制文件拷贝出来或者从官方现成的LineageOs刷机包中去取。这一步确实有点坑爹,感觉是一个先有鸡还是先有蛋的问题!!但是没有办法,寄人篱下不得不低头。
    假设你已经刷好了Lineage7.0系统,现在将手机连接上电脑,执行~/android/lineage/device/moto/shamu/extract-files.sh脚本,会自动帮你拷贝。其中extract-files.sh文件是在第5步中下载下来的。到这是不是发现这一切都是Lineage的圈套?!!需要拷贝的文件清单在~/android/lineage/device/moto/shamu/device-proprietary-files.txt中。

  2. 拷贝的过程中可能会失败,原因是找不到device-proprietary-files.txt中指定需要的文件,如果是这样就只需要在device-proprietary-files.txt中注释掉再执行extract-files.sh脚本就行了,反正正常的刷机包中也没有;)

编译

代码终于下载完成了,现在可以编译了

croot //回到跟目录
brunch shamu // 编译

编译完成后会在out/target/product/shamu目录生成一个刷机包。比如叫做lineage-14.1-2017xx-UNOFFICIAL-shamu.zip
到这里,基本就结束了。

注意:croot和brunch是必在执行完source build/envsetup.sh脚本后才会添加到命令。

最后

一番折腾后,终于根据已有的包编译出了我们自己的包,这有什么意义呢?我想这个意义就是我们可以根据源码自行定制,创造一个属于自己的Rom。如果你有这样的想法,那么欢迎你来到程序员的世界。

相关文章

网友评论

      本文标题:手把手教你搞机

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