编译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:
BuildtypeUse
userlimited access; suited for production
userdebuglike "user" but with root access and debuggability; preferred for debugging
engdevelopment configuration with additional debugging tools

target有的例子有这些:
DeviceCode nameBuild configuration
Nexus 6Pangleraosp_angler-userdebug
Nexus 5Xbullheadaosp_bullhead-userdebug
Nexus 6shamuaosp_shamu-userdebug
Nexus Playerfuguaosp_fugu-userdebug
Nexus 9volantis (flounder)aosp_flounder-userdebug
Nexus 5 (GSM/LTE)hammerheadaosp_hammerhead-userdebug
Nexus 7 (Wi-Fi)razor (flo)aosp_flo-userdebug
Nexus 7 (Mobile)razorg (deb)aosp_deb-userdebug
Nexus 10mantaray (manta)full_manta-userdebug
Nexus 4occam (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)pandaaosp_panda-userdebug
Motorola Xoom (U.S. Wi-Fi)wingrayfull_wingray-userdebug
Nexus Ssoju (crespo)full_crespo-userdebug
Nexus S 4Gsojus (crespo4g)full_crespo4g-userdebug

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

 

步骤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
 
自己改好对应目录就好了。个人环境变量是:
 
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
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值