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

更多相关文章

  1. Android中Notification的framework层讲解【安卓源码解析四】
  2. Android之网络请求4————OkHttp源码1:框架
  3. android R.java资源文件不自动生成的原因
  4. Android(安卓)中动态提取图片中颜色作为主题色
  5. Android(安卓)Project from Existing Code 生成 R 文件错误、失
  6. Android(安卓)中LayoutInflater(布局加载器)源码篇之createViewFro
  7. Android(安卓)配置Adb环境
  8. Android(安卓)Studio NDK JNI开发入门记录
  9. Android(安卓)反编译apk 到java源码的方法

随机推荐

  1. Android(安卓)Sqlite数据库转义字符模糊
  2. mysql数据库忘记管理员密码的解决方法
  3. Centos7安装和配置Mysql5.7
  4. mysql免安装版配置与修改密码的教程
  5. Linux系统中MySQL的常用操作命令
  6. MySQL5.7完全卸载步骤详解
  7. 详解MySQL中InnoDB的存储文件
  8. 优化 MySQL 3 个简单的小调整
  9. Mysql5.7在windows7下my.ini文件加载路径
  10. 概述MySQL统计信息