Android Framework ) 안드로이드와 JNI

Android 2014. 6. 11. 13:16 Posted by gaeddong2

안드로이드 프레임워크에서 C / C++과 자바 레이어가 유기적으로 동작하게 만들려면 자바 레이어와 C/C++레이어를 상호 연결해 주는 매개체가 필요하다.

자바와 C/C++ 모듈 간의 인터페이스를 가능하게 해주는 것이 JNI(Java Native Interface)다.


JNI 활용

  • 빠른 처리 속도를 요구하는 루틴
  • 하드웨어 제어
  • 기존 C/C++ 프로그램의 재사용
JNI 기본 원리(자바에서 C라이브러리 호출)


1단계 : 자바 코드 작성 

- JNI를 통해 C로 구현된 함수를 호출하려면 단순히 자바 클래스에 네이티브 메서드를 선언하면 된다.


2단계 : 작성한 자바 코드 컴파일

- 작성한 코드를 javac로 컴파일한다. 컴파일하면 클래스 파일이 생성된다. 


3단계 : C / C++ 헤더 파일 생성

- 클래스에 선언되어 있는 메서드인 실제 구현된 dll 라이브러리 파일을 만들도록 한다.


UnsatisfiedLinkError 오류

- 자바 가상 머신이 네이티브 메서드와 링크될 C함수를 로드 중인 dll 라이브러리에서 찾지 못했기 때문이다.

( JNI 명세에 나온 대로 함수 원형을 만들어야 한다.)


javah라는 툴을 이용하여 C함수의 원형을 만들어주도록 한다.

Java_클래스이름_네이티브메서드이름 형태로 구성.

ex ) JNIEXPORT void JNICALL Java_HelloJNI_printHello(JNIEnv *, jobject)


4단계 : C/C++ 코드 구현

- JNI 네이티브 함수를 구현하도록 한다.


5단계 : C 공유 라이브러리 생성

- 작성한 헤더 파일과 소스 파일을 가지고 공유 라이브러리를 만든다.


6단계 : 자바 프로그램 실행

'Android' 카테고리의 다른 글

Android ) Zygote  (0) 2014.06.11
Android ) 안드로이드 NDK  (0) 2014.06.11
Android Framework ) 프로퍼티 서비스  (0) 2014.06.09
Android Framework ) 디바이스 노드 파일 생성  (0) 2014.06.09
Android Framework ) init.rc 파일  (0) 2014.06.09