目录

  • 准备
  • 下载并解压SDK
  • 安装adb和fastboot
  • 安装Repo和python
  • 安装依赖
  • 设置 git
  • 清华源源代码镜像
    • 过程摘录
    • 异常处理
  • 下载机型配置
  • 拉取vendor
  • 开启缓存
  • 开始编译
  • 还原代码
  • 遇到的错误
    • error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.
    • buildinfo: clear-sign failed: No secret key
  • 附录:

准备

设备:小米5
设备代号:gemini
Android版本:8.1
PC系统:Ubuntu18.04

下载并解压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" ] ; thenPATH="$HOME/platform-tools:$PATH"
fi

保存。

使改动生效:

source ~/.profile

安装adb和fastboot

sudo apt install adb fastboot

安装Repo和python

sudo apt install repo python

安装依赖

安装必要库和工具

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

设置 git

  1. 首先安装一些必要的环境和依赖
    sudo apt-get install build-essential fakeroot dpkg-dev
  2. 在home路径下创建一个名为git-rectify的路径(路径名不重要,可以为其他名称)
    mkdir ~/git-rectify
  3. 进入路径,获取git的源文件
    cd ~/git-rectify
    sudo sed -i – ‘s/#deb-src/deb-src/g’ /etc/apt/sources.list && sudo sed -i –
    ‘s/# deb-src/deb-src/g’ /etc/apt/sources.list
    sudo apt-get update

apt-get source git
4. 安装依赖
sudo apt-get build-dep git
5. 安装libcurl的依赖文件
sudo apt-get install libcurl4-openssl-dev
6. 进入目录(原链接中这里有错误,不需要解压步骤)
cd git-2.17.1/
路径名后面2.*是版本号,需要看一下自己的版本
7. 修改文件内容,需要修改两个文件
vim ./debian/control # 把libcurl4-gnutls-dev 修改为 libcurl4-openssl-dev
vim ./debian/rules # 把TEST=test整行删除
8. 编译和构建安装包
sudo dpkg-buildpackage -uc -us -rfakeroot -b
9. 退回上一级目录,安装编译好的安装包
cd …
sudo dpkg -i git_2.17.1-1ubuntu0.4_amd64.deb
完成以上步骤即可解决error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated问题。

  1. 设置 git 用户名和邮箱
    示例如下:
    git config --global user.email “you@example.com”
    git config --global user.name “Your Name”

双引号中的 “you@example.com” 填写您的 github 所使用的邮箱。注意格式,不要把双引号去掉。
双引号中的 “Your Name” 填写您的 github 用户名,不要把双引号去掉。

  1. 生成 ssh 并添加到 github:
    查看~/.ssh是否存在
    如果该文件夹存在,则说明密钥已存在,则备份删除

2.2 生成 ssh 密钥
在命令行中输入
ssh-keygen -t rsa -C “your email address”
连续按3个回车(密码默认为空),得到 id_rsa 和 id_rsa.pub 文件,说明生成成功

三、添加密钥到 Github
打开 Github,登录自己的账号后
点击自己的头像->settings->SSH Keys->Add SSH key
将本地 id_rsa.pub 中的内容粘贴到 Key 文本框中,随意输入一个 title,点击 Add Key 即可

您可以参考官方的文档:

https://help.github.com/articles/connecting-to-github-with-ssh/

如果您不将 ssh 添加到 github 的话,您可能会遭遇下载受限,从而导致接下来的同步源码失败。

清华源源代码镜像

过程摘录

下载 repo 工具:

mkdir ~/bin
PATH=~/bin:$PATH
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" ] ; thenPATH="$HOME/bin:$PATH"
fi

使改动生效:

source ~/.profile

或者使用tuna的git-repo镜像
(2)配置环境变量(在/etc/profile 或者~/.bashrc中添加如下,添加完成后执行source /etc/profile或者source ~/.bashrc使配置生效)

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

(3)配置本地gerrit,添加自己的信息(修改~/.gitconfig)

建立工作目录:

 mkdir ~/LineageOS && cd ~/LineageOS

初始化仓库:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-15.1

(如果已经有从github同步的lineageOS源代码,可以从这里直接开始)

打开.repo/manifest.xml,将

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

改成

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

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

改成

  <remote  name="aosp"fetch="https://aosp.tuna.tsinghua.edu.cn"

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

改成

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

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

repo sync

异常处理

fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable
解决方法,先单独克隆repo
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
然后将git-repo里面的repo文件复制到bin目录,然后chmod a+x ~/bin/repo.
再在同步源码的工作目录新建.repo文件夹,把git-repo重命名为repo复制到.repo目录下:
重新初始化:
repo init -u git://github.com/CyanogenMod/android.git -b cm-12.1
同步开始
repo sync -c -j8

部分仓库例如Lineage_framework_base同步的时候会出现bundle错误,这时候可以使用命令repo sync --no-clone-bundle进行同步就没有问题了
同步源码

repo sync -c -f -j4 --force-sync --no-clone-bundle

由于 AOSP 镜像造成CPU/内存负载过重,清华限制了并发数量,因此建议 sync的时候并发数不宜太高,否则会出现 503 错误,即-j后面的数字不能太大。

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

下载机型配置

在项目源码目录下的device目录下,新建一个目录xiaomi
然后在xiaomi目录下同步2个仓库代码

git clone https://github.com/LineageOS/android_device_xiaomi_gemini.git gemini
git clone https://github.com/LineageOS/android_device_xiaomi_msm8996-common.git msm8996

然后需要下载一个820机型的内核源码
源码目录下的kernel目录下新建目录xiaomi,然后再xiaomi目录下执行代码

git clone https://github.com/LineageOS/android_kernel_xiaomi_msm8996.git msm8996

项目还需要依赖一个android_packages_resources_devicesettings 也需要同步
在源码目录下的packages目录下新建目录resources,然后在resources目录下执行

git clone https://github.com/LineageOS/android_packages_resources_devicesettings.git -b lineage-15.1 devicesettings

拉取vendor

make vendor主要是拉取官方系统的部分必要文件用于编译lineageos系统。
先确保手机能连adb
然后在源码根目录下执行 . build/envsetup.sh初始化环境
终端进入/device/xiaomi/gemini目录下。

chmod 755 *.sh
./setup-makefiles.sh
./extract-files.sh

此时,device/vendor/xiaomi下会出现个gemini的目录,如果没有则将msm8996改名为gemini。

当然这些东西都可以写到.repo/local_manifests/local_manifests.xml里面去,repo sync的时候会自动同步。格式差不多是这样

<?xml version="1.0" encoding="UTF-8"?>
<manifest><remote  name="LineageOS"fetch="https://github.com"review="review.lineageos.org" /><project name="LineageOS/android_device_xiaomi_gemini" path="device/xiaomi/gemini" remote="LineageOS" revision="lineage-15.1" /><project name="LineageOS/android_device_xiaomi_msm8996-common" path="device/xiaomi/msm8996" remote="LineageOS" revision="lineage-15.1" /><project name="LineageOS/android_kernel_xiaomi_msm8996" path="kernel/xiaomi/msm8996" remote="LineageOS" revision="lineage-15.1" /><project name="LineageOS/android_packages_resources_devicesettings.git" path="packages/resources/devicesettings" remote="LineageOS" revision="lineage-15.1" />
</manifest>

开启缓存

apt install ccache
export USE_CCACHE=1
ccache -M 50G

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
out/host/linux-x86/bin/jack-admin kill-server
out/host/linux-x86/bin/jack-admin start-server

jack服务可以关闭,省去很多编译错误:
https://blog.csdn.net/qilu0882/article/details/81328953
https://cloud.tencent.com/developer/article/1414273

开始编译

编译变量带root
export WITH_SU=true
设置编译变量 . ./build/envsetup.sh
编译

命令
croot
brunch lineage_gemini-eng

还原代码

瞎改代码炸了怎么办?执行下面的命令还原所有修改
repo forall -c git reset --hard

遇到的错误

error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.

https://zhuanlan.zhihu.com/p/53961303
https://blog.csdn.net/voyagflyer/article/details/72773503

buildinfo: clear-sign failed: No secret key

https://codeday.me/bug/20181108/358289.html

附录:

LineageOS 官方编译教程
https://wiki.lineageos.org/devices/kiwi/build
编译环境下常用命令解析
https://www.cnblogs.com/vincentcc-90/p/4615258.html?tdsourcetag=s_pctim_aiomsg
ccache介绍
https://blog.csdn.net/qq_27062249/article/details/53642444
指纹支付修复参考
https://github.com/LineageOS/android_device_xiaomi_sdm845-common/commit/c8bb263e5bffa309be815f2a2cf34df393a78380

