android源码编译之后的刷机过程

来源:互联网 发布:天干地支年月计算法 编辑:程序博客网 时间:2024/05/20 21:48

       android源码并且编译成功有好长一段时间了,之前是通过android emulator运行,由于大部分真实的android 设备都是在arm上跑,所以刚开始编译选择的是arm现相关的device,但使用emulator去运行简直就是惨不忍睹,每次开机system process anr,操作UI反应缓慢。于是没有办法,又换成了x86,但我想学习的是android 系统层,并非apk(HAL和kernel和平台的指令集有关系),加上现在也没有听说过有几个android x86平台。于是咬咬牙,买了一台google的亲儿子,pixel,等了大半个月,终于收到了。买了当然就要开始搞机了,不然花了5000多大洋,不搞搞它心里不舒服~~

1. 源码与驱动的准备

  • 环境及aosp
    aosp的下载及环境搭建可以参考下面这篇文章《MacBook Pro android 7.0 编译环境搭建》。
    具体需要选择那个code branch 及TAG,可以查看 https://source.android.com/source/build-numbers#source-code-tags-and-builds,我这里是根据手机的版本来选择,查看settings -> about phone -> build number. 显示NOF26V,所以本文中实验的source code TAG 对应的是:
    这里写图片描述

  • 下载驱动
    上面已经准备好AOSP的source code了,但android并非开源代码,单单凭借repo拉下来的代码编译出来只能在模拟器上跑,并不能在真实的设备上运行,这里还需要driver支持。
    对于google的标杆机器,可以从google developer 网站中获取:
    这里写图片描述
    上面两份下载后解压,放在AOSP source code的根目录进行解压,会自动将driver放入对应的目录,一般上放在vendor下面:

    drwxr-x— 4 staff 136 1 27 08:48 google_devices
    drwxr-x— 3 staff 102 1 27 08:48 qcom

  • 选择device并且编译
    一切环境和源码准备就绪后,接下来就编译出我们的刷机包。pixel的device需要选择sailfish,即在lunch这一步选择的是aosp_sailfish_userdebug,这个userdebug,是有su命令的,方便获取root权限,做我们喜欢做的事情。

    PLATFORM_VERSION_CODENAME=REL
    PLATFORM_VERSION=7.1.1
    TARGET_PRODUCT=aosp_sailfish
    TARGET_BUILD_VARIANT=userdebug
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm64
    TARGET_ARCH_VARIANT=armv8-a
    TARGET_CPU_VARIANT=generic
    TARGET_2ND_ARCH=arm
    TARGET_2ND_ARCH_VARIANT=armv7-a-neon
    TARGET_2ND_CPU_VARIANT=krait
    HOST_ARCH=x86_64
    HOST_2ND_ARCH=x86
    HOST_OS=darwin
    HOST_OS_EXTRA=Darwin-15.6.0-x86_64-i386-64bit
    HOST_CROSS_OS=
    HOST_CROSS_ARCH=
    HOST_CROSS_2ND_ARCH=
    HOST_BUILD_TYPE=release
    BUILD_ID=NOF26V
    OUT_DIR=out

  • 生成的image
    编译完成之后,我们可以看到out/target/product/sailfish/已经生成了image:

    生成的image只有boot,system,userdata及vendor。一般上我们学习和分析android 系统知识,只需要改动system分区。如果需要改动kernel,需要刷入boot.img,所以已经足够了。
    我们再看看google提供的factory image:
    这里写图片描述
    多了许多image,有很多本人也没有搞明白其作用。factory image可以通过fastboot刷入,如果不小心玩坏了,也可以通过这个来还原,在bootloader下面,连上pc机,执行flash-all.sh。

解锁bootloader

一般为了安全起见,非官方的rom是无法刷入的,或者刷入了之后也无法起来。pixel解锁bootloader的方法如下:
1.打开手机的developer options。进入settings->abount phone->build number. 联系点击5次,将会在setting中出现developer options。
2.打开usb debugging。developer options -> usb debugging
3.OEM unlocking. developer options -> OEM unlocking
4.unlock bootloader. adb reboot bootloader , 机器重新启动后,进入bootloader。然后执行:

$ fastboot flashing unlock

然后到手机中确认,此时数据会被清除。

利用fastboot刷机

上面已经完成了准备,现在开始刷入我们编译的image,在AOSP的根目录下执行:

$ fastboot -w flashall

会将out目录下的所有image刷入,也可以单个image刷入:

fastboot flash system out/target/product/sailfish/system.img
fastboot flash system out/target/product/sailfish/boot.img

将单个system image输入,无法开机,估计system和boot或者和vendor之前有签名检查。
也可以将image打包完刷入:

fastboot -w update image-sailfish-nof26v.zip

打包结果可以参考从google下载的factory image。

直接从aosp编译的升级包,UI挺丑的:
这里写图片描述

如果有兴趣让手机更美观,或者想享受google服务,可以将GMS刷入到手机中,不过一般的开发者是拿不到的,需要google的合作伙伴才能拿到GMS这套软件,当然,世界上总是有很多人愿意用盗版的,可以从该网站获取Gapp:http://opengapps.org/。

0 0