积跬步至千里系列之十--编译Android源码实践
来源:互联网 发布:淘宝客在哪推广 编辑:程序博客网 时间:2024/06/13 00:51
Android源码编译的步骤之前看过,没有自己实践过。今天抽出时间写一篇自己编译源码的总结。
我的源码是从别人硬盘上拷贝的所有版本的镜像,省去了翻墙下载的漫长过程。Android源码是用repo来进行管理的,我的理解repo其实就是对git的又一次封装,在git包含了所有的项目分支。
1.第一步.获取源码。根据google给出的文档说明,可以知道获取源码一般有两种方式,第一种是从google提供的源码链接中获取,然后获取指定分支,拉取代码;另外一种方式就是从一个镜像中检出获取。我在实践编译时使用的第二种,省区了漫长的等待时间.下面就说一下两种方式
第一种 : 根据源码链接获取//创建一个空目录$ mkdir WORKING_DIRECTORY$ cd WORKING_DIRECTORY//配置用户名和邮箱$ git config --global user.name "Your Name"$ git config --global user.email "you@example.com"//init命令会根据url所指向的地址获取最新的版本$ repo init -u https://android.googlesource.com/platform/manifest//该命令表示从url中检出-b后所指定的特定分支 repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1//接下来就是获取上面所指定的分支代码$ repo sync第二种:从一个镜像获取.不需要网络连接//create and sync the mirror itself. $ mkdir -p /usr/local/aosp/mirror$ cd /usr/local/aosp/mirror$ repo init -u https://android.googlesource.com/mirror/manifest --mirror$ repo sync//Once the mirror is synced, new clients can be created from it. Note that it's important to specify an absolute path:$ mkdir -p /usr/local/aosp/master$ cd /usr/local/aosp/master$ repo init -u /usr/local/aosp/mirror/platform/manifest.git$ repo sync//Finally, to sync a client against the server, the mirror needs to be synced against the server, then the client against the mirror:$ cd /usr/local/aosp/mirror$ repo sync$ cd /usr/local/aosp/master$ repo sync
2.下载固件.我使用的是Nexus5,这个需要到源码目录下执行lunch看一下要编译的版本所对应的版本名称,然后到google上下载对应的固件。
lunchYou're building on DarwinLunch 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. aosp_grouper-userdebug 12. aosp_tilapia-userdebug 13. mini_emulator_arm64-userdebug 14. m_e_arm-userdebug 15. mini_emulator_mips-userdebug 16. mini_emulator_x86-userdebug 17. mini_emulator_x86_64-userdebug 18. aosp_flounder-userdebug 19. aosp_hammerhead-userdebug 20. aosp_mako-userdebug 21. aosp_shamu-userdebug 22. aosp_manta-userdebugWhich would you like? [aosp_arm-eng] 21
如上图,我们进入到检出的源码根据目录中,执行lunch命令,就会列出一个编译版本列表,我们从终端键入我们要编译的版本前面的编号,如21,会有如下输出:
============================================PLATFORM_VERSION_CODENAME=RELPLATFORM_VERSION=5.1.1TARGET_PRODUCT=aosp_shamuTARGET_BUILD_VARIANT=userdebugTARGET_BUILD_TYPE=releaseTARGET_BUILD_APPS=TARGET_ARCH=armTARGET_ARCH_VARIANT=armv7-a-neonTARGET_CPU_VARIANT=kraitTARGET_2ND_ARCH=TARGET_2ND_ARCH_VARIANT=TARGET_2ND_CPU_VARIANT=HOST_ARCH=x86_64HOST_OS=darwinHOST_OS_EXTRA=Darwin-14.5.0-x86_64-i386-64bitHOST_BUILD_TYPE=releaseBUILD_ID=LMY48MOUT_DIR=out============================================
如上图,终端输出了所选择的21版本所对应的信息,其中列出了具体的详细各种配置和具体的名称版本等信息。其中我们可以看到,BUILD_ID:其表示的就是22所独影的编译版本id,我们所要下载的固件就是根据该名称来确定。还有OUT_DIR表示编译后生成的文件会在out目录下。接下来,我们就根据上面拿到的BUILD_ID去下载固件.我们在google搜google nexus image 选第一个就是google设备对应的固件支持列表,我们找到要找的LMY48M所对应的列表,然后点击下载固件。
三个固件都是tar包。下载后使用tar -xvf 将三个tar包依次解压,解压之后得到三个.sh可执行脚本文件,然后将三个文件放在android源码的根目录下:
extract-broadcom-shamu.shextract-moto-shamu.shextract-qcom-shamu.sh
接下来就是执行编译命令,依次执行如下:
$ . build/envsetup.sh$ make -j32
接下来就开始编译了,等着编译完成就好了。等到编译完成之后,我们就将编译好的系统刷到设备中就好了,向设备上刷系统:
//进入bootloader模式$ adb reboot bootloader//刷进设备中$ fastboot flashall -w
在编译之前,还可以设置添加一个缓存,这样在下次编译时就可以省去java层的编译.
- 积跬步至千里系列之十--编译Android源码实践
- 积跬步至千里系列之八--Android系统设置(一)
- 积跬步至千里系列之九--Android系统设置(二)
- 积跬步-至千里系列之二:Android中Activity的启动流程分析和总结
- 积跬步-至千里系列之三:Android界面布局的加载
- 积跬步至千里系列之十一--leetcode小结
- 积跬步至千里系列之十二--init进程
- 积跬步至千里系列之四--低功耗蓝牙通信(一)
- 积跬步至千里系列之五--Serializable和Parcelable的区别
- 积跬步至千里系列之六--安装与卸载应用程序(PackageInstaller)(一)
- 积跬步至千里系列之七--应用程序的安装与卸载(二)
- 跬步系列
- 跬步系列
- 积跬步,至千里
- 积跬步,至千里
- 积跬步,至千里
- android之第一话 跬步之始
- Android系列之二十-- 在eclipse中浏览Android源码
- VS2015--win32工程配置的一些想法之warning LNK4042: 对象被多次指定;已忽略多余的指定
- 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
- UVA 12658 模拟
- VS2010~VS2013中文注释带红色下划线的解决方法
- 在文章中使用amsmath宏包的原因
- 积跬步至千里系列之十--编译Android源码实践
- JSP-include指令
- java学习笔记-参数的调用
- neuq oj 1047: 谭浩强C语言(第三版)习题6.3 C++
- PyQt4入门教程(3)_菜单栏和工具条
- UVA 12667 模拟
- 基于ARM-contexA9-蜂鸣器pwm驱动开发
- 快速排序
- OpenJudge百炼习题解答(C++)--题4108:羚羊数量-Number Of Antelope