2012-02-27 45 views
0

我正在尝试构建一个使用OpenCV的Android端口的应用程序。我已经正确地编写和包装了C++ OpenCV函数,并且构建的项目没有任何错误。当我去建一个签名的APK,但是,我得到以下错误:Android上的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的makefile文件之前添加

OPENCV_CAMERA_MODULES:=off 

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

回答

0

如何解决建设OpenCV样本与原生OpenCv从http://opencv.itseez.com

我自己在这个问题上跑了。我使用OpenCV 2.4 beta,并且在构建使用原生OpenCV代码的示例教程时出现问题。

我修正了它,我想试着解释我是怎么下去的。

我假设你建立这样的图书馆在eclipse:Android binary package using with NDK

两个项目,OpenCV的项目和示例项目都是在同一个工作区。 OpenCV项目被标记为库。

  • 2.3:openCV2.3和2.4beta之间

    项目设置不同

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

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

当你这样做时, Java项目的工作。但是,如果包含这些lib项目,然后尝试构建本机样本,则将复制<libname>.so文件,并将其自己从预构建的OpenCV项目中的/obj/local/armeabi-v7a/以及其他一些*.a文件中找到在示例项目文件夹下。从那里,NDK将生成/lib文件夹中的文件,这些文件稍后会包含在apk文件中(我认为)。然后,Eclipse的Java部分运行。这会检测到.so文件的副本,这些文件在OpenCV库中找到了msl,现在在您的样本库中,因此它拒绝创建新的apk文件。 (可能有一个解决方法,使重复条目,我没有按照此参见Duplicate file when deploying apk)。

为了避免重复,我删除了项目属性“项目设置 - > Android - >添加引用 - > PathToOpenCV-2.4beta”的选项,NDK然后导入库并构建它们(当路径被设置在上面第二个链接的Eclipse构建链中),该示例从二进制文件中知道一些OpenCV,尽管它不包含整个OpenCV项目。

我不知道这是否也适用于您需要对OpenCV的Java支持。