适用于Android的Android重复文件上的OpenCV

时间:2012-02-27 05:28:47

标签: android opencv java-native-interface

我正在尝试构建一个使用OpenCV Android端口的应用。我已正确编写和包装C ++ OpenCV函数,并且项目构建没有任何错误。但是,当我去构建签名的APK时,我收到以下错误:

[2012-02-26 21:06:50 - PortalSentry] Found duplicate file for APK: lib/armeabi-v7a/libnative_camera_r2.2.2.so
Origin 1: C:\workspace\android_body\PortalSentry\libs\armeabi-v7a\libnative_camera_r2.2.2.so
Origin 2: C:\workspace\android_body\OpenCV-2.3.1\libs\armeabi-v7a\libnative_camera_r2.2.2.so

我在几个地方提到的解决方案是添加

OPENCV_CAMERA_MODULES:=off 

包含OpenCV makefile之前。我试过这个,仍然得到相同的重复文件错误。有没有办法明确告诉Eclipse不要包含其中一个库文件?我相信发生这种情况的原因是因为我从Java和C ++链接到OpenCV,但OPENCV_CAMERA_MODULES行应该在这种情况下停止双重包含。

1 个答案:

答案 0 :(得分:0)

如何解决使用来自http://opencv.itseez.com的本机OpenCv构建OpenCV示例?

我自己也遇到过这个问题。我使用OpenCV 2.4 beta,并且在构建使用本机OpenCV代码的示例教程时出现了问题。

我修好了,我想试着解释一下我是怎么走的。

我假设您在eclipse中构建了这样的库:Android binary package using with NDK

两个项目,OpenCV项目和示例项目都在同一个工作区中。 OpenCV项目标记为Library。

openCV2.3和2.4beta之间的项目设置差异:

  • 2.3:

    • 项目设置 - > Android - >添加参考 - > PathToOpenCV-2.3
    • 项目设置 - > Java构建路径 - >项目:添加项目“OpenCV-2.3”
    • 项目设置 - > Java构建路径 - >订单和导出:顶部的“OpenCV-2.3”,复选框已选中
  • 2.4

    • 项目设置 - > Android - >添加参考 - > PathToOpenCV-2.4beta 不需要其他2个设置

执行此操作时,Java项目可以正常工作。但是,当您包含这些lib项目然后尝试构建本机示例时,<libname>.so文件将被复制,并在/obj/local/armeabi-v7a/下的示例项目文件夹中找到它们,其中包含其他*.a个文件。预建的OpenCV项目。从那里开始,NDK在/lib文件夹中构建文件,这些文件稍后包含在apk文件中(我认为)。然后,Eclipse的Java部分运行。这会检测到.so文件的副本,这些文件在OpenCV库中找到了这些文件,现在在示例库中,因此它拒绝构建新的apk文件。 (可能有一种解决方法可以使用重复的条目进行此操作,但我没有遵循此操作。请参阅Duplicate file when deploying apk)。

为了避免重复,我删除了项目属性“项目设置 - &gt; Android - &gt;添加参考 - &gt; PathToOpenCV-2.4beta”中的选项,然后NDK导入lib并构建它们(因为路径是在上面的第二个链接的Eclipse构建链中设置),示例知道二进制文件中的一些OpenCV,尽管它不包括整个OpenCV项目。

当您需要OpenCV的Java支持时,我不知道这是否有效。