Android AOSP 6

repo sync

这还不够,因为很有可能出错跳出来了,我们需要一个脚本,在出问题的情况下再次执行repo sync,在当前需要下载源码的目录下新建down.sh文件,直接使用vi命令即可。

vi down.sh

接下来,在vi编辑器内输入下面这段脚本代码,保存退出。

#!/bin/sh
repo sync
while [ $? -ne 0 ]
do
repo sync
done

用这段脚本执行,替换repo sync这条命令。

./down.sh

N个小时过去后,终于下载好了。小水管的笔者下了15个多小时才完成。开始着手搭建源码编译环境。

五、源码编译

对应分支的源码下载好以后,接下来就开始激动人心的编译工作,但编译之前还需要先配置环境。

1.搭建编译环境

笔者环境

  • Ubuntu 16.04 LTS
  • Android android-6.0.1_r72分支源码
  • Open JDK 7

上面的两者已经具备了,那么还需要安装Open JDK 7,注意是Open JDK,并非甲骨文的Oracle JDK。

这部分内容引自csdn博主梧桐那时雨。

(1) 更换软件源

为了更快的安装软件,我们需要更换软件源为国内的软件源,这里推荐使用Ubuntu官方指定的国内软件源阿里云,具体方法是:

sudo gedit /etc/apt/sources.list

在文件最前面加入下面代码:

deb http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ quantal-backports main restricted universe multiverse

(2) 安装依赖

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g+±multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g+±multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

Ubuntu 16.04请务必使用上面的依赖,Ubuntu 16.04需要的依赖和Ubuntu 14.04所需要的依赖是不同的。

(3) 安装open JDK7

由于Ubuntu 16.04没有OpenJDK7的源,因此在16.04上安装OpenJDK7需要执行下面的命令:

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk

配置OpenJDK.打开/etc/profile文件:

sudo gedit /etc/profile

在末尾追加下面代码:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= JREHOME/libexportPATH={JAVA_HOME}/bin:$PATH

修改了/etc/profile文件需要重启才能生效,但使用下面命令可以在不重启的情况下在当前bash环境生效:

source /etc/profile

检查OpenJDK配置是否正确:

java -version

配置正确如下图:

[外链图片转存中…(img-9AvRw4Rc-1734629008142)]

2.修改源码待编译

修改android-6.0.1_r72/art/build/Android.common_build.mk 文件,定位到75行,将下面的代码改为false:

ifneq ( ( W I T H O U T H O S T C L A N G ) , t r u e ) 改为 i f e q ( (WITHOUT_HOST_CLANG),true) 改为 ifeq ( (WITHOUTHOSTCLANG),true)改为ifeq((WITHOUT_HOST_CLANG),false)

3.下载驱动

官网下载对应版本的驱动:developers.google.com/android/nex…

[外链图片转存中…(img-ZmnNH8Vo-1734629008144)]
[外链图片转存中…(img-345GdfaZ-1734629008144)]

我这里下载对应的M4B30X,下载成功后得到三个压缩包broadcom-hammerhead-m4b30x-7c7b231f.tgz、lge-hammerhead-m4b30x-74fa3aa5.tgz、qcom-hammerhead-m4b30x-158606cf.tgz,解压这三个压缩包,解压出来是三个sh文件,放到Android源码目录下面即android-6.0.1_r72下,然后执行。会将相关驱动放到vender目录下面。

拷贝三个sh到源码目录:

cp /media/lhw/LHW/extract-broadcom-hammerhead.sh /home/lhw/aosp/android-6.0.1_r72/
cp /media/lhw/LHW/extract-lge-hammerhead.sh /home/lhw/aosp/android-6.0.1_r72/
cp /media/lhw/LHW/extract-qcom-hammerhead.sh /home/lhw/aosp/android-6.0.1_r72/

拷贝成功后,赋予执行权限

chmod a+x extract-broadcom-hammerhead.sh
chmod a+x extract-lge-hammerhead.sh
chmod a+x extract-qcom-hammerhead.sh

执行每个sh,输入I ACCEPT,最终将驱动放到vender目录待使用。

4.开始编译

(1) 在 .bashrc文件末尾添加:export USE_CCACHE = 1

echo export USE_CCACHE=1 >> ~/.bashrc

(2) 为了提高编译效率,设置编译器高速缓存:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

(3) 接着导入编译Android源码所需的环境变量和其它参数:

source build/envsetup.sh

including device/asus/deb/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/htc/flounder/vendorsetup.sh
including device/huawei/angler/vendorsetup.sh
including device/lge/bullhead/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/moto/shamu/vendorsetup.sh
including sdk/bash_completion/adb.bash

(4) 运行lunch命令选择编译目标:

lunch

