当前位置:操作系统 > 安卓/Android >>

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 choo易做图bo 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下面

 

摘自 andyhuabing的专栏
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,