Android NDK中文文档---HOW-TO

本文提供了Android NDK使用的实用技巧,包括如何显示编译命令、强制重新编译所有源码、在外置目录存储源文件及Application.mk等。此外,还介绍了如何正确添加包含目录到模块声明中。

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

 

 

Android的NDK操作方法:
===================

一个提示和技巧的集合献给NDK用户群


如何生成命令显示:
-------------------------------------------

执行“ndk-build V=1”,真正执行的编译命令会显示出来。这可以用来验证的你所期望的东西是否被编译,
同时编译系统还做了检查错误的工作。

(V=1 技巧来自Linux内核编译系统)


如何强制重新编译所有的源码:
-------------------------------------------

使用GNU make的 "-B" 选项,如:

   ndk-build -B


如何在$PROJECT/jni 以外的地方存储 native 源码:
-------------------------------------------------- ---------------------

首先,你可以在 $PROJECT/jni/Android.mk 中简单地引入不其它的Android.mk

另外,你可以在Application.mk中定义 APP_BUILD_SCRIPT
去指向其它Android.mk文件。


如何不在工程目录下编译工程的native源文件:
-------------------------------------------------- ---------

使用GNU Make "-C <path>"选项,例如:

    ndk-build -C <project-path>


如何在$PROJECT/jni以外的地方存储你的 Application.mk:
-------------------------------------------------- ---------------------

从NDK r4开始,你可以简单地替换$PROJECT/jni/下的文件,
从工程目录下启动ndk-build执行脚本。

如果你想使用 ndk-build 但是mk文件又在一个不同的地方。
可以使用 GNU Make 的变量覆盖当前的mk文件。

    ndk-build NDK_APPLICATION_MK=/path/to/your/Application.mk

如果您使用的是传统的 $NDK/apps/<name> 编译方法,您可以创建
一个符号链接到您的最终Application.mk那里。例如:

  $PROJECT/foo/Application.mk

您可以创建一个符号链接用下面的命令,如:

    ln -s $PROJECT/foo/Application.mk  $NDK/apps/<name>

这将使 $NDK/apps/<name>/Application.mk 直接指到了
$PROJECT/jni/Application.mk

请注意,生成的文件还是会在$NDK/apps/<name> 目录下

Windows用户:NDK被支持要基于Cygwin,
符号链接通过的“ln - s”命令,如下:

    ln -s  <target>  <link>



如何正确地添加 包含目录 到你的模块声明中:
-------------------------------------------------- -----------------

如果你定义了一些模块,且是在编译其它文件时需要被包含一个模块的头部。例如,考虑
下面的例子:

    $PROJECT/jni/foo/
    Android.mk
    foo.h
    foo.c

  $PROJECT/jni/bar/
    Android.mk
    bar.c

在bar.c中使用 #include <foo.h>
你将需要添加指到"foo"模块的路径 在jni/bar/Android.mk中

一种尝试是使用下列内容:

  LOCAL_C_INCLUDES:= ../foo

然而,这将无法工作,因为所有的编译工作是在ndk-build被请求的目录,
包括的文件必须相对于它。

而正确的做法是:

  LOCAL_C_INCLUDES:= $(LOCAL_PATH )/../foo



如果你确实需要它,你也可以使用NDK_APP_PROJECT_PATH来
指向你的项目目录:

  LOCAL_C_INCLUDES:= $(NDK_APP_PROJECT_PATH)/jni/foo

但是,我们不建议使用这种方法,相对路径(LOCAL_PATH)是更好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值