Android 技术专题系列之三 -- 编译(build) 流程
2011-08-10 18:09
429 查看
原文地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=2711&highlight=Android%2B%E6%8A%80%E6%9C%AF%E4%B8%93%E9%A2%98
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 |
相关文章推荐
- Android 技术专题系列之三 -- 编译(build) 流程
- Android 技术专题系列之三 -- 编译(build) 流程 - shenbin143...(转载)
- Android 技术专题系列之三 -- 编译(build) 流程
- [转]Android 技术专题系列之九 -- 图形系统
- Android 技术专题系列之十一 -- DRM
- Android 技术专题系列之十二 -- Alarm manager
- Android 技术专题系列之四 -- 网络资源及常见命令备
- Android 技术专题系列之七 -- 输入法 框架
- Android 技术专题系列之十七 -- volume 服务
- Android 技术专题系列之十五 -- 更新开发手机到1.5
- Android 技术专题系列之五 -- 本地化
- Android 技术专题Feature系列第一篇 四大组件之Activity
- Android 技术专题系列之十六 -- 在模拟器上安装 sd
- Android 技术专题系列之七 -- 输入法 框架
- Android 技术专题系列之九 -- 图形系统
- 【转】Android 技术专题系列之九 -- 图形系统
- Android 技术专题系列之一 -- Android 是什么
- Android 技术专题系列之十七 -- volume 服务
- Android 技术专题系列之六 --如何安装.apk到模拟
- 【Android应用保护技术探索之路系列】之二:对抗反编译