我正在尝试构建一个使用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行应该在这种情况下停止双重包含。
答案 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:
2.4
执行此操作时,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支持时,我不知道这是否有效。