安卓4.4刷linux系统下载,ubuntu 16.04 下 Android 4.4.4 源码编译到刷机

去年编译一次,折腾蛮久才弄好,今年准备深入研究一些Android虚拟机源码,发现全忘记了,又要花时间去折腾一次。 就记录备忘下来。方便下次在弄的时候,不用再去查询资料。

我的硬件是 nexus 5. 编译的版本是4.4.4,为什么用这个低版本呢,因为这个版本比较特殊。支持davik 和 art 两种虚拟机。

一、 相关工具安装

1、安装jdk

jdk 分openjdk 和oracle jdk,android 4.4.4 的编译 需要用oracle jdk 1.6版本(高版本又是必须用openjdk)。否则会在准备编译工作make clobber时出现错误。

sudo apt-get install python-software-properties

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

sudo apt-get install oracle-java6

2、repo工具

使用apt-get install repo 安装的repo不行, 用这个覆盖掉吧。

curl > /usr/bin/repo

3、安装依赖包

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386

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 libgl1-mesa-dev libxml2-utils xsltproc unzip m4

sudo apt-get install lib32z-dev ccache

4、其他工具

make 工具的版本要求必须是 3.81 和 3.82。 由于不想把make降级。网上看到一个偷懒办法,试验下来至少编译4.4.4 的源码没有问题。 就是修改build/core/main.mk文件

ifeq (0,$(shell expr $$(echo $(MAKE_VERSION) | sed "s/[^0-9\.].*//") = 3.81))

ifeq (0,$(shell expr $$(echo $(MAKE_VERSION) | sed "s/[^0-9\.].*//") = 3.82))

ifeq (0,$(shell expr $$(echo $(MAKE_VERSION) | sed "s/[^0-9\.].*//") = 4.1)) #加上这一行

记得补上一个endif

二、下载源代码

1、下载源码

因为google域名被墙,所以使用清华源,下载对应的版本分支,我这里选择4.4.4_r1 这个分支

export REPO_URL='/'

repo init -u --depth 1 -b android-4.4.4_r1

repo sync -c -j8

下载时间大概1小时左右,有时候会丢失一些文件,需要多执行几次 repo sync 同步几次。如果硬盘空间有限可以删除.repo 目录, 因为后续编译的中间文件也会占用50G。

2、下载设备驱动

从谷歌网址知道 Android 4.4.4 r1 源码编译成功后的镜像文件的编号为 KTU84P

在谷歌网址https://developers.google.com/android/drivers上,查询到编号 KTU84P 对应的Nexus 5设备刷机需要的驱动设备文件的下载地址https://developers.google.com/android/drivers#hammerheadktu84p下载 3个 文件 broadcom-hammerhead-ktu84p-5a5bf60e.tgz,lge-hammerhead-ktu84p-49419c39.tgz,qcom-hammerhead-ktu84p-f159eadf.tgz。

使用tar xzvf 命令 解压三个 tgz文件。得到 3个sh文件extract-broadcom-hammerhead.sh extract-lge-hammerhead.sh extract-qcom-hammerhead.sh。用chmod 命令添加执行权限;

执行3个脚本;会输出一些代码文件分别到vendor/broadcom vendor/lge vendor/qcom.

vendor

├── broadcom

├── lge

└── qcom

3、代码目录

aosp-4.4.4_r1

├── abi

├── art

├── bionic

├── bootable

├── build

├── cts

├── dalvik

├── developers

├── development

├── device

├── docs

├── external

├── extract-broadcom-hammerhead.sh

├── extract-lge-hammerhead.sh

├── extract-qcom-hammerhead.sh

├── frameworks

├── hardware

├── libcore

├── libnativehelper

├── Makefile

├── ndk

├── out

├── packages

├── pdk

├── prebuilts

├── sdk

├── system

├── tools

└── vendor

三、代码编译

/source/building.html

1、清理

make clobber

2、设置环境

使用 envsetup.sh 脚本初始化环境。请注意,将 source 替换成 .(一个点)可以省去一些字符,这种简写形式在文档中更为常用。

$ source build/envsetup.sh

or

$ . build/envsetup.sh

3、选择目标

使用 lunch 选择要编译的目标。确切的配置可作为参数进行传递。例如以下命令:

lunch

列出选择菜单

You're building on Linux

Lunch menu... pick a combo:

1. aosp_arm-eng

2. aosp_x86-eng

3. aosp_mips-eng

4. vbox_x86-eng

5. aosp_deb-userdebug

6. aosp_flo-userdebug

