当前位置:   article > 正文

[日更-2019.3.31]如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译、刷机

nexus5x刷机包集合

声明

  • 最近在做公司Android系统开发,版本为7.1.1,但是作为技术点总结总不能把公司的系统源码公布出来
  • 所以,为了方便我写博客,就用LineageOS作为系统源码来进行分析好了
  • LineageOS 的cm-14.1对应的就是Android 7.1.1,而且我手头有一部Nexus5手机,所以这里我就下载Nexus5 对应的cm-14.1版本了
  • LineageOS
  • TheMuppets

1 下载cm-14.1源码前的准备

1.1 前提是自己要有vps服务器

因为需要科学上网下载代码的原因,我大概讲解下ubuntu系统中如何配置ShadowSocks环境。不过前提是要搭建有vps服务器才能使用。比如:Vultr (可以搜索如何搭建ss服务器)

1.2 配置编译环境

  1. 安装jdk

android 7.1需要的是openjdk8

  1. sudo apt-get update
  2. sudo apt-get install openjdk-8-jdk
  1. 其它依赖
  1. sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
  2. sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
  3. sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
  4. sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
  5. sudo apt-get install git-core gnupg flex bison gperf build-essential
  6. sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
  7. sudo apt-get install libc6-dev-i386
  8. sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
  9. sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
  10. sudo apt-get install lib32z-dev ccache

1.3 在本地Ubuntu中安装shadowsocks

  1. 安装shadowsocks:
  1. sudo apt-get install python-pip
  2. pip install shadowsocks
  1. 新建配置文件:
vim  /etc/shadowsocks/config.json
  1. {
  2.     "server":"vps服务器ip",
  3.     "server_port":vps服务器端口,
  4.     "local_address": "127.0.0.1",
  5.     "local_port":1080,
  6.     "password":"vps服务器端口密码",
  7.     "timeout":300,
  8.     "method":"aes-256-cfb",
  9.     "fast_open": true,
  10.     "workers": 1
  11. }
  1. 设置http代理:
sudo apt-get install privoxy

修改配置文件/etc/privoxy/config

  1. #修改此行为:
  2. forward-socks5 / 127.0.0.1:1080 . ( 为自己shadowsocks监听的本地端口)
  1. 配置环境变量
vim ~/.bashrc

在最后一行添加:

alias ssp='export http_proxy=http://localhost:8118 && export https_proxy=http://localhost:8118'

执行~/.bashrc

source ~/.bashrc
  1. 手动启动shadowsocks客户端:
sslocal -c /etc/shadowsocks/config.json &

会提示:

  1. maxingrong@soc02:$ INFO: loading config from /etc/shadowsocks/config.json
  2. 2019-03-27 18:51:12 INFO loading libcrypto from libcrypto.so.1.0.0
  3. 2019-03-27 18:51:12 INFO starting local at 127.0.0.1:1080

1.3 安装repo工具

  1. mkdir ~/bin
  2. export PATH=~/bin:$PATH  #添加path环境变量到.bashrc文件末尾
  3. ssp
  4. curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
  5. sudo chmod a+x ~/bin/repo

2 cm14-1源码下载

2.1 初始化下载

  1. 在系统中新建源码存放目录:
  1. mkdir LineageOS
  2. cd LineageOS
  1. 初始化cm-14.1的repo
repo init -u git://github.com/LineageOS/android.git -b cm-14.1

2.2 配置Nexus5独有下载项

因为要使用的设备为Nexus5,所以其devices、kernel、vendor要单独列出下载地址:

修改文件~/LineageOS/.repo/local_manifests内容为:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <manifest>
  3. <project name="LineageOS/android_device_qcom_common" path="device/qcom/common" remote="github" />
  4. <project name="LineageOS/android_device_lge_hammerheadcaf" path="device/lge/hammerheadcaf" remote="github" />
  5. <project name="LineageOS/android_device_lge_hammerhead" path="device/lge/hammerhead" remote="github" />
  6. <project name="LineageOS/android_kernel_lge_hammerhead" path="kernel/lge/hammerhead" remote="github" />
  7. <project name="TheMuppets/proprietary_vendor_lge" path="vendor/lge" remote="github" revision="cm-14.1" />
  8. </manifest>

2.3 下载同步代码

  1. 使用repo命令下载源代码
repo sync -j8 --no-clone-bundle

其中:

  1. -j:开启多线程同步操作,会加快sync命令的执行速度。默认情况下,使用4个线程并发进行sync
  2. -c, –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程
  3. 分支,当远程分支比较多的时候,下载的代码量就大。使用该参数,可以缩减下载时
  4. 间,节省本地磁盘空间。
  5. -d, –detach:脱离当前的本地分支,切换到manifest.xml中设定的分支。在实际操作
  6. 中这个参数很有用,当我们第一次sync完代码后,往往会切换到dev分支进行开发。
  7. 如果不带该参数使用sync, 则会触发本地的dev分支与manifest设定的远程分支进行
  8. 合并,这会很可能会导致sync失败。
  9. -f, –force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git
  10. 库。
  11. –no-clone-bundle:在向服务器发起请求时,为了做到尽快的响应速度,会用到内容
  12. 分发网络(CDN, Content Delivery Network)。同步操作也会通过CDN与就近的服务器
  13. 建立连接, 使用HTTP/HTTPS的$URL/clone.bundle来初始化本地的git库,
  14. clone.bundle实际上是远程git库的镜像,通过HTTP直接下载,这会更好的利用网络
  15. 带宽,加快下载速度。

