반응형


NDK 18부터는 gnustl을 지원하지 않고 대신 libc++를 사용합니다. 하지만 Android에서 OpenCV를 사용하려면 gnustll을 사용해야 되서 발생하는 에러입니다.




해결하는 방법은 두가지입니다.


다음 포스팅에 나오는대로 libc++을 사용하도록 OpenCV를 다시 컴파일하거나


Android용 OpenCV 빌드하는 방법

https://webnautes.tistory.com/1268


본 포스팅에서 설명하는대로 NDK17로 다운그레이드하는 것입니다.




1. 아래 링크에서 NDK 17을 다운로드 받아야 합니다.

https://developer.android.com/ndk/downloads/older_releases



I AGREE TO THE TERMS를 클릭합니다.




Windows 64-bit용을 다운로드 받습니다.





2. 다음처럼 NDK 설치 위치를 확인합니다.


안드로이드 스튜디오의 메뉴에서 File > Project Structure를 선택합니다.

Android NDK location 항목에서 NDK 경로를 확인할 수 있습니다.





3. 확인한 NDK 위치에 다운로드 받았던 파일을 압축풀어서 덮어쓰기합니다.


C:\Users\webnautes\AppData\Local\Android\Sdk\ndk-bundle


이제 NDK 17을 사용할 수 있습니다. 이 후 안드로이드 스튜디오 업데이트시 NDK는 빼고 업데이트 하셔야 합니다.




4. app 모듈을 위한 build.gradle에서 gnustl을 사용하도록 수정합니다.




노란색 줄을 추가해주고 Sync Now를 클릭합니다.


android {
   compileSdkVersion 28
   defaultConfig {
       applicationId "com.tistory.webnautes.useopencvwithcmake"

       minSdkVersion 15
       targetSdkVersion 28
       versionCode 1
       versionName "1.0"
       testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
   }
   buildTypes {
       release {
           minifyEnabled false
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }
   }
   externalNativeBuild { cmake {
       arguments '-DANDROID_STL=gnustl_static'
   } }
}




이제 다시 진행해보면 에러가 나지 않습니다.


반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. hong 2019.02.07 22:19

    build.gradle에 추가하고 sync now를 하면 다음과 같은 에러가 나옵니다.

    Could not find method arguments() for arguments [-DANDROID_STL=gnustl_static] on object of type com.android.build.gradle.internal.dsl.CmakeOptions.
    무슨 문제일까요...?ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.02.07 23:08 신고

      안드로이드 스튜디오 최신버전에서는 해당 옵션을 사용하지 못하도록 막은듯합니다.


      다음 포스팅을 참고해보세요

      Android NDK + OpenCV 카메라 예제 및 프로젝트 생성방법(CMake 사용)
      https://webnautes.tistory.com/1054

    • hong 2019.02.08 20:14

      감사합니다~~ cmake로 진행하니 잘되네요ㅎㅎ

      한가지 더 여쭤봐도될까요?

      안드로이드에서 webrtc로 영상통화 중 얼굴인식 기능을 구현하려고 합니다. 현재 webrtc의 surfaceview에서 bitmap을 받아와, 이 bitmap에서 얼굴인식을 해보려고 합니다.
      opencv를 통해 bitmap 파일에서 얼굴인식을 하는 법이 있을까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.02.09 16:40 신고

      bitmap을 opencv에서 사용하는 데이터 타입으로 변환하면 될듯합니다.

  2. soup 2020.08.18 01:08

    setContentView나 onCreate, findViewById, startActivityForResult함수 등이 빨간줄이 쳐져서 마우스를 갖다 대면 'Cannot resolve method ~ ' 라고 나오고,
    import android.support.annotation.NonNull; 에서 annotation이,
    import android.support.v7.app.AlertDialog, import android.support.v7.app.AppCompatActivity에서 v7이 빨간줄 쳐지는데, 혹시 무슨 문제일지 여쭤봐도될까요... ㅠㅠㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.08.18 07:18 신고

      아래 링크에서 빨간줄 그어지는 패키지 이름을 검색하여 androidx 용 패키지 이름으로 변경하면 됩니다

      https://developer.android.com/jetpack/androidx/migrate/class-mappings?hl=ko

    • BlogIcon soup 2020.08.18 21:28

      우왓 해결되었어요ㅜㅜ 감사합니다!

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.08.18 21:30 신고

      다행이네요

+ Recent posts