7. aosp_grouper-userdebug

8. aosp_tilapia-userdebug

9. mini_armv7a_neon-userdebug

10. mini_mips-userdebug

11. mini_x86-userdebug

12. aosp_hammerhead-userdebug

13. aosp_mako-userdebug

14. aosp_manta-userdebug

Which would you like? [aosp_arm-eng]

那我选择哪一个呢,我的设备是nexus 5 (这个可是神机). 从可以找到他的代号是 Nexus 5 hammerhead

那我就选择 aosp_hammerhead-userdebug 这个啦

4、编译代码

make -j16

编译过程比较长,需要3-4个小时,产生的out目录比较大,会占用40G(可怜我一共才250G磁盘空间)。可以用个软连接迁移到移动硬盘或其他分区。

我的编译过程比较顺利,没有碰到什么问题。看网上有人遇到不少编译问题。编译完后目录大小

四、刷机

1、先看一下我从google网站下载google提供制作好的nexus 5 刷机包有那些内容。

hammerhead-ktu84p

├── bootloader-hammerhead-hhz11k.img

├── flash-all.bat

├── flash-all.sh

├── flash-base.sh

├──image-hammerhead-ktu84p.zip

└── radio-hammerhead-m8974a-2.0.50.1.16.img

再解压展开一下zip文件

hammerhead-ktu84p

├── bootloader-hammerhead-hhz11k.img

├── flash-all.bat

├── flash-all.sh

├── flash-base.sh

├──image-hammerhead-ktu84p

│   ├── android-info.txt

│   ├── boot.img

│   ├── cache.img

│   ├── recovery.img

│   ├── system.img

│   └── userdata.img

└── radio-hammerhead-m8974a-2.0.50.1.16.img

2、再看一下我刚刚从源码编译玩的目录

/data/code/aosp-4.4.4_r1/out/target/product/hammerhead/

hammerhead/

├──android-info.txt

├──boot.img

├── cache

├──cache.img

├── clean_steps.mk

├── data

├── fake_packages

├── installed-files.txt

├── kernel

├── obj

├── previous_build_config.mk

├── ramdisk.img

├── ramdisk-recovery.img

├── recovery

├──recovery.img

├── root

├── symbols

├── system

├──system.img

└──userdata.img

是不是 image-hammerhead-ktu84p.zip 里面的包,编译目录下都有。至于前面两个,我猜应该是和设备相关,需要又厂家提供,不在源码包内。

3、开始刷机

$ cd out/target/product/hammerhead

$ adb reboot bootloader

$ export ANDROID_PRODUCT_OUT=/data/code/aosp-4.4.4_r1/out/target/product/hammerhead

$ fastboot flashall -w

target reported max download size of 1073741824 bytes

wiping userdata...

mke2fs 1.43.3 (04-Sep-2016)

Creating filesystem with 3351034 4k blocks and 838832 inodes

Filesystem UUID: f0268e91-bcf1-4615-9f14-2cf67eb1edd5

Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done wiping cache...

mke2fs 1.43.3 (04-Sep-2016)

Creating filesystem with 179200 4k blocks and 44832 inodes

Filesystem UUID: 74629560-fc3f-403c-a085-fb3e6522e80d

Superblock backups stored on blocks: 32768, 98304, 163840 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done --------------------------------------------

Bootloader Version...: HHZ12k

Baseband Version.....: M8974A-2.0.50.2.27 Serial Number........: 0aa83005029aa24e

--------------------------------------------

checking product...

OKAY [ 0.100s]

sending 'boot' (8700 KB)...

OKAY [ 0.490s]

writing 'boot'...

OKAY [ 0.741s]

sending 'recovery' (9284 KB)...

OKAY [ 0.549s]

writing 'recovery'...

OKAY [ 0.780s]

erasing 'system'...

OKAY [ 1.231s]

sending 'system' (291004 KB)...

OKAY [ 9.341s]

writing 'system'...

OKAY [ 21.185s]

erasing 'userdata'...

OKAY [ 10.514s]

sending 'userdata' (4288 KB)...

OKAY [ 0.350s]

writing 'userdata'...

OKAY [ 0.476s]

erasing 'cache'...

OKAY [ 0.664s]

sending 'cache' (428 KB)...

OKAY [ 0.230s]

writing 'cache'...

OKAY [ 0.216s]

rebooting...

finished. total time: 47.445s

刷机时候碰到一个问题

使用adb devices 可以发现设备,但是使用 fastboot devices 无法发现设备。后来切到root用户下就可以

详细可以参考官方文档

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值