值得注意的是:

因为是从外网直接下载的,所有这个是个漫长的过程,建议晚上下载。不过清华有源可以下载,但是清华的源不包含我说说的2.2节的Nexus5 的devices、kernel、vendor的源码,可以自己手动到 LineageOSTheMuppets去下载对应代码,再手动添加到你的LineageOS的源码目录中。**


  1. 下面是我同步完成后的Nexus5 cm14.1的源码目录:

我同步完成后的LineageOS源码目录

3 编译代码

3.1 编译代码前的配置

  1. 设置环境变量,与aosp编译类似,编译前同样需要引入环境
source build/envsetup.sh
  1. 为了加速以后的编译过程,可以开启缓存加速
  1. export USE_CCACHE=1
  2. prebuilts/misc/linux-x86/ccache/ccache -M 50G
  3. export CCACHE_COMPRESS=1
  1. 还需要开启配置jack编译器
  1. export JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx16g”
  2. ./prebuilts/sdk/tools/jack-admin kill-server
  3. ./prebuilts/sdk/tools/jack-admin start-server
  1. 开启自带root
export WITH_SU=true
  1. breakfast(相当于lunch命令)

准备构建前,需要先告诉编译系统你要编译什么,这里的话与aosp有点差异,它使用的是一个叫”breakfast“的命令,与lunch类似,但后面加的构建信息可以是直接从devices目录下的名字,如n5为hammerhead

breakfast hammerhead
  1. 开始编译lunch(相当于make -jx)
brunch hammerhead
  1. 编译过程中出问题的话,找百度处理,我就很顺利的

  2. 编译完成后的out目录

编译完成后的out目录

4 刷机

4.1 刷机前的准备

因为我是在公司编译服务器中编译的,可以把out目录中的recovery.img、system.img、userdata.img、boot.img、cache.img复制到我自己的Win7电脑的一个目录下,同时目录中包含win7平台的adb、fastboot工具:

把out目录中的recovery.img、system.img、userdata.img、boot.img、cache.img复制到我自己的Win7电脑一个目录下

写一个刷机脚本flash.bat:

  1. @ECHO OFF
  2. REM read config file
  3. setlocal ENABLEDELAYEDEXPANSION
  4. set loop=0
  5. for /F "tokens=*" %%A in (.config) do (
  6. SET /A loop=!loop! + 1
  7. set %%A
  8. )
  9. set DEVICE_FOUND=0
  10. REM nexus has device instead of product name
  11. IF [%PRODUCT_NAME%]==[] (
  12. set PRODUCT_NAME=%DEVICE%
  13. )
  14. REM if nexus 4 assume you are in fastboot mode, can't seem to find drivers
  15. IF [%DEVICE%]==[mako] (
  16. call :flash
  17. )
  18. REM push device from adb to fastboot mode
  19. win_adb kill-server
  20. win_adb devices
  21. win_adb get-state > devicestate.txt
  22. set /p DEVICE_STATE= < devicestate.txt
  23. IF NOT "%DEVICE_STATE%"=="device" (
  24. ECHO Please check :
  25. ECHO 1. to make sure that only one device is connected to the computer
  26. ECHO 2. the device is turned on with the screen showing
  27. ECHO 3. the device is set to debugging via USB : ADB Only or ADB and Devtools
  28. ECHO 4. the device drivers are installed on the computer.
  29. Del devicestate.txt
  30. PAUSE
  31. EXIT /b
  32. )
  33. Del devicestate.txt
  34. win_adb reboot bootloader
  35. TIMEOUT 5
  36. :flash
  37. win_fastboot devices 2> fastboot_state.txt
  38. set /p FASTBOOT_STATE= < fastboot_state.txt
  39. IF NOT [%FASTBOOT_STATE%]==[] (
  40. ECHO Please check :
  41. ECHO 1. to make sure that only one device is connected to the computer
  42. ECHO 2. the device is turned on with an indication that the device is in fastboot mode
  43. ECHO 3. the fastboot drivers are installed on the computer.
  44. Del fastboot_state.txt
  45. PAUSE
  46. EXIT /b
  47. )
  48. Del fastboot_state.txt
  49. ECHO "Flashing build. If nothing mentions that it flashed anything and it looks stuck, make sure you have the drivers installed."
  50. win_fastboot flash boot ./boot.img
  51. win_fastboot flash system ./system.img
  52. win_fastboot flash persist ./persist.img
  53. win_fastboot flash recovery ./recovery.img
  54. win_fastboot flash cache ./cache.img
  55. win_fastboot flash userdata ./userdata.img
  56. ECHO "Done..."
  57. win_fastboot reboot
  58. echo "Just close the windows as you wish."
  59. TIMEOUT 5

4.2 执行刷机脚本

给Nexus5 插好线,双击flash.bat即可开始刷机了!!

4.3 刷机完成啦,Enjoy it!!

Nexus5 成功刷入cm-14.1

4.4 另外,还可以使用卡刷的方式刷机

卡刷可以参考:

简年7:快来收藏!最全的Lineage OS 刷机教程及系统体验!

刷入第三方 recovery twrp

转载于:https://my.oschina.net/XiaoMaPedro/blog/3028748

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/236547
推荐阅读
相关标签
  

闽ICP备14008679号