Lunch menu… pick a combo:

  1. aosp_arm-eng
  2. aosp_arm64-eng
  3. aosp_mips-eng
  4. aosp_mips64-eng
  5. aosp_x86-eng
  6. aosp_x86_64-eng
  7. aosp_deb-userdebug
  8. aosp_flo-userdebug
  9. full_fugu-userdebug
  10. aosp_fugu-userdebug
  11. mini_emulator_arm64-userdebug
  12. m_e_arm-userdebug
  13. mini_emulator_mips-userdebug
  14. mini_emulator_x86_64-userdebug
  15. mini_emulator_x86-userdebug
  16. aosp_flounder-userdebug
  17. aosp_angler-userdebug
  18. aosp_bullhead-userdebug
  19. aosp_hammerhead-userdebug
  20. aosp_hammerhead_fp-userdebug
  21. aosp_shamu-userdebug

选择19:

Which would you like? [aosp_arm-eng] 19

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=6.0.1
TARGET_PRODUCT=aosp_hammerhead
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=krait
TARGET_2ND_ARCH=
TARGET_2ND_ARCH_VARIANT=
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.4.0-47-generic-x86_64-with-Ubuntu-16.04-xenial
HOST_BUILD_TYPE=release
BUILD_ID=M4B30X
OUT_DIR=out

(5) 开始编译,执行make -j6, 6为同时编译的线程数,一般google推荐这个数字为2倍的cpu个数再加上2,比如4核,就是10。

make -j6

查看cpu核心个数命令:

cat /proc/cpuinfo

编译结束,大功告成!首次编译花费了6个多小时,out目录会有对应的输出文件。

五、刷机

1.adb、fastboot命令生效

关于这一步大家应该不陌生,android platform-tools里有adb、fastboot。具体可以到www.androiddevtools.cn/下载,配置环境变量,确保fastboot命令正常工作。

2.进入recovery模式

Nexus 5关机状态下,长按音量下键和power键,即可进入recovery模式
[外链图片转存中…(img-fKVZJKcW-1734629008144)]

3.开始刷机

源码根目录下输入:

fastboot -w flashall

执行命令后输出如下:

target reported max download size of 1073741824 bytes
Creating filesystem with parameters:
Size: 29236371456
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 32768
Label:
Blocks: 7137786
Block groups: 218
Reserved block group size: 1024
Created filesystem with 11/1785856 inodes and 156120/7137786 blocks
Creating filesystem with parameters:
Size: 734003200
Block size: 4096
Blocks per group: 32768
Inodes per group: 7472
Inode size: 256
Journal blocks: 2800
Label:
Blocks: 179200
Block groups: 6
Reserved block group size: 47
Created filesystem with 11/44832 inodes and 5813/179200 blocks

Bootloader Version…: HHZ20f
Baseband Version…: M8974A-2.0.50.2.29
Serial Number…: 0313b757307b7e19

checking product…
OKAY [ 0.100s]
sending ‘boot’ (9160 KB)…
OKAY [ 0.630s]
writing ‘boot’…
OKAY [ 0.799s]
sending ‘recovery’ (10018 KB)…
OKAY [ 0.701s]
writing ‘recovery’…
OKAY [ 0.842s]
erasing ‘system’…
OKAY [ 1.048s]
sending ‘system’ (406390 KB)…
OKAY [ 17.923s]
writing ‘system’…
OKAY [ 29.100s]
erasing ‘userdata’…
OKAY [ 16.383s]
sending ‘userdata’ (139109 KB)…
OKAY [ 5.941s]
writing ‘userdata’…
OKAY [ 9.321s]
erasing ‘cache’…
OKAY [ 0.602s]
sending ‘cache’ (13348 KB)…
OKAY [ 0.760s]
writing ‘cache’…
OKAY [ 1.064s]
rebooting…

finished. total time: 86.021s

总记86.021s,通过fastboot命令将boot.img、recovery.img、system.img等镜像文件写入了手机,手机自动重启,这时候比平时要慢一些。

首次开机:
[外链图片转存中…(img-IyDhcHVk-1734629008145)]

没有谷歌全家桶的桌面:
[外链图片转存中…(img-6eDBwv2e-1734629008145)]

再来看看设置,Build number 中可以看到M4B30X,这是google支持nexus 5最新的代码了,官方不再更新。
[外链图片转存中…(img-6pTMqXVe-1734629008145)]

由于编译的是userdebug版本,系统已经自带root权限,我们来看一下。
adb root
输出adbd is already running as root,一切正常,以后可以通过只烧写部分模块查看修改了,毕竟全编太耗时了。
以上就是从PC乌班图系统安装到安卓源码下载,再到编译和刷机的所有内容,万里长征的第一步,以后就可以随心所欲的源码探索之旅了。


参考资料

1.http://blog.csdn.…
2.http://blog.csdn.…

再来看看设置,Build number 中可以看到M4B30X,这是google支持nexus 5最新的代码了,官方不再更新。
[外链图片转存中…(img-6pTMqXVe-1734629008145)]

由于编译的是userdebug版本,系统已经自带root权限,我们来看一下。
adb root
输出adbd is already running as root,一切正常,以后可以通过只烧写部分模块查看修改了,毕竟全编太耗时了。
以上就是从PC乌班图系统安装到安卓源码下载,再到编译和刷机的所有内容,万里长征的第一步,以后就可以随心所欲的源码探索之旅了。


参考资料

1.http://blog.csdn.…
2.http://blog.csdn.…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值