android源码编译的小小总结

android源码相当大,全部编译会相当的花时间。其编译的主要规则就是,找到所有的 Android.mk  进行编译。


一、编译流程:

1、执行 source build/envsetup.sh 或者 ./build/envsetup.sh ,设定android的编译环境

2、lunch 选择编译目标(硬件平台,eng或者user等)

You're building on Linux

Lunch menu... pick a combo:
     1. generic-eng
     2. simulator
     3. full_dream-userdebug
     4. full_passion-userdebug
     5. full_sapphire-userdebug


如下面是选择好的平台打印信息:

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=bcm7125
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=mips
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================

利用sh中的脚本: printconfig - Prints the current configuration as set by the lunch and choosecombo commands.

可以重新编写: AndroidProducts.mk       复写如下的定义:

$(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)
#
# Overrides
PRODUCT_NAME := bcm${BCHP_CHIP}
PRODUCT_DEVICE := bcm${BCHP_CHIP}


   3、最后执行make -j n (cpu 数目,多核同时编译,提高速度)


二、编译方法选择

   make  不带任何参数,单核编译,花费时间相当长,2.2版本大约是4个小时,2.3会稍微更长一点。

   

   make  模块名称 , 会将所有依赖的其它模块一起编译,非常适合初次编译


   mmm 完整目录路径 , 编译指定目录下的目标模块,不编译所依赖的模块,非常适合整体编译完,调试时使用

 

   mm 进行带有 Android.mk的目录下进行编译,只能编译当前目录下的模块,非常适合整体编译完,调试时使用

   

   各种实用参数,以上方法都可以增加使用:

   -j Ncpu   【编译时间:基本上是单核总时间/N】

   -B        【默认只编译发生为化的目标文件,加上此选项则强制重新编译所有目标文件】

    这两个参数非常好用,请多多使用之


三、动态库依赖关系

    原则: 先后依赖,即makefile一般的规则是先编目标的依赖再编译本目标文件

      

    碰到的问题:

make: *** 没有规则可以创建“out/target/product/generic/system/bin/demux_test”需
要的目标“out/target/product/generic/system/lib/libhalcommon.so”。 停止。


首先 hardware\libdtv\Android.mk  下面的文件需要编写正确:

common_dtv_dirs :=libhalcommon libtuner libdemux libtest libavdec libavenc libdisplay libsmartcard

include $(call all-named-subdir-makefiles,$(common_dtv_dirs))

     这里写的是子目录下的 目录名,这里必须与子目录中的名字一一对应,否则不予编译

     这里的子目录是: hardware\libdtv\libhalcommon

     然后在hardware\libdtv\libhalcommon\Android.mk中需要增加:

     LOCAL_MODULE_TAGS :=eng 

     否则不会安装到system/lib下面


你可能感兴趣的:(Android系统框架学习)