编译 CyanogenMod 第三方适配机型的卡刷 zip 包,以 LegacyXperia Sony LT18i 为例

更新

此文章已经过时,但大体思路可被参考

LegacyXperia 官方已经放出 Sony Ericsson Xperia Arc S LT18i 等机型的包,详见官网链接:

LegacyXperia Project

前言

同学叫我帮忙折腾他的 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 的卡刷包,并刷进去体验吧

chevron_left
chevron_right

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Comment
Name
Email
Website