关于NDK使用的常见问题及建议和技巧(Android NDK How-To)

ndk-build 命令用法

实际上,ndk-build 直接调用了 make,因此大部分传给make的选项都可用于ndk-build。例如:

ndk-build V=1  显示编译过程中真正被执行的命令(类似 make V=1)

ndk-build -B  强制全部重新编译(类似 make -B)

ndk-build -C <project-path>    进入<project-path>目录,再编译(等价于先cd进入<project-path>,然后ndk-build。 类似 make -C <path>)

如何把源文件放在 $PROJECT/jni/ 以外的地方

第一种方法:在编写 $PROJECT/jni/Android.mk 的时候,包含其他 Android.mk(该文件及相应源码在其他地方)。

第二种方法:在 Application.mk 中定义 APP_BUILD_SCRIPT变量,使它指向一个 Android.mk。

如何把 Application.mk 放在 $PROJECT/jni/ 以外的地方:

从NDK r4开始,默认的做法就是把Application.mk放在 $PROJECT/jni/, 然后在工程目录(即$PROJECT),直接调用ndk-build。

如果把Application.mk放在其他地方,则调用 ndk-build 的时候,需用环境变量指定 Application.mk 的位置:

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

如果解决多个模块间的头文件包含问题

如果你定义了多个模块,常常在编译一个模块的时候,包含你的另外一个模块的头文件。例如,jni目录下有foo和bar两个模块:

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

  $PROJECT/jni/bar/
    Android.mk
    bar.c
其中bar.c使用了foo.h。因此需要在jni/bar/Android.mk文件中,增加到foo模块的路径,才能正确编译,但是下面的这种写法错误:

LOCAL_C_INCLUDES := ../foo/

这样写不起作用,因为编译的时候,当前目录是ndk-build命令调用时用户所在目录(不是jni/bar/Android.mk所在目录),所以上面这样写会找不到foo.h。

正确的写法应该是:

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

LOCAL_PATH 表示Android.mk文件所在的目录。

除了上面方法,还可利用 NDK_APP_PROJECT_PATH 变量(NDK_APP_PROJECT_PATH指向工程根目录,即 $PROJECT)

LOCAL_C_INCLUDES := $(NDK_APP_PROJECT_PATH)/jni/foo

大多数情况下使用 LOCAL_PATH(上面大写字母变量是Android.mk中定义的变量,不是shell环境变量)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值