接前一篇文章使用Android Studio查看Android Lollipop源码 , 我们知道,仅仅看代码,提高是比较有限的,而且理解起来也比较肤浅,往往过目就忘. 而自己写过的代码,往往会印象比较深刻,在写的时候也会比较容易理解流程. 所以我们在看代码的同时, 如果能修改代码, 在手机上跑起来并看到修改的效果,这无疑会加快看代码的效率和积极性. 所以这篇文章,就讲解一下如何自己编译AndroidL的源码,并且在Nexus5上跑起来. 至于为何需要自己编译固件,而不是直接安装Google给出的工厂固件?原因是Google给出的工厂固件是User版本,是没法随心所欲Push东西进去的. 所以我们需要编译自己的Userdebug版本.
本文假设你已经下载了AndroidL的源码,并且有一台Nexus5手机(手机系统开发人员必备), 如果你还没有AndroidL的源码,或者你有源码但是没有配置编译的环境,那么 Initializing a Build Environment 和Downloading the Source 这两篇文章你应该先去看一下(我又一次假设你会翻墙,如果你不会翻墙,那么下代码也是一个痛苦的事情). 这后面的教程Google官网也有教程.所以我只针对Nexus5进行讲解.
另外你需要知道AOSP,AOSP即Android Open Source Project 汉语意思是:谷歌开放源代码项目.我们通过Google官方下载的源代码,就是AOSP的代码, 其中是不包含Google开发的那些个应用的,各个厂商拿到的也是这个版本,在这个版本的基础上进行修改. 而Google发布的工厂固件则是包含全套Google服务的. 厂商如果想安装Google服务,就需要过Google的那一套认证,比较麻烦,而且价格不菲,鉴于Google在国内的尴尬地位,国内很多厂商都没有过这个认证.
1. 初始化编译环境
2. 加载机型
3. 选择要编译的机器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 You're building on Linux 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_ shamu-userdebug 8. aosp_manta-userdebug 9. full_ fugu-userdebug 10. aosp_fugu-userdebug 11. aosp_ grouper-userdebug 12. aosp_tilapia-userdebug 13. aosp_ deb-userdebug 14. aosp_flo-userdebug 15. aosp_ mako-userdebug 16. aosp_hammerhead-userdebug 17. aosp_ flounder-userdebug 18. mini_emulator_ x86_64-userdebug 19. mini_ emulator_arm-userdebug 20. mini_ emulator_x86-userdebug 21. mini_ emulator_mips-userdebug 22. mini_ emulator_arm64-userdebug
3.1 机型对照表
DEVICE
CODE NAME
BUILD CONFIGURATION
Nexus 6
shamu
aosp_shamu-userdebug
Nexus Player
fugu
aosp_fugu-userdebug
Nexus 9
volantis (flounder)
aosp_flounder-userdebug
Nexus 5 (GSM/LTE)
hammerhead
aosp_hammerhead-userdebug
Nexus 7 (Wi-Fi)
razor (flo)
aosp_flo-userdebug
Nexus 7 (Mobile)
razorg (deb)
aosp_deb-userdebug
Nexus 10
mantaray (manta)
full_manta-userdebug
Nexus 4
occam (mako)
full_mako-userdebug
Nexus 7 (Wi-Fi)
nakasi (grouper)
full_grouper-userdebug
Nexus 7 (Mobile)
nakasig (tilapia)
full_tilapia-userdebug
Galaxy Nexus (GSM/HSPA+)
yakju (maguro)
full_maguro-userdebug
Galaxy Nexus (Verizon)
mysid (toro)
aosp_toro-userdebug
Galaxy Nexus (Experimental)
mysidspr (toroplus)
aosp_toroplus-userdebug
PandaBoard (Archived)
panda
aosp_panda-userdebug
Motorola Xoom (U.S. Wi-Fi)
wingray
full_wingray-userdebug
Nexus S
soju (crespo)
full_crespo-userdebug
Nexus S 4G
sojus (crespo4g)
full_crespo4g-userdebug3.2
3.2 三个版本说明版本
BUILDTYPE
USE
user
limited access; suited for production
userdebug
like “user” but with root access and debuggability; preferred for debugging
eng
development configuration with additional debugging tools
选择aosp_hammerhead-userdebug之后,会有下面的确认信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = PLATFORM_VERSION_CODENAME= REL PLATFORM_VERSION= 5.0 .50.50 .50.50 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-3.13 .0 -37 -generic-x86_64-with-Ubuntu-14.10 -utopic HOST_BUILD_TYPE= release BUILD_ID= AOSP OUT_DIR= out = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
4. 生成驱动目录 接下来需要在Android官网 下载 Nexus5所需要的驱动:
HARDWARE COMPONENT
COMPANY
DOWNLOAD
MD5 CHECKSUM
SHA-1 CHECKSUM
NFC, Bluetooth, Wi-Fi
Broadcom
Link
2c398994e37093df51b105d63f0eb611
991346159c95ae75f760014a6822b8b3e8667700
Camera, Sensors, Audio
LG
Link
74cf8235e6bb04da28b2ff738b13eee9
175dd5bae81bb54030d072cb0f0b4ec81eb3f71f
Graphics, GSM, Camera, GPS, Sensors, Media, DSP, USB
Qualcomm
Link
0a43395e175d3de3dc312d8abdcb4f20
007cf9d49f0409d5c703e7f2811fd153fee22353
下载完成后,解压出来是三个.sh文件,放到Android源码目录下面,然后执行.会将相关驱动放到vender目录下面.
5. 执行编译命令
如果没有出错的话,在经过漫长的时间之后,编译成功:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Installed file list: out/target/ product/hammerhead/i nstalled-files.txt Target system fs image: out/target/ product/hammerhead/ obj/PACKAGING/ systemimage_intermediates/system.img Running: mkuserimg.sh -s out/target/ product/hammerhead/ system out/target/ product/hammerhead/ obj/PACKAGING/ systemimage_intermediates/system.img ext4 system 1073741824 -L system out/ target/product/ hammerhead/root/ file_contexts make_ext4fs -s -T -1 -S out/target/ product/hammerhead/ root/file_contexts -L system -l 1073741824 -a system out/ target/product/ hammerhead/obj/ PACKAGING/systemimage_intermediates/ system.img out/target/ product/hammerhead/ system Creating filesystem with parameters: Size : 1073741824 Block size : 4096 Blocks per group : 32768 Inodes per group : 8192 Inode size : 256 Journal blocks: 4096 Label: system Blocks: 262144 Block groups: 8 Reserved block group size : 63 Created filesystem with 1445 /65536 inodes and 85879/ 262144 blocks Install system fs image: out/target/ product/hammerhead/ system.img out/target/ product/hammerhead/ system.img+out/target/ product/hammerhead/ obj/PACKAGING/ recovery_patch_intermediates/recovery_from_boot.p maxsize=1096212480 blocksize=135168 total=336629666 reserve=11083776
6. 刷机命令 Nexus5关机状态下,长按音量下+电源,即可进入recovery模式, 然后在源码根目录下执行下面命令:
刷机成功后会自动重启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 ~/Android-SourceCode fastboot -w flashall target reported max download size of 1073741824 bytes Creating filesystem with parameters : Size: 13725835264 Block Blocks Inodes Inode Journal Label: Blocks: 3351034 Block Reserved Created /838832 inodes and 93654 / Creating Size: 734003200 Block Blocks Inodes Inode Journal Label: Blocks: 179200 Block Reserved Created /44832 inodes and 5813 / -------------------------------------------- Bootloader Baseband Serial -------------------------------------------- checking OKAY sending OKAY writing OKAY sending OKAY writing OKAY erasing OKAY sending OKAY writing OKAY erasing OKAY sending OKAY writing OKAY erasing OKAY sending OKAY writing OKAY rebooting... finished. total
7.秀桌面
关于我 && 博客
关于我 , 非常希望和大家一起交流 , 共同进步 .
博客内容导航
优秀博客文章记录 - Android 性能优化必知必会
一个人可以走的更快 , 一群人可以走的更远