Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9087443
  • 博文数量: 1732
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 19830
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1732)

文章存档

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2010-02-23 16:40:55

Android使用的build系统与普通Linux软件使用的build工具有很大不同,因而,可能使熟悉传统Linux开发工具的程序员稍感陌生。普 通的软件项目一般使用autotools工具,包括autoconf, automake, libtool等,利用这些工具来自动生成Makefile。而Android创建了一套自己的系统来生成Makefile。下面对Android的 build系统作一初步探讨。Android源码中的build/core/build-system.html是我们研究Android build系统的基本文档。本文基于这一文档并进一步展开。

Android build系统定义了一套自己的变量,宏等,如LOCAL_MODULE_TAGS, LOCAL_PACKAGE_NAME等。如何代入这些变量,如何展开这些宏,都在build/core目录下的文件中定义。

开发人员可以使用这些变量编写Android build系统的Makefile -- Android.mk。每个模块,如一个应用,一个共享库等,都有一个自己的Android.mk。在编译的时候,Android.mk中的宏就会被展开成相应的Make规则,变量也会代入相关的规则。 下面以packages/apps/AlarmClock/Android.mk举例介绍:
~~~~~~~~
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := eng development

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := AlarmClock

include $(BUILD_PACKAGE)
~~~~~~~~~~
关于这些变量的含义,在build/core/build-system.html中都有具体介绍。值得注意的是,如果是生成一个可执行程序,则引用 BUILD_PACKAGE,如果生成一个library,则引用BUILD_SHARED_LIBRARY。我们可以模仿现有的Android.mk去 创建自己的Android.mk。

build/envsetup.sh中引入了几个方便的命令可用来帮助执行build命令。
m: 执行对整个Android源码的build
mm: 执行对当前目录下模块的build.
printconfig: 当前build的配置情况。

在整个Android源码编译完成后,生成的二进制文件以及image等都安装在out/目录下。通过如下命令序列可以启动emulator (假设Android源码安装在~/mydroid目录下):
export ANDROID_PRODUCT_OUT=~/mydroid/out/target/product/generic/
cd ~/mydroid/out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates
./emulator
阅读(1246) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~