编译 Havoc-UNOFFICIAL


  • 编译 Havoc-UNOFFICIAL 镜像

  • 更新

    1
    20.08.02 初始
  • 资料来源:

    https://www.akr-developers.com/d/107
    https://www.htcp.net/5016.html
    https://github.com/Havoc-OS/android_manifest
    https://forum.xda-developers.com/Mi-9/development/rom-lineageos-17-1-clean-stock-t4041523

导语

最近把个人的设备升级了一番,告别了 Intel, AMD YES!(不仅仅是因为穷).入了二手的 Mi 9 (~这仅仅是因为穷~~).

zen2 简直不要再适合跑编译,加主板相对 Intel 便宜一半,性能还强.

Mi 9 的第三方 Rom 有 Havoc 的支持,但是却没有使用自己一直用的内核,刷完再刷内核,不如一步到位.

这篇是编译 Havoc-UNOFFICIAL

准备

硬件上

  • 大于100G的硬盘剩余空间.SSD最好.
  • Linux 环境,我是在 WSL2 上编译的.
  • i7以上配置.(4代i7+SSD编译时间3.5h参考),AMD 3600 大约 2 小时.

软件

  • 网络环境.

其他

  • 足够耐心,以及大半问题都是网络问题.

编译环境

依赖组件

1
sudo apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

额外组件,可能会使用.

1
sudo apt install -y imagemagick libbz2-dev libssl-dev lzma ncftp bash-completion

jdk(一般不用了),安装完成后输入java -version,返回1.8即正确安装.

1
sudo apt install -y openjdk-8-jdk

安装 repo

repo 是 google 用来管理 android 源码的工具,基于 git 实现.

1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

cat >> ~/.bashrc <<EOF

# set PATH so it includes user's private bin if it exists
if [ -d "\$HOME/bin" ] ; then
PATH="\$HOME/bin:\$PATH"
fi
EOF

source ~/.bashrc

ps

  • 实在下载不下来,手动拖下来.
  • 或者转清华源.

同步存储库

设置 git

等同于设置邮箱,用户名并配置 github 的 ssh-key.

初始化存储库

repo init,这个过程的错误大多是网络错误.

1
2
3
4
mkdir -p ~/havoc
cd ~/havoc

repo init -u https://github.com/Havoc-OS/android_manifest.git -b ten

同步源码

大部分人卡在这里了,依然是网络问题.

1
repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags

注解:

  • -f : 强制
  • –no-clone-bundle : 忽略 clone 失败的信息
  • 源码大约几十 GB(具体多少忘记看了),需要很长一段时间了.
  • 如果遇到同步失败,网络没问题情况下,执行repo sync即可,已经下载的数据不会再次重复.

编译

设置编译环境

有了源码,此时还需要 vendor kernel 和 device.这里有几种情况

  • 如果有官方支持,那并不需要这一步,同步源码时,应该已经加载了.
  • 这些可用在设备获取,但是我这是 wsl2,暂时不支持挂载 usb 设备,没戏.
  • 这次编译的是 UNOFFICIAL,官方没有支持,但找到了 xda 维护 cephus-Havoc 的 github,ok 全齐了.

你可以手动克隆每个仓库,但是没必要.

repo\local_manifests\ 下创建 cepheus.xml,并写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
<manifest>

<project name="savsir/V" path="vendor/xiaomi" remote="github" revision="stable"/>

<project name="savsir/K" path="kernel/xiaomi/sm8150" remote="github" revision="stable"/>

<project name="savsir/D" path="device/xiaomi/cepheus" remote="github" revision="stable"/>

<project name="savsir/DC" path="device/xiaomi/sm8150_common" remote="github" revision="stable"/>

</manifest>

再次

1
repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags

编译 Rom

设置ccache,这里设置缓存50G

1
2
3
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
export USE_CCACHE=1
ccache -M 50G

加载编译环境

1
2
source build/envsetup.sh
lunch havoc_cepheus-userdebug

开始编译

1
make bacon -j$(($(nproc) + 1)) 2>&1 | tee build.log

首次编译包括内核等,大概 2h.第二次以后 0.75h.

结束

/out/target/product/ 找到 Rom