Android编译系统入门(一)

本文介绍了Android编译系统的基础,包括Makefile的使用和Android平台中的droidcore节点。首先阐述了Makefile的规则和工作原理,接着探讨了Android编译系统的入口和依赖树概念,特别分析了droidcore的先决条件如files和systemimage的生成过程。文章以简单实例和源码分析帮助读者理解Android编译系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做过Android平台开发的朋友对makemmmake clean命令应该很熟悉,但也许大家只是熟知这些命令的作用却不知道这些命令底下有些什么原理?那么今天我就带着大家推开Android编译系统的大门,探索一下这片未知的恐怖之森(问啥要用恐怖之森后面大家就知道了)。

Makefile入门

在讲解Android编译系统之前首先来了解一下什么是Makefile:

简单的说,Makefile提供了一种机制,让使用者可以有效的组织工作。

注意这里用的是“工作”而非“编译”,这是因为Makefile并不是用来完成编译工作的,它只是一种规则的执行者,而使用者用它来执行什么规则没有任何限制。如既可以用它来编译系统,也能用它备份文档或只是打印log。
既然它是用来执行规则的,那么我们就来看看Makefile的规则。

TARGET:PREREQUISITES
    COMMANDS

注意:COMMANDS前面必须有一个TAB制表符

在Makefile的规则中TARGET是需要生成的目标文件,PREREQUISITES是目标的先决条件,也是另一个规则中的target。COMMANDS是生成目标文件的命令,当prerequisites中的任何一个文件比target文件要新的时候就会触发commands。commands的具体内容取决于使用者的需求,如调用gcc编译器。

下面我们用一个简单的例子说明一下Makefile规则的用法。
涉及到的文件如下:

文件名 描述
mian.c 主函数所在文件
test.h 提供一个测试函数getNumber的声明
test.c 提供getNumber的函数实现,用于返回一个值
Makefile 我们的主角,用于编译整个例子

文件内容如下:
(1)test.h对getNumber进行声明。

int getNumber();

(2)test.c实现getNumber函数

#include "test.h"

int getNumber()
{
    return 2333;
}

(3)main.c打印getNumber的返回值

#include <stdio.h>
#include "test.h"

int main()
{![这里写图片描述](http://img.blog.csdn.net/20151203122740732)
    printf("Hello,getNumber=%d\n",getNumber());
    return 0;
}

(4)Makefile文件,用于组织这个小例子的编译工作

MakefileTest : main.o test.o
    gcc -o MakefileTest main.o test.o

main.o : main.c
    gcc -c main.c

test.o : test.c
    gcc -c test.c

对上面这段代码简单解释一下,MakefileTest为TAEGET即目标产物,main.otest.oMakefileTest的先决条件。gcc -o MakefileTest main.o test.o则是MakefileTest对应的COMMANDS,这条命令使用gcc命令将main.o和test.o编译成MakefileTest可执行文件。
最后通过使用make命令就会在当前目录生成一个MakefileTest可执行文件,运行结果如下:
这里写图片描述

上面这个是一个非常简单的Makefile的示例,但“麻雀虽小,五脏俱全”&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值