Android (안드로이드)

[Android] NDK / JNI (1)

Oscar:) 2024. 12. 4. 20:00
728x90

 

 

 

이번 포스팅에서는 NDK와 JNI에 대해 알아본다.

 

 

 


 

 

 

✅ NDK ?

 

Native Development Kit 의 약자로,

Android에서 C · C++ 코드를 사용할 수 있게 해주는 도구 모음이다.

 

지난 안드로이드에서의 C언어 사용 관련 포스팅에서도 언급했다시피,

기기의 성능을 최대한 활용해야하는 컴퓨팅 집약 앱을 개발할 때

유용하게 사용할 수 있다며 공식 문서에서 소개되고 있다.

 

 

 

 

● 조금 더 세부적인 사용 사례

 

- 게임 개발

- FFmpeg와 같은 라이브러리를 통합하여 비디오 처리

- OpenCV와 같은 고성능 라이브러리를 활용한 이미지 처리

- 그 외 저수준 언어로 작성된 특화된 알고리즘 적용

 

 

 

 

● 구성 요소

 

- 헤더 파일 : Android API에 대한 헤더 파일 제공

- 빌드 도구 : ndk-build와 Gradle을 사용하여 네이티브 라이브러리 컴파일

- 디버깅 도구 : LLDB와 같은 디버거 제공

- 샘플 코드 : NDK를 활용하는 예제 제공

 

 

 

 

● 빌드 방법

 

NDK로 코드를 빌드하는 방법은 크게 3가지가 있다.

 

- Make 기반 ndk-build

Android.mk, Application.mk 사용하여 빌드하며, 간단한 프로젝트에 적합한 방식이다.

 

- CMake

NDK 최신 표준 빌드 도구이며, Gradle 빌드 시스템과 호환이 좋다.

비교적 복잡한 프로젝트나 크로스 플랫폼 프로젝트에 적합한 방식이다.

 

- 독립 실행형 도구 모음(Standalone Toolchain)

NDK의 크로스 컴파일러와 빌드 도구를 사용하며, 크로스 플랫폼 프로젝트에 적합하다.

주로 외부에서 다른 빌드 시스템을 함께 사용하는 경우 사용한다.

 

 

 

NDK 공식 문서 ↓

 

Android NDK  |  Android Developers

C와 C++ 같은 언어를 사용하여 앱의 네이티브 코드 일부를 구현하는 도구 모음입니다.

developer.android.com

 

 

 

 

 

✅ JNI ?

 

Java Native Interface의 약자로,

네이티브 언어로 작성된 코드를 Java에서 사용할 수 있게 해주는 인터페이스다.

 

즉, C로 작성된 코드와 Java로 작성된 코드를 연결해주는 역할을 한다.

Java 코드가 C 코드를 호출하거나, 그 반대로도 호출할 수 있는 일련의 API를 제공하는 셈이다.

 

 

JNI 덕분에 Java와 네이티브 간에 데이터 교환을 할 수 있고,

네이티브 언어로 복잡하게 짜여진 코드도 함수 한 줄로 불러와 Java에서 간편히 사용할 수 있다.

 

 

사실상 안드로이드 환경에서 네이티브 언어를 사용할 수 있게 해주는 건 JNI 다.

그리고 JNI를 사용할 수 있게 해주는 도구가 NDK 라고 정리할 수 있겠다.

 

 

 

JNI 공식 문서 ↓

 

JNI 도움말  |  Android NDK  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. JNI 도움말 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. JNI는 Java Native Interface(자바 네이티브 인터페

developer.android.com

 

 

 

 

 

 


 

 

 

 

다음 포스팅에서는 JNI를 직접 사용해볼 예정이다.

 

 

 

728x90