2012-02-27 44 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支持。