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.所以
我的问题:
不是所有JavaSDK框架中存在的API在NDK框架中都有吧?
如果我对 1 的看法是正确的:虽然使用日志似乎很容易,但我怎么知道哪些 API 受支持,哪些不受支持?
例如,是否有使用 camera/flashlight/gps/Writing 存储的库,或者我必须使用 Java 代码?
我没有看到关于它的明确 API 或文档,在 http://developer.android 官方中没有,在 NDK 安装中提供的文档中也没有(stableAPIs.html 包含最小 API 设置),而不是在我阅读的许多 Whosebug 问题中。
这是一个不同的主题,针对android不同架构的NDK编译器是基于GCC来编译我们的c++代码的吧?我怎么知道我使用的是哪个 C++ 版本?
谢谢
没错。
在您的 NDK 目录中,转到 docs
,打开 Start_Here.html
,然后单击 Stable APIs
以获取 NDK 支持的 API 列表。请注意,您可以通过 Java 本机接口 (JNI) 从 C++ 代码调用 Java API,但这是一个单独的主题(并且稍微更高级)。
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 标准(可能有一些扩展).
我开始研究 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.所以
我的问题:
不是所有JavaSDK框架中存在的API在NDK框架中都有吧?
如果我对 1 的看法是正确的:虽然使用日志似乎很容易,但我怎么知道哪些 API 受支持,哪些不受支持? 例如,是否有使用 camera/flashlight/gps/Writing 存储的库,或者我必须使用 Java 代码? 我没有看到关于它的明确 API 或文档,在 http://developer.android 官方中没有,在 NDK 安装中提供的文档中也没有(stableAPIs.html 包含最小 API 设置),而不是在我阅读的许多 Whosebug 问题中。
这是一个不同的主题,针对android不同架构的NDK编译器是基于GCC来编译我们的c++代码的吧?我怎么知道我使用的是哪个 C++ 版本?
谢谢
没错。
在您的 NDK 目录中,转到
docs
,打开Start_Here.html
,然后单击Stable APIs
以获取 NDK 支持的 API 列表。请注意,您可以通过 Java 本机接口 (JNI) 从 C++ 代码调用 Java API,但这是一个单独的主题(并且稍微更高级)。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 标准(可能有一些扩展).