LineageOS编译相关推荐

  1. OnePlus 7T LineageOS 编译向导

    OnePlus 7T LineageOS 编译向导 安装编译所需依赖 sudo apt install bc bison build-essential ccache curl flex g++-mu ...

  2. 最新 lineageos 编译过程 详细过程

    sudo apt-get update https://github.com/MiCode/Xiaomi_Kernel_OpenSource repo init -u https://mirrors. ...

  3. 小米Max2 LineageOS编译过程 ubuntu

    第一步:配置环境,我的环境是ubuntu 17.10 sudo apt update sudo apt upgrade sudo apt install bc bison build-essentia ...

  4. lineageOS编译aosp源码并刷入小米Mix2S

    本篇文章教大家修改Android系统源码并刷入到自己的国产手机,这对于手上没有pixel手机的小伙伴来说是个好消息,本文以mix2 为例,其他手机基本可以才考这篇文章的思路去做,定制属于自己的操作系统 ...

  5. 红米Note4X lineageOs cm14.1耳机无声的问题解决方法

    喜欢linageOs ,所以在之前将自己的一个红米Note4X(全网通)版刷成了lineageOs 的 cm14.1定制系统,系统变得清爽了许多,没有任何第三方安装包,速度也快了不少. 但昨天使用耳机 ...

  6. 编译LineageOS

    参考: https://wiki.lineageos.org/devices/lemonadep/build https://wiki.lineageos.org/devices/lemonadep/ ...

  7. Ubuntu 小米6 LineageOS源码编译

    小米6 LineageOS 源码编译官方教程:https://wiki.lineageos.org/devices/sagit/build#extract-proprietary-blobs 1. 安 ...

  8. 编译 LineageOS 源码,并重定义 kernel log

    1.下载清华源的 repo curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo chmod +x repo ../repo i ...

  9. 给红米Note 4X编译LineageOS 14.1刷机包过程【详细】

    最近忙着找工作,今天就把以前的一篇文章放上来,防止自己搞忘,也帮助他人少走冤枉路.小米的MIUI确实做得很不错,但是可能你不会知道,它背后收集了大量你的系统数据和用户使用数据,现在是一个强调网络安全, ...

最新文章

  1. java编译POSTGRESQL_Java连接PostgreSQL数据库(安装环境 + 简易测试代码)
  2. listview移动时 item背景颜色错位问题
  3. mysql安装转自 http://www.cnblogs.com/azhw/p/5143232.html
  4. 物料主数据(MM03)跳转函数
  5. Red Hat Enterprise 5 server 上安装 memcached 的问题记录
  6. 微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项
  7. Django 框架02: 模型与站点
  8. IGNN图卷积超分网络:挖掘隐藏在低分辨率图像中的高清纹理
  9. 转:python的内置对象
  10. Node.js Express+Mongodb 项目实战
  11. 在制作只有一页的WORD小报时再添加一页
  12. 【2022年】帝豪gs/帝豪gl 车机安装第三方软件教程
  13. 泰安技师学院计算机专业,泰安技师学院有哪些系部和专业
  14. 自动化构建工作流--gulp
  15. 苹果手机连接Windows电脑导入照片出现重复
  16. IR(红外遥控)基本原理
  17. PDF编辑时怎样给PDF文件添加页码
  18. android 9.0 10.0 Launcher3修改workspace字体颜色
  19. 取出字符串中数字的最大值
  20. 使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【十七】部署 AFS 客户端 2 统一身份登录

热门文章

  1. 数据中心运营商如何选择合适的蓄电池
  2. 成功解决cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: err
  3. Python之 sklearn:sklearn中的train_test_split函数的简介及使用方法之详细攻略
  4. 成功解决AttributeError: ‘dict_values‘ object has no attribute ‘index‘
  5. ML之LoR:利用信用卡数据集(欠采样{Nearmiss/Kmeans/TomekLinks/ENN}、过采样{SMOTE/ADASYN})同时采用LoR算法(PR和ROC评估)进行是否欺诈二分类
  6. ML之xgboost:利用xgboost算法(sklearn+3Split)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  7. DL之pix2pix:基于TF利用pix2pix模型对food_resized数据集实现Auto Color自动上色技术—训练测试过程全记录
  8. Apache开源项目
  9. python中多进程+协程的使用以及为什么要用它
  10. 知识图谱基础知识之四——知识图谱的典型应用