초록 close

In general an Android application based on Java operates on DALVIK virtual machine. It is safe that an application operates on a virtual machine which means it is platform-independent. However, to be operated on a virtual machine, it takes some time for the program codes to be converted. This is slower than an operation of native codes like C because the codes are translated to machine language, which means it is platform-dependent. Also, it is restricted to access a hardware directly on a virtual machine. Many programs have been developed based on C/C++. We might save time and cost for development if we can reuse these programs without re-developing for other programming languages. On this paper, we explain how to operate a code based on C/C++ using JNI (Java Native Interface). Starting with how to call C/C++ native functions from Java classes, we introduce how codes developed with two different programming languages communicate each other. Also, we introduce a specific case using native codes on Android as an example.


일반적으로 자바에 기반하는 안드로이드 어플리케이션은 달빅(Dalvik) 가상 머신상에서 구동된다. 플랫폼에 독립적인 가상 머신을 이용하여 어플리케이션을 구동하는 방식은 하드웨어에 손상을 주지 않고 어플리케이션을 안정적으로 구동할 수 있다는 장점이 있다. 그러나 가상 머신에서 구동하기 위해 코드를 변환하는 과정이 필수적으로 포함되면서 플랫폼에 의존하지만 기계어로 변환되는 네이티브 코드에 비하여 상대적으로 속도가 느리다. 또한 하드웨어에 직접적으로 접근하는 것이 제한된다는 단점 또한 존재한다. 수많은 프로그램들이 이미 C/C++를 기반으로 개발되어 있으며 이러한 프로그램들을 다른 언어로 다시 개발하는 일 없이 재사용할 수 있다면 개발에 소요되는 시간과 비용이 크게 절감될 것이다. 본 논문에서는 JNI(Java Native Interface)를 통해 C/C++로 짜여진 코드를 안드로이드에서 구동하는 방법을 제시한다. 먼저 자바 클래스에서 C/C++ 네이티브 함수를 호출하는 방법과 C/C++ 네이티브 코드에서 자바 클래스 내부에 선언된 자바 함수를 호출하는 방법을 알아보고, 다른 언어로 짜여진 코드 간에 정보를 주고 받으며 상호 연동하는 과정에 대하여 설명한다. 또한 안드로이드에서 네이티브 코드를 활용한 실제 예를 구체적으로 설명한다.