android 6.0 ndk版本,[推荐]android-ndk6.0翻译(1)

[推荐]android-ndk6.0翻译(1)

(2011-07-28 14:55:39)

标签:

杂谈

序言:

-------------

此文档旨在描述Android.mk文件的语法,Android.mk文件为Android

NDK(原生开发)描述了你C/C++源文件。

为了明白下面的内容,你必须已经阅读了docs/OVERVIEW.TXT的内容,它解释了Android.mk文件扮演的角色

和用途。

概述:

---------

写一个Android.mk文件是为了向天生系统描述你的源代码。更明确的说:

- 这个文件实际上是GNU Make文件的一小片断,它会被天生系统解析一次或多次。

因此,你应该在Android.mk里尽量少地声明变量,而不要误以为在解析的过程中

没有任何东西被定义。

- 该文件的语法的明的人为了让你能将你的源代码组织为组件(module).一个组件指的是下面的一项:

- 一个静态库(static library)

- 一个共享库(shared library)

只有一个动态库会被安装/拷贝至你的application package中。但是静态库可用来

天生动态库。

你可以在每个Android.mk文件定义一个或多个组件,并且我可以在几个组件中使用

相同的源文件。

- 天生系统为你处理了一些琐碎之事。比如,在你的Android.mk里,你不须要列出头文件或

列出天生的文件之间的明确认依靠关系。NDK天生系统会为你自动天生。

这也意味着,当更新至新的NDK版本时,你能得到新的工具链/平台支持(toolchain/platform

support)

的好处,而无须修改你的android.mk文件。

需要留意的是,此语法与完全开源的Android平台的Android.mk文件的语法非常相似,但使用它们的

天生系统的实现不同,这个为了让开发者能更轻易的复用“外部”库的源代码。

简单例子:

---------------

在具体描述语法之前,让我们探究一个简单的“hello JNI”例子,它的文件位于:

apps/hello-jni/projec

这里,我们能看到:

- 放有Java源文件的src文件夹。

- 放有本地源文件,即jni/hello-jni.c的jni文件夹。

这个源文件实现一个简单的共享库。这个共享库有一个本地方法(native method),它将一个字符串

返回给虚拟机应用(著:即Java层应用程序)

- jni/Anroid.mk文件为NDK天生系统描述了这个共享库。它的内容为:

---------- cut here ------------------

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := hello-jni

LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

---------- cut here ------------------

现在,让我们逐行解释:

LOCAL_PATH := $(call my-dir)

每个Android.mk文件都必须以定义LOCAL_PATH变量开始。其目的是为了定位源文件的位置。在这个例子,

天生系统提供的宏函数(macro

function)‘my-dir'用来返回当前路径(即放有Android.mk文件的文件夹)

include $(CLEAR_VARS)

CLEAR_VARS变量是天生系统提供的,它指向一个特殊的GNU

Makefile.这个Makefile将会为你自动清除

很多名为LOCAL_XXX的变量(比如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIE

S,等),

但LOCAL_PATH是例外,它不会被清除。这些变量的清除是必须的,由于所有的控制文件是在单一的GNU make

执行环境中解析的,在这里所有的变量都是全局的。

LOCAL_MODULE := hello-jni

为了在你的Android.mk文件标识每个组件,必须定义LOCAL_MODULE变量。这个名字必须要唯一的并且不能

包含空格。留意:天生系统会自动地为相应天生的文件加进前缀或后缀。换言之,一个名叫foo的共享库组件

会天生'libfoo.so'.

重要留意事项:

假如你把组件取名为‘libfoo',天生系统将不会加上‘lib'前缀,还是

天生libfoo.so。这是为了支持源于Android平台源代码的Android.mk文件。

LOCAL_SRC_FILES := hello-jni.c

LOCAL_SRC_FILES变量必须包含一系列将被构建和组合成组件的C/C++源文件。留意:你

不需要列出头文件或include文件,由于天生系统会为你自动计算出源文件的依靠关系。

仅仅列出那些将直接传给编译器的源文件足矣。

留意,默认的C++源文件的扩展名是‘.cpp'。但你可以通过定义LOCAL_DEFAULT_EXTENSION

来指定一个扩展名。别忘了扩展名开始的那一点(比如,‘.cxx’,能行,但‘cxx'不行)。

include $(BUILD_SHARED_LIBRARY)

天生系统提供的BUIL_SHARED_LIBRARY变量指向一个GNU Makefile脚本,这个脚本主管

收集在最近的一次#include $(CLEAR_VARS)(著:即清除'本地'变量)之后你所定义的

LOCAL_XXX变量的信息,并决定天生什么,如何正确的天生。BUILD_STATIC_LIBRARY可

天生一个静态库。

There are more complex examples under apps/, with commented

Android.mk files that you can look at.

在apps文件下有一些复杂点的例子,它带有注释的Android.mk文件以供你学习。

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值