Android同步源码和编译ROM傻瓜式 (有手就行)

2018年03月14日 99 字 Android

本人是用Arch, 顺便来传一下教

第一是 安装Linux 我以Ubuntu和deepin为例子, 建议新手用deepin

Ubantu的安装视频

Deepin的安装视频

第二是 环境搭载

1.明确自己要开发的android版本 参考 lineageos官方的wiki选择合适的linux发行版(推荐ubuntu 16)推荐而已, 你可以是别的shell,都没问题

2.更新自身ubuntu的软件源 替换到etc/apt/sources.list替换完毕后执行

1
sudo apt-get update //如果自身网速不好建议换国内源(清华 中科大 阿里)

个人建议清华
deepin就更简单, 直接设置里面换

3.安装jdk, 需要根据开发的android版本选择

1
sudo apt-get update

4.安装 软件依赖

1
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

4.安装jdk, 需要根据开发的android版本选择

1
sudo apt-get install openjdk-x-jdk    //x 为jdk版本数字

LineageOS 14.1-15.1: OpenJDK 1.8

1
install openjdk-8-jdk

LineageOS 11.0-13.0: OpenJDK 1.7

1
install openjdk-7-jdk

第三是 安装repo

(1) 推荐使用mokee开源的 mokee repo1 或者 mokee repo2

(2)在终端中输入以下内容, 新建bin文件夹

1
mkdir ~/bin

(3)输入以下内容, 将bin文件夹添加到环境变量中

1
PATH=~/bin:$PATH

(4)接着输入以下内容, 下载repo文件到bin文件夹 输入这个请省略下面那一步

1
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

如果你是欧洲人, 有钱买梯子 就省略上步直接输入以下命令

1
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

(5)最后输入以下内容, 为repo文件添加运行权限

1
chmod a+x ~/bin/repo

第四是 同步源码

(1) win+alt+t打开终端, 输入如下, 创建一个文件夹

1
mkdir ~/los      //例如: los  名字你可以顺便起

(2) 进入(自己起好名字的文件夹)的文件夹, 输入如下

1
cd ~/los         //例如: los 你随便起名字的文件夹

(3) 由于使用repo拉取源码时, 会尝试访问官方的git源更新自己, 但由于是谷歌, 就无法正常访问, 所以在正式拉取前, 我们需要先做点修改打开主目录, 按组合键ctrl+H, 在显示的隐藏文件中, 打开.bashrc文件, 将如下内容复制到你的~/.bashrc最后一行, 保存退出

1
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

(4) 获取源码拉取地址
访问lineage的开源地址库点击android, 进入如下界面, 这里就看到了拉取lineage-x.x的命令

(5) 获取源码default

1
repo init -u git://github.com/los/android.git -b lineage-x.x       //例如: los 你随便起名字的文件夹和lineage版本

(6) 输入邮箱和昵称

1
2
git config --global user.email xxxxxx@xxxx   //你的邮箱
git config --global user.name xxxxxxxxx //随便起一个英文昵称

打开lineageOS文件夹 (如果是空的按组合键ctrl+H, 显示隐藏内容)

然后更改链接

第五是 拉取源码

输入

1
repo sync

或者

1
repo sync -c -f -j8 --force-sync --no-clone-bundle

第六是 获取机型device

(1) 我们进入lineage的开源项目网站

(2) 在搜索框中输入(设备代号), 会看到android_device_(品牌)_(设备代号)这一项

(3) 点击android_device_(品牌)_(设备代号), 就可以看到device的所有内容

(4) 点击右边的Clone or download, 然后复制如图中的蓝色内容, 这就是此device的下载地址

(5) 组合键ctrl+alt+t, 打开终端

1
cd ~/los             //例如: los  你随便起名字的文件夹

(6) 输入如下命令, 回车开始同步

解释一下:git clone就是拷贝到本地的命令, 那段网址就是我们上面复制的地址, -b后面的lineage-x.x,表示lineage-x.x的分支;device/(品牌)/(设备代号)就是要下载到地方的路径

1
git clone https://github.com/LineageOS/android_device_(品牌)_(设备代号).git -b lineage-x.x device/(品牌)/(设备代号) depth=1(可加可不加, 加入同步源码会小点)

(7) 我们需要拉取的项目如下

1
2
3
4
5
6
7
8
9
android_device_(品牌)_(设备代号)

android_device_(品牌)_(处理器代号)-common

android_device_(品牌)_(厂家)_common

android_kernel_(品牌)_(处理器代号)

proprietary_vendor_(品牌)

(8) vendor需要访问地址然后搜索(你的品牌)就可以找到

(9) 同样和同步其他项目一样

1
git clone https://github.com/TheMuppets/proprietary_vendor_(品牌).git -b lineage-x.x vendor/(品牌)

第七是 执行编译

(1)如果你退出了, 你就按组合键ctrl+alt+t, 打开终端, 输入以下命令, 回车, 进入los //你随便起名字的文件夹, 没有的话跳过这个环节

1
cd ~/los    //例如: los 你随便起名字的文件夹

(2) 初始化

1
. build/envsetup.sh

(3) 输入如下命令, 回车

1
breakfast xxx  //自己的机型

如果有错误, 就根据错误提示到lineageOS目录检查device, kernel和vendor等是否正确

(4) 输入, 回车, 进行编译

1
brunch xxx    //自己的机型

编译耗费的时间取决于你的电脑配置情况, 所以我不建议用虚拟机, 如果你电脑配置相当牛逼, 当我没说

(5)在我编译时出现了 fatal error: openssl/opensslv.h: No such file or directory 原因是libssl-dev没有安装

1
sudo apt-get install libssl-dev

(6) 回到正在编译的终端中, 重新输入如下命令, 等待编译的完成

1
brunch //自己的机型

(7) 编译完成后

1
进入主目录\(你随便起名字的文件夹)\out\target\product\(设备代号)中就可以看到我们编译好的ROM了, 可以复制到手机刷入了

另外设置ccache提高编译速度

1
2
3
export USE_CCACHE=1 
export CCACHE_COMPRESS=1
ccache -M 50G 或者100G

防止低内存编译出错 设置大小为

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

祝福大家能自己动手做出属于自己的ROM


本文作者: 史迪奇
本文链接: https://sdq3.ml/Android-compile.html