Android NDK 本机库和文档

Android NDK native libraries and documentation

我开始研究 NDK - 使用 JNI 的原生开发工具包。

据我了解,NDK 包含: 1. 包含一组 .so 库(和 c/c++ header 文件)的源代码,每个都专门编译为不同的 Android 架构:例如 arm、mips、x86。它为我们提供了一些 c/c++ API 到 Android 设备。 2. 负责为每个 Android 架构构建的工具链。

使用 NDK 的示例:

我在我的应用程序中使用了 C++ 代码中的 logcat,为此我添加到我的 Android.mk(在 Android 工作室中 - gradle 属性) :

LOCAL_LDLIBS := -llog

并且在我的 C++ 代码中包含 header:

#include <android/log.h>

而且我确实在以下位置看到了 header 文件: \platforms\android-21\arch-arm\usr\include\android\log.h 和 lib 文件: \platforms\android-21\arch-arm\usr\lib\liblog.所以

我的问题:

  1. 不是所有JavaSDK框架中存在的API在NDK框架中都有吧?

  2. 如果我对 1 的看法是正确的:虽然使用日志似乎很容易,但我怎么知道哪些 API 受支持,哪些不受支持? 例如,是否有使用 camera/flashlight/gps/Writing 存储的库,或者我必须使用 Java 代码? 我没有看到关于它的明确 API 或文档,在 http://developer.android 官方中没有,在 NDK 安装中提供的文档中也没有(stableAPIs.html 包含最小 API 设置),而不是在我阅读的许多 Whosebug 问题中。

  3. 这是一个不同的主题,针对android不同架构的NDK编译器是基于GCC来编译我们的c++代码的吧?我怎么知道我使用的是哪个 C++ 版本?

谢谢

  1. 没错。

  2. 在您的 NDK 目录中,转到 docs,打开 Start_Here.html,然后单击 Stable APIs 以获取 NDK 支持的 API 列表。请注意,您可以通过 Java 本机接口 (JNI) 从 C++ 代码调用 Java API,但这是一个单独的主题(并且稍微更高级)。

  3. NDK 中包含 GCC 和 Clang/LLVM 工具链。
    所谓 C++ 版本,您实际上是指 编译器版本?如果您指的是编译器版本,那么如果您需要特定版本,您可以指定要使用哪个版本:

    # Specify that you want GCC 4.8 to be used. This goes in your Application.mk file NDK_TOOLCHAIN_VERSION := 4.8

如果你真的是指 C++ 版本,那么除非你明确指定一个标准(例如使用 -std=c++11-std=c++1y),否则你可能会得到 C++98 标准(可能有一些扩展).