更新
此文章已经过时,但大体思路可被参考
LegacyXperia 官方已经放出 Sony Ericsson Xperia Arc S LT18i 等机型的包,详见官网链接:
前言
同学叫我帮忙折腾他的 Sony Ericsson Xperia Arc S LT18i…刚好寒假有空,就折腾吧
找 ROM 的时候找到了一个叫做 LegacyXperia 的项目,正在给2011年那堆老旧索尼机型做 CyanogenMod 13 的适配,而且看起来弄得差不多了
然而官方还没有放出可用的刷机包
那就自己编译出来尝尝鲜吧,刚好 LegacyXperia 也有放出编译教程
但在编译步骤方面, LegacyXperia 与官方的 CyanogenMod 还是有一些操作方面的差异
查了很久没有一篇能一路顺利做下来的教程,折腾了几下自己搞定了,就自己写一篇出来造福人类
嗯…总体来说就是下面这四篇教程的合体…
顺便给网络做了点奇怪的设置
{All 2011}[GUIDE][DEV] How to build CyanogenMod 12.1
How To Build CyanogenMod For Sony Ericsson Xperia Mini (“smultron”)
Android 镜像使用帮助 [LUG@USTC]
清华大学 TUNA 镜像源 | Tsinghua Open Source Mirror
软硬件要求
- 一台第三方适配好了 CyanogenMod 的手机,这里用我同学的SONY LT18i示范,编译已经被 CyanogenMod 官方适配的机型并不在本篇教程的讨论范围内
- Ubuntu 14.04 LTS amd64
- 暂时不要使用Ubuntu 16.04 LTS,会出现很多奇怪的小问题
- 200G的硬盘空间,CM官方貌似是这么说的…
- 一块速度快的大容量 SSD 用作 Ubuntu 14.04 LTS 的系统盘,能大幅缩短编译所需时间
- 最好有 4GB 以上的运行内存
- 如果你没有最基本的Debian系操作系统(这里是Ubuntu)使用经验的话,不用看下去了…
- 我是在 root 用户下操作的,反正整个系统都是用来干这破事,安全性还是没什么需求的,越方便越好
开始
检查软件包更新并安装,这两条动工前必干的你们都知道吧…
apt-get update
apt-get upgrade
安装 Ubuntu 14.04 LTS 下编译 CyanogenMod 13 所需要的软件包
其他版本和发行版会略有不同,具体可以参考 CyanogenMod 官方的编译指南
apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
创建工作目录,按自己的需求来改吧,没啥特殊需求的直接像我这样也行
mkdir -p ./android/cm
下载 repo 脚本
这里用了中科大源来解决Google官方源被墙的问题
这里吐槽一下…如果没有这些破事,效率应该能提高很多吧
apt-get install phablet-tools
curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > /usr/bin/repo
这个是一个已经被中科大源修改好的 repo 脚本,用于将 repo 脚本自己的更新链接指向镜像源
如果你用自己下载的 repo,可以编辑/usr/bin/repo,把脚本差不多最上面的
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改为
REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'
项目清单 manifest.xml
这个文件功能很多,主要是告诉脚本,为了这个特殊的机型,还要下载哪个代码仓库,扔在哪里,不细说,请自行查阅CyanogenMod的WIKI
后面那个cm-13.0大家随机应变,跟别人的设备适配文件的 cm 分支相符合就好,别想着用 cm12.1 的适配文件编译 cm13.0
cd ./android/cm/
repo init -u git://github.com/CyanogenMod/android.git -b cm-13.0
接着修改manifest,让原本用的 Google AOSP 源变成国内的中科大镜像源,实现愉快源码拉取
编辑 ./android/cm/.repo/manifest.xml
nano ./android/cm/.repo/manifest.xml
把差不多最上面的
fetch="https://android.googlesource.com"
改为
fetch="git://mirrors.ustc.edu.cn/aosp/"
下载特定机型的manifest文件
那么到现在,官方 CyanogenMod 的源码已经准备好同步了,但是第三方适配者的代码仓库没有提交到官方仓库列表,那么在后面的步骤中,编译系统也不会知道去哪找,怎么办呢?
我们可以在工作目录的 .repo/local_manifests 目录里面放上第三方项目的小 manifests 文件,实现一同下载
这个文件也不是每个 ROM 作者都会写,看 ROMer 有没有提供了,因为不是每个项目都会有一堆额外的东西要下载
ROMer 没有给出这个文件?直接跳过这个步骤,repo sync同步好源码,把你的机型的device, vendor, kernel等代码仓库手动找到并下载下来,放进相应目录里
LegacyXperia 已经创建好了相应的代码仓库,我们可以下载现成的
mkdir -p ./android/cm/.repo/local_manifests
curl https://raw.githubusercontent.com/LegacyXperia/local_manifests/cm-13.0/semc.xml > ./android/cm/.repo/local_manifests/semc.xml
同步源码
这里需要很长时间,几十 GB 的源码,网速没问题,运气不错的话,晚上睡觉前开始同步,睡醒就好了
或者一觉醒来下载中断了
中科大源的网速是没问题的,能跑满我的百兆电信网,就看Github那边了…
为什么用中科大源而不是清华TUNA源呢?中科大源在我的环境中貌似网速比较快…
在repo里,-j的意思是并发连接数,在这里,中科大源最多只能有五个并发连接,所以只能-j5
repo sync -j5
拉取 LegacyXperia 更新
需要注意的是,这一步是 LegacyXperia 项目独有的,其他机型不要照抄,请自行查看你使用的机型的编译说明文档里有没有这样的特殊说明
. build/envsetup.sh
ln -s vendor/extra/updates.sh updates.sh
./updates.sh
初始化编译环境和指定机型
这里的 anzu 就是 LT18i 的机型代号
ROMer 应该会提到机型代号的,没有的话,在同步下来的 device 目录里或者 manifest 文件里能找到
cd ~/android/cm
. build/envsetup.sh
breakfast anzu
开始编译
brunch anzu
我用的是 VMware Workstation 10 跑的虚拟机,I5 760超4Ghz分配4个核心,分配5GB内存,希捷老双碟1T分配200G作为系统盘,编译了两个半小时…最重要的是CPU全分配给虚拟机了,编译的时候卡成狗,Windows下都根本不能用…
所以还是睡觉前开始编译吧
如果编译成功了的话,你会看到一条类似这样的输出
~/android/system/out/target/product/smultron/cm-13.0-日期-UNOFFICIAL-LegacyXperia-anzu.zip
还有编译所用的时间
完成
好了,去上面那个目录里找你亲手编译出来的 ROM 的卡刷包,并刷进去体验吧