编译android源代码(aosp)

步骤1:按照官方的文档,下载源码,配置环境,并执行相应的命令。最好按照官方的硬件和系统配置build。

build的版本是6.0,源码目录是/home/koder/android-source-20151229

Requirements:

  • 下载的源码很大,估计有30,40G左右。加上build,最好腾出100+的空间来。
  • 按官方说的MAC OS或者Ubuntu LTS (14.04)X64,自己是Ubuntu LTS (14.04) 64位。
  • 硬件问题:内存不足,看文末问题1。

有一个注意文档说的:lunch aosp_arm-eng

这里是要build出一个适应于emulator的img,并且允许debug。

aosp_arm-eng 表示target或者build configuration, 格式是: BUILD-BUILDTYPE

aosp_arm是BUILD。如果希望build不同设备或者emulator的img,就要不同的值。点击这里有介绍。其中arm是叫做code name

eng是BUILDTYPE:

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

来源: https://source.android.com/source/building.html

target有的例子有这些:

Device Code name Build configuration
Nexus 6P angler aosp_angler-userdebug
Nexus 5X bullhead aosp_bullhead-userdebug
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-userdebug

Do not use 4.1.1 on a Nexus 7 that was originally sold with 4.1.2 or newer.

来源: https://source.android.com/source/running.html

步骤2:顺利make成功后。

会在目录/home/koder/android-source-20151229/out/target/product/generic下生成系统系统的文件,包括system.img, ramdisk.img,userdata.img等。

然后运行,由于build的是emulator的img,所以就运行虚拟机。

官方文档说,会自动把环境变量设置好,但是执行emulator的时候,发现并没有该命令,所以需要自己找到emulator的目录。emulator在prebuilts/android-emulator下,prebuilts目录是官方提供的,下载源码时就已经build好的一些工具和库,包括kernel也在这下面,所以如果自己要build kernel,就看这里。题外话了,回到emulator,切换到emulator目录,运行:

./emulator \

-sysdir ${ANDROID_PRODUCT_OUT} \

-system ${ANDROID_PRODUCT_OUT}/system.img \

-ramdisk ${ANDROID_PRODUCT_OUT}/ramdisk.img \

-data ${ANDROID_PRODUCT_OUT}/userdata.img \

-kernel /home/koder/android-source-20151229/prebuilts/qemu-kernel/arm/kernel-qemu-armv7 \

-skindir /home/koder/android-source-20151229/sdk/emulator/skins \

-memory 2048 \

-partition-size 2048 \

-skin WVGA800 \

-scale 0.7

emulator命令:http://developer.android.com/tools/help/emulator.html

自己改好对应目录就好了。个人环境变量是:

JAVA_HOME=/home/koder/Documents/jdk1.8.0_65

PATH=$JAVA_HOME/bin:$PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ANDROID_HOME=/home/koder/Documents/android-sdk-linux

ANDROID_BUILD_OUT_HOST=/home/koder/android-source-20151229/out/host/linux-x86/bin

ANDROID_PRODUCT_OUT=/home/koder/android-source-20151229/out/target/product/generic

PATH=$ANDROID_HOME:$ANDROID_BUILD_OUT_HOST:$PATH

export JAVA_HOME PATH CLASSPATH ANDROID_PRODUCT_OUT

到这里就OK了。

BUILD过程中遇到的问题:

1. 提示:increasing heap size。就是Java虚拟机的heap size不够了,添加环境变量:

export _JAVA_OPTIONS=-Xmx8192m

赋值大小看自己机器了。

然而,即使这样设置了,有时候也不起作用,因为可能机器本身硬件内存就不足了,根本就没有8G那么多好吗。由于自己的机器是8G的,而且运行在虚拟机上,只分配到4G的空间,所以build的过程中,内存不足的问题卡了自己很久很久,而且官方说,最好是有16g ram以上,几乎要放弃了。最后想了个办法,增加swap内存。

至于如何增加swap内存,参考这里

自己直接swap增加了16G,由于本来是8G,所以最好是24G了。

感叹一下,UNIX的“Everything is file”的伟大,硬件不够,软件来补,呵呵~~~

解决这个内存问题后,就顺利的build出来了。

另外:

1.查看cccache:watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s

时间: 2024-12-18 08:25:45

编译android源代码(aosp)的相关文章

[转]编译Android源代码常见错误解决办法

