【问题标题】:Android NDK native libraries and documentationAndroid NDK 原生库和文档
【发布时间】:2015-01-05 15:16:20
【问题描述】:

我开始使用 JNI 开发 NDK - Native Development Kit。

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

使用 NDK 的示例:

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

LOCAL_LDLIBS := -llog

在我的 c++ 代码中,我包含了标题:

#include <android/log.h>

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

我的问题:

  1. 并非所有存在于 Java SDK 框架中的 API 都存在于 NDK 框架中,对吧?

  2. 如果我对 1 的看法是正确的:虽然使用日志似乎很容易,但我如何知道哪些 API 受支持,哪些不支持? 例如,是否有用于使用相机/手电筒/gps/写入存储的库,或者对于这些我必须使用 Java 代码? 我没有在http://developer.android官方中看到明确的API或文档,也没有在NDK安装中提供的文档中(stableAPIs.html包含最小API集的最小描述),也没有在许多StackOverFlow中我读过的问题。

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

谢谢

【问题讨论】:

    标签: android android-ndk java-native-interface


    【解决方案1】:
    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 标准(可能带有一些扩展)。

    【讨论】:

    • 感谢您的评论! :) 这回答了我的问题。就问题 2 而言,我已经在 html 中看到了 Stable APIs 部分,但它似乎很差。例如,我现在想在本地使用传感器,而在稳定的 API 中只有 1 行:“ To Listen to input events and sensors directly from native code.” 所以现在我必须明确地转到头文件来尝试理解。如果我想要关于库及其 API 的文档,它似乎不存在。没有其他文件吗?
    • 可以看一下NDK自带的native-activity示例程序。它使用加速度计。
    • 是的,但我对传感器的实现并不特别感兴趣,这只是作为一个例子......我接受你的回答,所以谢谢:) 我想创建一个单独的帖子,但也许你知道为什么在 AndroidStudios 中为这些原生 API 方法编写 c++ 代码时无法自动完成工作?
    • 嗯,NDK 文档并不是那么好。示例程序和标题主要是您必须经过的。但是对于某些 API,您可以在其他地方找到文档(例如,khronos.org 有 OpenGL ES 和 OpenSL ES 的文档)。至于 Android Studio 问题;我自己不使用Android Studio,所以不知道怎么配置。
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 2012-07-04
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2018-06-11
    • 2015-12-30
    • 1970-01-01
    相关资源
    最近更新 更多