准备
- 设备:红米3s
- 设备代号:land
- Android版本:7.1.1
- 源码提供:Lineage
- PC配置:
- 系统:Ubuntu16.04 x64
- 至少12G RAM
- 至少80GB 剩余硬盘空间
- 良好的网络环境
1.下载并解压SDK
sdk中包含fastboot和adb
下载
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 libesd0-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-jdksudo apt install -y openjdk-8-jdk
3.配置源
创建repo存放目录mkdir -p ~/bin
创建源码存放目录mkdir -p ~/android/lineage
× 注:请确保该目录所在的磁盘有足够的空间(至少80G)
安装repocurl 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 cm-14.1
× 注:这里下载的是lineageOS的源码,cm-14.1是分支名。更多分支请浏览:https://github.com/LineageOS/android
4.下载源码
repo sync
5.配置源码
cd ~/android/lineage
加入vendor源
gedit .repo/local_manifests/roomservice.xml
加入:<project name="TheMuppets/proprietary_vendor_xiaomi" path="vendor/xiaomi" remote="github" revision="cm-14.1" />
× 注:其中name是远程项目的路径;path是本地目录的路径;revision是分支名(具体分支请看:https://github.com/TheMuppets/proprietary_vendor_xiaomi)
更新源码repo sync
配置构建环境source build/envsetup.sh
配置设备信息breakfast land
6.配置构建工具
配置ccache
gedit ~/.bashrc
加入:
export USE_CCACHE=1
保存。
使改动生效:source ~/.bashrc
执行:ccache -M 50G
× 注:ccache默认在home目录,请确保home目录有足够的空间。如果想自定义ccache的目录,可以在~/.bashrc
文件里加入export CCACHE_DIR=<路径>
配置jackgedit ~/.bashrc
加入:export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
保存。
使改动生效:source ~/.bashrc
7. 构建
构建整个源码
croot
brunch land
× 注:在源码目录执行cd $OUT
进入编译好的ROM的存放目录。lineage-14.1-xxxxxxxx-UNOFFICIAL-land.zip
为编译好的刷机包。
只构建某个模块
mmm <模块名>
例如构建frameworks中的base
mmm frameworks/base
打包成system.img
有时候我们只修改system模块里不需要编译的文件,没必要重新编译,只需要打包system.imgmake snod
编译system
有时候我们只修改system里的代码,没必要编译整个Android源码,只需要编译system.imgmake systemimage
编译Linux内核
有时候我们只修改内核里的代码,没必要编译整个Android源码,只需要编译boot.imgmake bootimage
8.刷入手机(可选)
下载twrp
https://dl.twrp.me/land/
刷入trwp
在开机状态下,打开USB调试。而且设备要先解锁bootloader。
adb reboot bootloader
fastboot flash recovery twrp.img
fastboot reboot
刷入system.img
我们调试系统源码时,如果不想刷入整个ROM,可以只刷入system.img
fastboot flash system $OUT/system.img
× 注:$OUT指向system.img生成目录
刷入内核
我们调试内核源码时,如果不想刷入整个ROM,可以只刷入boot.imgfastboot flash boot $OUT/boot.img
刷入ROM
将编译好的刷机包,通过adb push
命令将刷机包传输到手机存储。进入twrp界面,擦除system分区,data分区。选择手机存储中的刷机包,刷入!!!
9.常见问题
adb命令提示没有权限
lsusb
找到类似一行:Bus 001 Device 005: ID 18d1:4ee7 Google Inc.
编辑51-android.rules:sudo gedit /etc/udev/rules.d/51-android.rules
输入:SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee7",MODE="0666",GROUP="plugdev"
×注:idVendor,idProduct分别为lsusb命令显示的ID
更改文件权限:
chmod a+r /etc/udev/rules.d/51-android.rules
提示Out of space? the tree size of...
在device目录下找到BoardConfig.mk文件,将其中BOARD_xxxx_PARTITION_SIZE
字段后面的值调大点
10.参考
https://wiki.lineageos.org/devices/land/build
https://www.htcp.net/741.html
https://www.isthnew.com/archives/build-lineageos.html
http://blog.csdn.net/luoshengyang/article/details/6566662/