积跬步至千里系列之十--编译Android源码实践
2016-02-20 22:37
351 查看
Android源码编译的步骤之前看过,没有自己实践过。今天抽出时间写一篇自己编译源码的总结。
我的源码是从别人硬盘上拷贝的所有版本的镜像,省去了翻墙下载的漫长过程。Android源码是用repo来进行管理的,我的理解repo其实就是对git的又一次封装,在git包含了所有的项目分支。
1.第一步.获取源码。根据google给出的文档说明,可以知道获取源码一般有两种方式,第一种是从google提供的源码链接中获取,然后获取指定分支,拉取代码;另外一种方式就是从一个镜像中检出获取。我在实践编译时使用的第二种,省区了漫长的等待时间.下面就说一下两种方式
2.下载固件.我使用的是Nexus5,这个需要到源码目录下执行lunch看一下要编译的版本所对应的版本名称,然后到google上下载对应的固件。
如上图,我们进入到检出的源码根据目录中,执行lunch命令,就会列出一个编译版本列表,我们从终端键入我们要编译的版本前面的编号,如21,会有如下输出:
如上图,终端输出了所选择的21版本所对应的信息,其中列出了具体的详细各种配置和具体的名称版本等信息。其中我们可以看到,BUILD_ID:其表示的就是22所独影的编译版本id,我们所要下载的固件就是根据该名称来确定。还有OUT_DIR表示编译后生成的文件会在out目录下。接下来,我们就根据上面拿到的BUILD_ID去下载固件.我们在google搜google nexus image 选第一个就是google设备对应的固件支持列表,我们找到要找的LMY48M所对应的列表,然后点击下载固件。
三个固件都是tar包。下载后使用tar -xvf 将三个tar包依次解压,解压之后得到三个.sh可执行脚本文件,然后将三个文件放在android源码的根目录下:
接下来就是执行编译命令,依次执行如下:
接下来就开始编译了,等着编译完成就好了。等到编译完成之后,我们就将编译好的系统刷到设备中就好了,向设备上刷系统:
在编译之前,还可以设置添加一个缓存,这样在下次编译时就可以省去java层的编译.
我的源码是从别人硬盘上拷贝的所有版本的镜像,省去了翻墙下载的漫长过程。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上下载对应的固件。
lunch You're building on Darwin 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. 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-userdebug Which would you like? [aosp_arm-eng] 21
如上图,我们进入到检出的源码根据目录中,执行lunch命令,就会列出一个编译版本列表,我们从终端键入我们要编译的版本前面的编号,如21,会有如下输出:
============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=5.1.1 TARGET_PRODUCT=aosp_shamu 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=darwin HOST_OS_EXTRA=Darwin-14.5.0-x86_64-i386-64bit HOST_BUILD_TYPE=release BUILD_ID=LMY48M OUT_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.sh extract-moto-shamu.sh extract-qcom-shamu.sh
接下来就是执行编译命令,依次执行如下:
$ . build/envsetup.sh $ make -j32
接下来就开始编译了,等着编译完成就好了。等到编译完成之后,我们就将编译好的系统刷到设备中就好了,向设备上刷系统:
//进入bootloader模式 $ adb reboot bootloader //刷进设备中 $ fastboot flashall -w
在编译之前,还可以设置添加一个缓存,这样在下次编译时就可以省去java层的编译.
相关文章推荐
- Android监听应用程序安装和卸载
- ANDROID_MARS学习笔记_S03_007_GoogleMap1
- Android.mk文件分析
- 《Android源码设计模式》读书笔记 (8) 第8章 状态模式
- 构筑测试体系
- Android更改桌面应用程序launcher的两种方式
- LinkageError
- 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述
- 《Android Studio实用指南》7.1 AndroidStudio代码检查工具概述
- Android源码下载小结
- Android判断屏幕状态与屏幕解锁和锁定
- Android自定义Dialog
- Android studio 设置注释模板以及函数注释快捷键
- 编译android源码
- Android存储_SharedPreferences
- Android_Fragment
- Android native Thread实现 和Java Thread区别
- Android开发学习之路-Handler消息派发机制源码分析
- Android获取年月日时分秒
- Android各种权限