android - 如何使用 android ndk 的原生相机库?

标签 android c++ android-ndk shared-libraries static-libraries

我尝试加载 libcamera_client.so 但我遇到了问题。根据我的 Android.mk,它应该创建一个名为“include”的文件夹,其中包含相机库,对吗?但它不会创建文件夹,我看不到它。当我使用 #include <camera/Camera.h>using namespace android;我明白了:

fatal error: camera/Camera.h: No such file or directory

error: 'android' is not a namespace-name

谁能帮帮我?

提前致谢。

我的 Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := camera_client-prebuild
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcamera_client.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
LOCAL_SHARED_LIBRARIES := camera_client-prebuild
LOCAL_LDLIBS := -llog -ldl -lm 

include $(BUILD_SHARED_LIBRARY)

更新 1:

我正在尝试为特定的 Android 设备编写一个应用程序,该应用程序使用带有 native 代码的相机。我从我的设备中获取了已编译的库 (libcamera_client.so),我想加载相机的功能。

我试着写 LOCAL_LDLIBS := -llog -ldl -lm -lcamera_client并将包含目录 ( https://android.googlesource.com/platform/frameworks/av/+/android-4.1.2_r2.1/include ) 复制到本地 jni 文件夹中。但是当我编译时,我看到 jni/camera/Camera.h:20:26: fatal error: utils/Timers.h: No such file or directory ,问题是 camera.h取决于我没有在本地项目中复制的其他库。当我删除该行时:

#include <camera/Camera.h>

我能看到:

arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lcamera_client

此外,我更改了我的代码:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.c
LOCAL_LDLIBS := -llog -ldl -lm
LOCAL_SHARED_LIBRARIES := libcamera_client
LOCAL_C_INCLUDE := frameworks/av/include
include $(BUILD_SHARED_LIBRARY)

但问题仍然取决于我在本地项目中没有的其他库

jni/camera/Camera.h:20:26: fatal error: utils/Timers.h: No such file or directory

最佳答案

看起来您正在使用完整的 Android 源代码树进行构建,因此我假设您正在为特定的 Android 设备编写应用程序。如果不是,请不要这样做 - libcamera_client 不是任何公共(public) API 或 NDK 的一部分,因此使用它非常脆弱。由于该库是一个实现细节,各个 Android 供应商可以随意修改或替换它,并且它可能会在未来的 Android 版本中消失/更改。

除此之外,完整的 Android 版本已经包含该库,因此您只需引用它即可。完全删除 PREBUILD_SHARED_LIBRARY 部分,不需要它。 然后尝试将以下内容添加到您的测试规则中:

LOCAL_SHARED_LIBRARIES := libcamera_client
LOCAL_C_INCLUDES := frameworks/av/include

此外,为什么要构建共享库作为最终产品,而不是可执行文件?这可能是错误的,除非您遗漏了测试程序的最终构建规则。

关于android - 如何使用 android ndk 的原生相机库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22859299/

相关文章:

Android Dev - 第 3 方媒体播放器 SDK 或其他选项?

java - Android预览相机返回不完整的数据数组

c++ - 给定 std::tuple<T...> 时可变参数模板类的实例化?

c++ - 乘法矩阵c++

c++ - 我在哪里可以获得 afx...h 文件?

android - C编译器错误: build ffmpeg for android

Android:未设置电子邮件附件的 MIME 类型

android - Android 4.2 上 TextureView 的问题

java - onClick 监听器中 view.getId 为 -1

android - 与Android NDK链接库时如何解决 "incompatible target"?