`

【翻译】(4)How To

 
阅读更多

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

英文文档见android-ndk-r5b的documentation.html

属于Android Native Development Kit (NDK)的一部分

见http://developer.android.com/sdk/ndk/(需要代理)

翻译仅个人见解

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

Android NDK How-To:

 

Android NDK指南:

 

===================

 

A collection of tips and tricks for NDK users

 

一些给NDK用户的提示和技巧

 

How to force the display of build commands:

 

如何强制显示构建命令

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

 

Do "ndk-build V=1" and actual build commands will be displayed. This can be used to verify that things are compiled as you expect them to, and check for bugs in the NDK build system.

 

执行“ndk-build V=1”则实际构建命令将会被显示。可用于验证那些东西正如你所预期的那样被编译,以及检查NDK构建系统的缺陷。

 

(The V=1 trick comes from the Linux kernel build system)

 

(V=1的技巧来自Linux内核构建系统)

 

How to force a rebuild of all your sources:

 

如何强制你的所有代码的重新构建:

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

 

Use GNU Make's "-B" option, as in:

 

使用GNU Make的-B选项,如下所示:

 

   ndk-build -B

 

How to store your native sources in a location other than $PROJECT/jni:

 

如何让你的原生源代码放在不同于$PROJECT/jni的地方(注:jni是放置jni的C文件的约定目录)

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

 

First, you can simply tell your $PROJECT/jni/Android.mk to include another Android.mk that are located in different places.

 

首先,你可以简单地让你的$PROJECT/jni/Android.mk包含位于不同位置的另一个Android.mk。(注:也就是说$PROJECT/jni/Android.mk必须存在)

 

Alternatively, you can define APP_BUILD_SCRIPT in your Application.mk to point to an alternative Android.mk file.

 

另一种方法是,你可以在Application.mk中定义APP_BUILD_SCRIPT的值指向一个可选的Android.mk的文件。

 

How to build a project's native files without cd-ing to it:

如何不使用cd命令来构建一个工程的原生文件

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

 

Sometimes, you may need to rebuild a project's native file without being able to cd to its top-level path from the command-line. This is do-able by using the GNU-Make '-C <path>' option, as in:

 

有时,你可能需要重新编译一个工程的原生文件但不能在命令行上用cd命令切换到它的顶级路径。可以使用GNU-Make的-C <路径>选项,如下所示:

 

    ndk-build -C <project-path>

 

How to store your Application.mk in a location other than $PROJECT/jni:

 

如何保存你的Application.mk在不同于$PROJECT/jni的位置:

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

 

Starting with NDK r4, you can simply place the file under $PROJECT/jni/ and launch the 'ndk-build' script from your project tree.

 

从NDK r4开始,你可以简单地放置文件在$PROJECT/jni/目录下并且在你的工程树上运行ndk-build脚本。

 

If you want to use 'ndk-build' but place the file to a different location, use a GNU Make variable override as:

 

如果你想使用ndk-build但放置文件到一个不同的位置,使用一个GNU MAKE变量重载为:

 

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

 

If you're using the legacy $NDK/apps/<name> build method, you can create a symbolic link to your final Application.mk there. For example, imagine that you wrote:

 

如果你使用旧有的$NDK/apps/<名称>构建方法,你可以创建一个符号链接到你的最终Application.mk那里。例如,假设你这样写:

 

  $PROJECT/foo/Application.mk

 

You can create a symlink like with a command like:

 

你可以创建一个符号链接,用像这样的命令行:

 

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

 

This will make $NDK/apps/<name>/Application.mk point directly to $PROJECT/jni/Application.mk

 

这将使$NDK/apps/<名称>/Application.mk直接指向$PROJECT/jni/Application.mk

 

Note that generated files will still go under $NDK/out/apps/<name> though.

 

不过注意,生成的文件将仍旧跑到$NDK/out/apps/<名称>。(注:out目录而非apps目录)

 

Windows users: The NDK is only supported on Cygwin, which implements symbolic links through the "ln -s" command, as in:

 

Windows用户:NDK只在Cygwin上被支持,实现符号链接是通过ln -s命令,如下所示:

 

    ln -s  <target>  <link>

 

 

How to properly add include directories to your module declaration:

 

如何合适地添加头文件目录到你的模块声明:

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

 

If you define several modules, it is common to need to include one module's header while compiling another one. For example, consider the following example:

 

如果你定义几个模块, 当编译一个模块时一般需要包含另一个模块的头文件。例如,考虑下面的示例:

 

  $PROJECT/jni/foo/

    Android.mk

    foo.h

    foo.c

 

  $PROJECT/jni/bar/

    Android.mk

    bar.c

 

(注:上面是说foo和bar目录下有哪些文件)

 

Where the 'bar.c' uses '#include <foo.h>'. You will need to add the path to the 'foo' module in jni/bar/Android.mk to build it properly.

 

这里bar.c使用#include <foo.h>语句。你将需要在jni/bar/Android.mk中添加路径到foo模块以正确地构建它。(注:在C中,#include <...>是用于包含.h头文件。.h头文件仅用于预编译,生成.o文件实际上只需要.c文件。由于C的模块编译是分布式的,需要借助#include来事先声明模块外的函数。头文件的目录可以在编译命令行中用选项来指定)

 

One is tempted to use the following:

 

可以尝试使用以下方法:

 

  LOCAL_C_INCLUDES := ../foo

 

However this will not work because all compilation happens from the directory where 'ndk-build' is invoked, and include files must be relative to it.

 

然而,这将不能工作,因为所有编译发生在执行ndk-build的地方,而包含文件必然相对于这个地方。(注:前面提到,有可能不是在Android.mk的目录执行ndk-build)

 

The correct line is instead:

 

正确的命令行应该是:(注:在Android的工程文件中经常用$(LOCAL_PATH)取得Android.mk所在目录)

 

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

 

Which uses a path relative to $(LOCAL_PATH), in the case where you would need to move 'foo' and 'bar' to a deeper level in the 'sources' hierarchy.

 

它使用相对于$(LOCAL_PATH)的路径,通常用在你需要把foo和bar移动到源代码树的更深层次的情况下。(注:实际上在Cygwin下可以用/cygdrive/<盘符>/...指定绝对路径也可,不过有点麻烦而已)

 

In case you absolutely need it, you can also use NDK_APP_PROJECT_PATH to point to your project directory:

 

一旦你一定需要这样,你还可以使用NDK_APP_PROJECT_PATH指向你的工程目录:

 

  LOCAL_C_INCLUDES := $(NDK_APP_PROJECT_PATH)/jni/foo

 

However, we don't recommend using this, paths relative to $(LOCAL_PATH) being better.

 

然而,我们不建议使用这种方法,使用相对于$(LOCAL_PATH)的路径较好。

 

 

 

分享到:
评论

相关推荐

    How to Design Program 中英合集

    《How to Design Programs》是一本深受编程初学者欢迎的书籍,它详细介绍了程序设计的方法和理念,旨在引导读者从零开始掌握编程技能。这本书的独特之处在于它的中英合集,既方便了中国读者理解,也提供了原汁原味的...

    Linux流量控制指南中文翻译(Traffic control HOWTO)

    Linux流量控制是一种网络管理技术,用于管理网络接口上等待发送或接收的数据包。它涉及到数据包的入队、监管、分类、调度、整流和丢弃等操作。本指南旨在介绍Linux下的流量... Brown撰写,并由ziven进行了中文翻译。

    How to read datasheet(含原版和翻译版)

    "How to read datasheet"这个主题旨在帮助读者掌握如何有效地阅读和理解数据手册,从而更好地应用这些信息于实际的设计和开发工作中。 数据手册通常由半导体制造商提供,涵盖的内容包括元器件的电气特性、机械尺寸...

    Lisp Good News Bad News How to Win Big

    标题:Lisp: Good News, Bad News, How to Win Big 描述:本文深入探讨了Lisp编程语言在近十年中的发展轨迹,分析了其成功与挑战,并提出了未来发展的策略。 ### 重要知识点详解: #### 1. Lisp的发展历程与标准...

    How to do everything with javascript

    "How to do everything with JavaScript" 涵盖了从基础到高级的JavaScript知识,旨在帮助开发者全面理解和掌握这门语言的体系结构及其实际应用。这本书可能包括了变量、数据类型、控制结构、函数、对象、数组、DOM...

    C How to Program, 7th Edition

    《C How to Program, 7th Edition》是一本介绍C语言编程的大学教程,由Deitel父子共同编写,它是著名的“Deitel® How to Program系列”的一部分。这本书因其全面和易懂的讲解而受到众多读者的喜爱,常被学生们称为...

    股票大作手操盘术英文版how to trade in stock

    《股票大作手操盘术》的中文翻译过程中,译者参考了丁圣元老师的部分作品,同时也根据自己的英语水平和网络资源进行了补充和完善。尽管可能存在一些不准确的地方,但这本书的内容仍然为中文读者提供了深入了解...

    C++ Programming HOW TO

    ### C++ Programming HOW-TO #### 1. Introduction C++是一种广泛使用的编程语言,它在许多领域都有着不可替代的地位,如系统软件开发、游戏开发、高性能应用等。本章节首先介绍了C++与Java的区别,并探讨了选择...

    How to Program(7th-Edition)

    《How to Program》是Paul Deitel与Harvey Deitel合著的一本编程教材,已更新至第七版。这本书深入浅出地介绍了编程的基础知识,涵盖了多种编程语言,其中包括C++部分。作为一本英文原版书籍,它对于学习者来说具有...

    How to Hack Like a Pornstar_2017.pdf.zip

    How to Hack Like a Pornstar,一本17年流传于国外论坛的介绍渗透测试的书籍,不要被书名迷惑

    (How to Write a (Lisp) Interpreter (in Python))中文版(包括上下篇)

    (How to Write a (Lisp) Interpreter (in Python))和(An ((Even Better) Lisp) Interpreter (in Python))的翻译,对解释器实现原理和函数式编程敢兴趣的可以下载看看!

    IPv6 HOWTO(中文版)

    - **隧道类型**: 包括点对点隧道、6to4隧道等。 - **配置隧道**: 使用特定的命令或工具建立IPv6隧道。 - **管理隧道**: 如查看现有隧道状态、添加新隧道或删除不再使用的隧道。 #### 设置IPv4-in-IPv6隧道 - **...

    Linux+IPv6-HOWTO

    ### Linux下的IPv6 HOWTO文档知识点详述 #### 一、引言与概述 ##### 版权、许可及作者介绍 - **版权**:本文档受著作权保护,具体版权信息需参阅文档开头部分。 - **许可**:文档遵循特定的许可协议发布,允许读者...

    how to read datasheet(翻译版的)

    本文将根据提供的部分翻译内容,详细介绍数据手册中的关键知识点。 #### 数据手册的重要性 数据手册对于正确使用电子元件至关重要。它不仅提供了基本的电气参数,还包含了设计时可能遇到的各种注意事项和推荐设置...

    linux高级路由和流量控制HOWTO中文版(牛老师译)

    这篇文档“Linux高级路由和流量控制HOWTO中文版”由牛老师翻译,为读者提供了深入理解这些概念的宝贵资源。以下是对其中核心知识点的详细解读: 1. **基本路由**:在Linux中,路由是指指导数据包通过网络到达目的地...

    How to Lie with Statistics

    《统计陷阱》(*How to Lie with Statistics*)是一本由美国统计学家达莱尔·哈夫(Darrell Huff)撰写的经典著作,首次出版于1954年,并在之后的几十年里被多次重印并翻译成多种语言。本书旨在揭示统计学中的常见...

    netfilter_hacking_howto(中文版FreeWill翻译小组)

    netfilter_hacking_howto(中文版FreeWill翻译小组):这份文档描述了Linux上的netfilter构架,如何剖析它,以及一些在它上层的某些主要系统,诸如包过滤、连接追踪和网络地址翻译。

    Python3.7.2中文文档-6.Python的HOWTO文档

    Python3.7.2中文文档包含了对Python编程语言详尽的解释和指导,特别是6.Python的HOWTO文档部分,提供了许多实践性的指南和建议,帮助开发者深入理解和使用Python。以下将详细介绍这部分内容的主要知识点: 1. **...

    怎样解题,how to solve it

    《怎样解题》一书由阎育苏翻译,科学出版社于1982年首次出版,该书深入探讨了解题的艺术与策略,尤其关注教育环境中如何有效地指导学生解决问题。本书的核心理念围绕着“如何帮助学生独立解决问题”,并在教育实践中...

    Linux高级路由和流量控制HOWTO

    《Linux高级路由与流量控制HOWTO》是由Jhon Bull老师翻译的一份技术文档,主要针对Linux操作系统中的高级网络路由技术和流量控制策略进行了深入探讨。在Linux系统中,路由和流量控制是确保网络性能和稳定性的重要...

Global site tag (gtag.js) - Google Analytics