티스토리 뷰

프로그래밍/Android

[Android] JNI

DwEnn 2019. 8. 25. 11:54
728x90
반응형

JNI (Java Native Interface)

  1. JNI ?

  2. Why JNI ?

  3. 장/단점

  4. References

JNI ?

자바코드가 자바 VM 에서 동작할 때, 네이티브 언어로 작성된 코드를 자바에서 사용하거나, 네이티브 언어에서 자바의 클래스와 메소드를 사용할 수 있게 해주는 프로그래밍 인터페이스이다.

네이티브

원시 코드라는 의미로 C/C++ 또는 어셈블리어 이다.

쉽게 말해 Java 와 다른 언어를 연동하는 솔루션이다.

Java Side 는 SDK 로 개발할 어플리케이션 계층이며, C Side 는 NDK 를 이용하여 컴파일 할 라이브러리 계층이라고 보면된다.

OpenCVOpenGL 등의 라이브러리 등을 사용할 때 주로 사용된다.

OpenCV

Computer Vision Library, 영상처리 라이브러리이다. 컴퓨터가 알고리즘을 사용하여 사람처럼 물체 또는 글씨를 인식하기 위한 Computer Science(CS) 분야 기술이다. (다각적인 수학적 접근이 필요하다.)

OpenGL

그래픽 하드웨어 제어를 위한 소프트웨어 인터페이스로, 3D 그래픽&모델링 라이브러리이다.

NDK 를 사용하여 컴파일한 C/C++ 라이브러리 API 를 컴파일하고, 여기서 제공되는 API 를 호출하기 위한 JNI 매핑 소스를 작성하고 컴파일해야 한다.

컴파일 결과로 생성된 공유 라이브러리가 .so 파일이 된다.

Why JNI ?

JNI 는 어떻게 보면 자바가 만들어진 철학과 정반대 되는 것이나, Java 가 가진 여러 한계를 극복하고자 JNI 가 필요하다.

  • 속도 문제가 있는 계산 루틴

    • 자바가 Native Code (플랫폼에 종속적인 기계어 코드) 에 비해 연산 속도가 느림

  • 자바에서 하드웨어 제어

  • 자바에서 지원되지 않는 특정 운영체제 서비스

    • 자바의 클래스 라이브러리는 방대하고 다양한 서비스를 제공하지만, 특정 플랫폼에서 제공하는 고유의 서비스의 기능을 모두 포함할 수는 없다. 특히 특수한 목적으로 제작된 하드웨어를 자바에서 제어해야 할 필요가 있다고 한다면, 자바만으로는 해결하기 어렵다.

  • 기존의 프로그램에서 자바가 제공하는 서비스를 이용

    • 기존 작성된 프로그램이나 기존 시스템 (Legacy) 과의 연계 문제

장/단점

장점

  • 자바에서 구현할 수 없는 기능을 구현하게 해준다.

  • 각 언어의 장점을 이용할 수 있다.

단점

  • 자바 플랫폼의 독립성(이식성)을 잃게된다.

  • 플랫폼이 바뀌면 코드의 재사용성도 잃어버린다.

  • 언어별 데이터 형의 차이를 일일이 수정해 주어야한다.

  • 예외 처리 부분도 신경을 써야한다.

References

http://ipoongryu.blogspot.com/2015/04/jni.html

http://egloos.zum.com/sinuk/v/2676307

https://kyunni22.tistory.com/5

https://codertimo.wordpress.com/2015/03/26/opencv%EB%9E%80/



반응형
공지사항
최근에 올라온 글