이번 글은 webnautes님께서 작성해주신 방법으로 진행하다가 제게 생긴 에러의 해결법을 공유하고자 합니다.


능력자이신 분을 찬양하며, 제가 참고한 글의 링크입니다. 

http://webnautes.tistory.com/923



불가피하게 구 버전에서 작업하게 되어 안드로이드 스튜디오 2.1.2로 작업하게 되었습니다.

제게 발생한 에러는 모두 버전이 낮아서 생긴 문제였기 때문에, 저처럼 구버전으로 작업하시는 분들께 도움이 될 것 같습니다.


개발 환경

- Windows 10

- Android Studio 2.1.2

- OpenCV 3.2.0

- Android API Level 26



에러 문구는 간단히 요약하여 적겠습니다.


1. NDK integration is deprecated in the current plugin.

  -> gradle.properties에서 android.useDeprecatedNdk=true 를 작성해주시면 됩니다.


2. Gradle dsl method not found externalnativebuild.

  -> build.gradle에서 classpath 'com.android.tools.build:gradle:2.2.0' 으로 변경 (2.2.0이상의 버전에서만 지원한다고 합니다.)


3. Error: minimum supported gradle version is 2.14.1.

  -> gradle-wrapper.properties에서 distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 으로 변경


2, 3번의 경우 저는 최소버전에 맞춰 변환했지만 아래 내용을 참조하여 유동적으로 최신버전을 맞추어도 됩니다. 2번 에러 해결 후 3번 에러가 나는 이유는 Plugin version과 Required Gradle version이 맞지 않기 때문에 생기는 문제입니다.



여기까지가 구버전에서 webnautes님의 글대로 진행했을 때의 에러 해결법입니다. 이 후 정상적으로 동작하는 것을 확인하였으며, 이 외에 생기는 에러들은 jni상의 헤더나 cpp파일에서 JNICALL이 잘못 적혔을 확률이 높습니다. 매개변수에 배열을 넣어주실 분들은 jnit value[]가 아니라 jintArray로 표현해야하니 혹시 처음 하시는 분들은 참고하시기 바랍니다. 전 이것 때문에 많이 해맸거든요..




출처


개발 환경 설치 법 - http://webnautes.tistory.com/923

2번 에러 - https://stackoverflow.com/questions/39506379/could-not-find-method-externalnativebuild-for-arguments

3번 에러 - https://developer.android.com/studio/releases/gradle-plugin.html

NDK(Native Development Kit) : Android단에서 C/C++ 언어를 사용하게 하기 위한 개발 도구

JNI (Java Native Interface) : Java에서 C/C++로 짠 로직을 사용하게 해주는 인터페이스


정도로 전 이해하고 있습니다.

그러니 'JNI를 이용해서 NDK를 호출하다.' 보다는 'NDK를 이용해서 JNI를 호출하다.'가 맞겠죠?


개발하는 데에 크게 신경쓰지 않아도 될 차이같아 보이지만 협업자간의 원할한 커뮤니케이션을 위해서는

정확한 단어 사용은 필수라고 생각합니다.



참고 URL

- https://developer.android.com/ndk/index.html?hl=ko (NDK)

- http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/intro.html#wp725 (JNI)

+ Recent posts