1. 编译时出现/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searching for -lz PLATFORM_VERSION_CODENAME=AOSPPLATFORM_VERSION=AOSPTARGET_PRODUCT=genericTARGET_BUILD_VARIANT=engTARGET_SIMULATOR=TARGET_BUILD_TYPE

【转】如何单独编译Android源代码中的模块

原文网址:http://blog.csdn.net//article/details/6566662/ 第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了Android源代码中的某个模块或者在Android源代码工程新增一个自己的模块,是不是还是执行make命令呢?答案是否定的,Google为我们准备了另外的命令来支持编译单独的模块,以及重新打包syst

编译Android源代码与内核总结

这些天花了些时间自己下载了android源代码来编译,当中走了一些弯路导致耗了些时间,如今又一次梳理总结下,让有同样想法的人自己编译的时候能少走些弯路,官方指导文档在http://source.android.com/source/initializing.html. 1.安装linux环境 我是windows系统,安装了Vmware虚拟机.在虚拟机上装了ubuntu-12.04,我的这个版本号是32位的,这个还蛮重要的.安装32位或者64位的将决定你能编译的android版本号,官方文档里Fo

如何单独编译Android源代码中的模块

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6566662 第一次下载好Android源代码工程后,我们通常是在Android源代码工程目录下执行make命令,经过漫长的等待之后,就可以得到Android系统镜像system.img了.以后如果我们修改了Android源代码中的某个模块或者在Android源代码工程新增一个自己的模块,是不是还是执行make命令呢?答案是否定的,Google为

单独编译Android源代码中的某个模块

众所周知,编译一个固件要花很久时间.有时只改系统的某个模块的某个功能,如修改系统Setting源码的一些地方,这时就没有必要再整个系统编译一遍,这时就需要用到模块编译(前提是系统已经编译过一遍). 下面以编译A20平台源码中的一个apk为例. 例如要修改系统设置中HDMI分辨率输出,让其只有几个输出选项. 1,进入android\device\softwinner\common\packages  这个目录,找到TvdSettings这个文件夹,这个就是A20定制的系统设置源码. 2,找到Dis

Android源代码和内核源代码的下载,编译和运行

笔者根据罗升阳老师的<Android 系统源代码情景分析>一书,尝试下载,编译和运行Android源代码和内核源代码.但可能是软件源"被墙"或版本更新的原因,期间遇到诸多问题.笔者求助于强大的度娘和谷歌,终于编译成功,现将修改的步骤记录如下: 一.下载相关的工具包和依赖包 1.git工具的下载,不多说 2.Java SDK的下载(参考网址:http://blog.csdn.net/zjclugger/article/details/11762085) 此处建议下载jdk1.

Android源代码的下载和编译

Android源码包括应用程序源码.SDK工具集以及NDK工具集等等,如何下载?请看: 配置Android源代码下载环境: 创建一个用于存放下载脚本文件(repo)的目录 # mkdir ~/bin # PATH=~/bin:$PATH 下载rope脚本文件 # curl https://dl-ssl.google.com/dl/googlesource/git-repo > ~/bin/repo # chmod a+x ~/bin/repo 创建用于存放Android源代码的目录 # mkdi

编译Android源码致命错误解决方案

编译Android源码致命错误解决方案 字数1506 阅读17447 评论0 喜欢3 相信各位和我一样正在研究android内核的朋友们在经过漫长的源码下载的等待后,喜悦的拿到了源代码开始编译.可是在编译过程中,也会和下载一样出现各种各样的不顺.在这里我记录了一下本人在编译过程中的所有问题,如有疏漏,欢迎朋友们指出.下面是按照正常编译流程记录的所需步骤和操作,可能遇到的问题会在后面讲述. 步骤一:初始化编译环境 首先进入android源码所在目录,然后在Linux终端执行以下命令来完成编译初始化

Android源代码工程环境搭建

开发Android应用程序可以在两种环境下进行,一是在Android SDK环境下进行,一般是集成在Eclipse里面进行开发,二是在Android源代码工程环境下进行,在这种环境进行开发的好处是可以使用一些在SDK中不公开的接口.但是如果我们要修改Android系统的源代码,或者为Android系统增加新的功能接口,那么就只能在Android源代码工程环境下进行了.由于我们的目的是对Android系统源代码进行分析,因此,我们在开发Android应用程序时,也在Android源代码环境下进行.