自己动手编译Android(LineageOS)源码

站长1年前 (2020-10-20)安卓刷机3020

准备

  • 设备:小米 MIX2

  • 设备代号:chiron

  • Android版本:9.0

  • PC配置:

    • 系统:Ubuntu18.04

    • 至少12G RAM

    • 至少200GB 剩余硬盘空间

    • 良好的网络环境

开始

1.下载并解压SDK

sdk中包含fastboot和adb


下载

wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip


解压

unzip platform-tools-latest-linux.zip -d ~


添加到环境变量

gedit ~/.profile


输入:

# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
    PATH="$HOME/platform-tools:$PATH"
fi

保存。


使改动生效:

source ~/.profile


2.安装依赖

安装必要库和工具

sudo apt-get install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-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


安装openjdk-8-jdk

sudo apt install -y openjdk-8-jdk


3.配置源

创建repo存放目录

mkdir -p ~/bin


创建源码存放目录

mkdir -p ~/android/lineage


× 注:请确保该目录所在的磁盘有足够的空间(至少200G


安装repo

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo


将~/bin放入环境变量

gedit ~/.profile


加入:

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


使改动生效:

source ~/.profile


初始化repo

cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-16.0


× 注:这里的lineage-16.0是分支名,对应Android 9.0。更多分支请浏览:https://github.com/LineageOS/android


4.拉取源码

repo sync


5.配置源码

cd device/xiaomi
git clone https://github.com/LineageOS/android_device_xiaomi_chiron -b lineage-16.0 chiron


提取vendor信息

提取手机厂商的库。这一步将手机连接电脑,并保证手机能被adb

命令操控,还需要手机授予adb root权限。

adb shell su -c setenforce 0
cd chiron
./extract-files.sh


提取需要点时间,需耐心等待


第二种提取方式:

LineageOS官方的文档中使用的是一个脚本然后用adb从你的设备中提取vendor,我觉得这种方法太麻烦了,因为不一定是每一台设备都正好装了adb,比如说服务器上这种办法就不行了。

于是,在另外一篇博客教程上我找到了替代的方法,现在应该都是这样做的了。

github项目地址:https://github.com/TheMuppets

仓库中有一个清单的项目,里面提供了所有的清单,你只需要将对应你机型的厂商vendor的代码添加到LineageOS/.repo/local_manifests/roomservice.xml文件中就行了。


拉取kernel

cd kernel/qcom
git clone https://github.com/LineageOS/android_kernel_qcom_msm8998 -b lineage-16.0 msm8998


配置构建环境

source build/envsetup.sh


配置设备信息

breakfast chiron


6.配置构建工具

配置ccache

gedit ~/.bashrc


加入:

export USE_CCACHE=1


使改动生效:

source ~/.bashrc


执行:

ccache -M 50G


来设置缓存大小


× 注:ccache默认在home目录,请确保home目录有足够的空间。如果想自定义ccache的目录,可以在~/.bashrc文件里加入export CCACHE_DIR=/path/to/.ccache。缓存大小根据自己硬盘大小设置,设置25G以上可以显著提高源码的构建速度。


配置jack

gedit ~/.bashrc


加入:

export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8G"


使改动生效:

source ~/.bashrc


7. 构建

构建整个源码

croot
brunch chiron


× 注:构建成功后,在源码目录执行cd $OUT进入编译好的ROM的存放目录。lineage-16.0-xxxxxxxx-UNOFFICIAL-chiron.zip为编译好的刷机包。


只构建某个模块

mmm <模块名>


例如构建frameworks中的base

mmm frameworks/base


打包成system.img

有时候我们只修改system里的模块,没必要编译整个源码,就只打包system.img

make snod


编译system

make systemimage


8.刷入手机(可选)

下载twrp

https://dl.twrp.me/chiron/


刷入trwp

刷入recovery前,要先解锁手机的bootloader,如何解锁,各个厂商不太一样,这里就不阐述了。


adb reboot bootloader
fastboot flash recovery twrp.img
fastboot reboot


刷入system.img

我们调试源码时,如果不想刷入整个ROM,可以只刷入system.img。以下命令将system.img刷入system分区

fastboot flash system system.img


刷入ROM

将编译好的刷机包,通过adb push命令将刷机包传输到手机存储。进入twrp界面,擦除system分区,data分区。选择手机存储中的刷机包,刷入!!!


9.常见问题

(1) 编译目标设备为emulatorx86时在编译时出错,提示yasm找不到。

安装yasm

sudo apt-get install yasm


(2) adb命令提示没有权限

lsusb


找到类似一行:

Bus 001 Device 005: ID 18d1:4ee7 Google Inc.


编辑51-android.rules:

sudo gedit /etc/udev/rules.d/51-android.rules


输入类似的内容:


# MIX2 normal
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev"
# MIX2 fastboot
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="d00d",MODE="0666",GROUP="plugdev"

×注:idVendor,idProduct分别为lsusb命令显示的ID。开机状态和fastboot模式都需要添加权限,所以,需要增加两行。


更改文件权限:

sudo chmod a+r /etc/udev/rules.d/51-android.rules


参考

https://wiki.lineageos.org/devices/chiron/build

https://www.htcp.net/741.html

https://www.isthnew.com/archives/build-lineageos.html

http://blog.csdn.net/luoshengyang/article/details/6566662/

https://www.cnblogs.com/luoyesiqiu/p/10701419.html

相关文章

如何绕过root检测保姆式教程

如何绕过root检测保姆式教程

之前发过一期教程,但是懒得打字导致很多人看不明白于是今天闲来无事给大家写一篇保姆式教程,还不懂我也无能为力咯~配置:Magisk:21.1Magisk Manager:8.0.3Riru:23.0Ed...

安卓内测新版微信8.0 下载链接

https://szsupport.weixin.qq.com/cgi-bin/mmsupport-bin/readtemplate?t=page/android_exp__index&cli...

手机混用闪存到底是真是假?教你查手机闪存型号

手机混用闪存到底是真是假?教你查手机闪存型号

最近,网上传言某手机混用闪存,将UFS 3.0和UFS 3.1的闪存混用在了同一型号的机器上,买不同容量的手机,闪存协议不一样。光从这个描述来看,这做法相当不厚道,消费者买手机等于抽奖。但这到底是不是...

【Xposed模块|新浪微博去广告】去除启动页 详情 评论区广告等

Xposed模块|新浪微博去广告(SinaAdAway)是一款去除新浪微博手机APP广告的工具,可以去掉新浪微博APP大部分地方的广告展示,帮你打造一个干净无广告的新浪微博浏览体验,具体功能可以参考下...

红米6A成功刷入基于安卓10的LineageOS17.1教程

红米6A成功刷入基于安卓10的LineageOS17.1教程

背景手头有一部闲置的红米6a,MIUI10太卡了,于是想刷成原生系统,找到一份第三方LineageOS 17.1的rom。开工首先需要将红米6A升级到最新系统。进入小米线刷包下载地址http://ww...

小米6刷入统信UOS系统教程 刷机包开放下载

小米6刷入统信UOS系统教程 刷机包开放下载

统信软件旗下的UOS操作系统近来出镜率极高,在V20服务器版、专业版、个人版发布之后,第三方开发者将之适配在了手机上。10月5日消息,深度操作系统官方晒出图片,显示深度社区用户BigfootACA 的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。