Mac10.14编译Lineage16.0 for Xiaomi6(sagit)

由于内网服务器各种不方便,最后选择购入1T的移动SSD在本地编译了。虚拟机的话需要本机至少24G内存,条件不满足;而且安卓代码对MAC的支持比较友好了,所以决定就在mac环境下编译啦

lineage16.0不再支持小米6,因此换成17.1 :https://www.lineageoslog.com/16.0/sagit

准备磁盘

三星T5 SSD 使用MAC的磁盘工具重新挂载后抹除 ,使磁盘可写,可区分大小写

repo工具下载及添加到环境变量

使用清华的镜像源

1
2
3
4
5
6
7
8
9

mkdir ~/bin

#本地下载repo,使用jumper的上传下到服务器上
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /bin/repo/
chmod a+x ~/bin/repo

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
export PATH=~/bin:$PATH

代码同步

  1. 创建一个大小写敏感的分区,或者创建一个大小写敏感的镜像文件,用来存放 同步下来的源码.
  2. 进入存放源码的路径
  3. 在当前路径下初始化源码仓库:
1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-16.0

打开.repo/manifest.xml,将

1
2
3
<remote name="github" 
fetch=".."
review="review.lineageos.org" />

改成

1
2
3
4
5
<remote name="github" 
fetch="https://github.com/" />
<remote name="lineage"
fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
review="review.lineageos.org" />

1
2
<remote name="aosp" 
fetch="https://android.googlesource.com"

改成

1
2
<remote name="aosp" 
fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP"

1
2
<default revision="..." 
remote="github"

改成

1
2
<default revision="..." 
remote="lineage"

同步源码树(以后只需执行这条命令来同步):

1
2
3
4
5
6
7
8
9
repo sync -j8 -c

#若出现error: Exited sync due to fetch errors
#使用
repo sync -j8 -f --force-sync

#若出现bundle错误
#使用
repo sync -j8 --no-clone-bundle

快速同步

或直接下载repo包,解压后cd到lineage目录 直接执行repo sync -l提取源码

安装依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
brew install findutils
brew install gpg
brew install Imagemagick

#sed
brew install gnu-sed
export PATH=/usr/local/opt/findutils/libexec/gnubin:/usr/local/opt/gnu-sed/libexec/gnubin:$PATH

#安装 Xcode 命令行工具:
xcode-select --install

#通过 macports.org 安装 MacPorts。
#https://www.macports.org/install.php

export PATH=/opt/local/bin:$PATH

#通过 MacPorts 获取 Make、Git 和 GPG 程序包:
sudo port -d sync
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

#设置文件描述符数量上限
vim ~/.bash_profile
#添加此行
# set the number of open files to be 1024
ulimit -S -n 1024


#优化编译环境
brew install Ccache

在源代码树的根目录下执行以下命令:
export USE_CCACHE=1
export CCACHE_DIR=/Volumes/Samsung_T5/android/build_cache/.ccache
export CCACHE_COMPRESS=1
ccache -M 100G

#error
export ALLOW_MISSING_DEPENDENCIES=true

idea源码阅读

源码根目录执行

1
2
mmma development/tools/idegen/
#在/out/host/darwin-x86/framework下生成idegen.jar

问题与解决

出现error 缺少macos10.14的sdk,到https://github.com/phracker/MacOSX-SDKs/releases/tag/10.15 下载 ,放到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs下。

出现error:device/xiaomi/sagit/rro_overlays/SagitWifiOverlay/Android.bp:1:1: unrecognized module type “runtime_resource_overlay”,把/device/xiaomi/sagit/rro_overlays/SagitWifiOverlay 目录删除。

遇到

1
brew install error:python@3.9: undefined method `on_macos' for #<PourBottleCheck:0x00007f86e80a3220>

执行 brew update -v

运行无误生成 out/host/darwin-x86/framework/idegen.jar

执行

1
2
3
cd croot

./development/tools/idegen/idegen.sh

会在源代码根目录生成下列文件

1
2
3
4
5
6
// 用于IntelliJ IDEA的项目配置文件
android.ipr
android.iml

// 用于Eclipse的项目配置文件
.classpath

使用IntelliJ IDEA,则打开工程,浏览选择刚才生成的android.ipr文件即可。

xiaomi6 vendor包

android_proprietary_vendor_xiaomi_sagit

android_vendor_xiaomi_msm8998-common

放到vendor/xiaomi/ 目录下 目录名分别为 msm8998-common 和sagit
https://wiki.lineageos.org/devices/dipper/build#extract-proprietary-blobs

从设备提取

编译

修改.repo/local_manifest/roomservice.xml ,增加以下

1
2
3
4
<project name="LineageOS/android_device_xiaomi_sagit" path="device/xiaomi/sagit" remote="github" />
<project name="LineageOS/android_device_xiaomi_msm8998-common" path="device/xiaomi/msm8998-common" remote="github" />
<project name="LineageOS/android_kernel_xiaomi_msm8998" path="kernel/xiaomi/msm8998" remote="github" />
<project name="xiaomi-msm8998/vendor_xiaomi" path="vendor/xiaomi" remote="github" />

repo sync

1
2
3
4
5
6
7
source build/envsetup.sh

breakfast sagit

croot

brunch sagit

如果出现python相关的错,记得把python切换到python2