유니티 안드로이드 OpenCV 개발 고민..180410
일기/개발 일지2018. 4. 10. 18:25
안녕하세요. 개발자 드리머즈입니다.
유니티를 통해 OpenCV를 사용하는 apk를 만드려고 하고 있습니다.
간단해 보이지만 그 과정을 자세히 보면
c++언어로 작성된 OpenCV를 안드로이드 스튜디오나 비주얼 스튜디오를 통해 안드로이드에서 인식 가능한 so 파일 형태의 라이브러리를 먼저 만들어야 합니다.
그리고 이 라이브러리를 유니티에서 플러그인으로 인식시키고 유니티의 C# script에서 그 so파일(플러그인)을 사용하면 됩니다.
그런데 이렇게 할 경우.. 유니티 자체에서 프로그램을 실행(play?)시키면 so파일을 찾지 못해 테스트를 할 수가 없습니다. 유니티에서 시간이 오래 걸리는 apk를 만들어야하고 이 apk를 다시 안드로이드 단말에 설치해야 합니다. 시간이 너무 오래 걸리는 단점이 있습니다.
그래서 좋은 방법이 없나 생각해봤습니다.
일단 생객한 방법은
비주얼 스튜디오를 통해 윈도우에서 실행되는 유니티에서 실행 테스트를 할 수 있도록 dll 파일도 추가로 만들어보자 입니다.
비주얼 스튜디오에서 so파일을 만들 때와 dll파일 만들 때 프로젝트의 성격이 달라서 두 프로젝트를 만들어야 합니다.
음.. 아직 모든 게 명확하게 정리되진 않았지만 간단한 테스트를 해보니 잘 되는 것 같습니다.
so파일과 dll파일을 만드는 소스가 정확하게 일치하지는 않지만 핵심 부분은 같은 것으로 보입니다.
dll만드는 cpp소스
1 2 3 4 5 6 7 8 9 10 | #include <opencv2\core.hpp> // use OpenCV in this C++ Android Library extern "C" { float __declspec(dllexport) __stdcall Foopluginmethod() { cv::Mat img(10, 10, CV_8UC1); // use some OpenCV objects return img.rows * 2.0f; // should return 20.0f } } | cs |
so만드는 cpp소스
1 2 3 4 5 6 7 8 9 10 | #include <opencv2\core.hpp> // use OpenCV in this C++ Android Library extern "C" { float SharedObject1::Foopluginmethod() { cv::Mat img(10, 10, CV_8UC1); // use some OpenCV objects return img.rows * 1.0f; // should return 10.0f } } | cs |
so만드는 h파일
1 2 3 4 5 6 7 | extern "C" { namespace SharedObject1 { float Foopluginmethod(); } } | cs |
댓글 영역