用于APK的Android复制文件上的OpenCV

用于APK的Android复制文件上的OpenCV,android,opencv,java-native-interface,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\PortalSen

我正在尝试构建一个使用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生成文件之前。我尝试了这个,但仍然得到相同的重复文件错误。有没有办法明确告诉Eclipse不要包含这些库文件中的任何一个?我相信这是因为我把java和C++连接到OpenCV,但是OpenCVA CAMMALL模块行应该停止这种情况下的双重包含。 我自己也遇到了这个问题。我使用了OpenCV 2.4 beta版,在构建使用本机OpenCV代码的示例教程时出现了问题

我把它修好了,我想试着解释一下我是怎么倒下的

我假设您在eclipse中构建了如下库:

两个项目、OpenCV项目和示例项目都位于同一个工作区中。OpenCV项目被标记为库

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

  • 2.3:

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

    • 项目设置->Android->添加参考->PathToOpenCV-2.4beta 其他2个设置不需要
当您这样做时,Java项目就可以工作了。但是,当您包含这些lib项目,然后尝试构建本机示例时,
.so
文件将被复制,并与预构建的OpenCV项目中的一些其他
*.a
文件一起位于
/obj/local/armeabi-v7a/
下的sample projects文件夹中。从那里,NDK在
/lib
文件夹中构建文件,这些文件后来被包括在apk文件中(我想)。然后,Eclipse的Java部分运行。这会检测到
.so
文件的重复,这些文件在OpenCV库中找到它们的slve,现在在示例库中找到它们,因此它拒绝生成新的apk文件。(可能有一种解决方法可以使用重复的条目进行此操作,我没有遵循此方法。请参阅)

为了避免重复,我删除了项目属性“project settings->Android->add Reference->PathToOpenCV-2.4beta”中的选项,然后NDK导入LIB并构建它们(因为路径是从上面的第二个链接在Eclipse构建链中设置的),该示例从二进制文件中了解一些OpenCV,尽管它不包括整个OpenCV项目

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