NDK 사용
NDK
를 이용해서 간단한 예제를 개발해 본다.
NDK (Native Developement Kit)
: C/C++로 안드로이드 앱을 개발할 수 있도록 도와주는 도구이다.JNI (Java Native Interface)
: Java와 Native 언어들 간에 서로 호출하고 호출될 수 있도록 인터페이스를 제공한다.
1. NDK 설치
SDK Manager를 통해서 3가지를 설치한다.
Android NDK (Native Development Kit)
: Android에서 C 및 C++ 코드를 사용할 수 있도록 지원하고 네이티브 액티비티를 관리하고 물리적 구성 요소 (예: 센서 및 터치 입력)에 엑세스할 수 있는 플랫폼 라이브러리를 제공하는 툴바이다.CMake
: Gradle과 함께 작동하여 네이티브 라이브러리를 빌드하는 외부 빌드 도구이다.ndk-build
만 사용하려는 경우에는 이 구성 요소가 필요하지는 않다.LLDB
: Android Studio가 네이티브 코드를 디버그하는데 사용하는 디버거이다.
File -> Project Structure -> SDK Location -> Android NDK location에 설정 되었는지 확인 한다.
2. Project 생성
평상시와 같이 생성하고 단지 옵션에서 include C/C++
항목을 체크해 준다.
- 그냥 자동으로 샘플 코드를 생성해 준다.
샘플 예제를 실행하면 아래와 같다.
cpp
: 해당 파일은 stringFromJNI()함수를 제공해서 문자열을 반환하게 된다.External Build Files
: 해당 그룹에서CMake
또는ndk-build
용 빌드 스크립트를 확인 할 수 있다.build.gradle
파일이Gradle
에 앱을 빌드하는 방법을 알리는 방법과 유사하게CMake
및ndk-build
에서 네이티브 라이브러리를 빌드하는 방법을 파악하려면 빌드 스크립트가 필요하게 된다. 새로운 프로젝트의 경우Android Studio
는CMake
빌드 스크립트CMakeLists.txt
를 생성하여 모듈의 루트 디렉토리에 배치한다.
샘플 앱 빌드 및 실행
- Gradle이 외부 빌드 스크립트
CMakeLists.txt
를 호출 - CMake가 이 빌드 스크립트에 포함된 명령을 따라 C++소스 파일 native-lib.cpp를 공유 객체 라이브러리로 컴파일하고 이를 libnative-lib.so로 명명한다. 그러면 Gradle이 이를 APK로 패키징한다.
- 런타임에 앱의
MainActivity
가System.loadLibrary()
를 사용하여 네이티브 라이브러리를 로드한다. 이제 앱에서 라이브러리의 네이티브 함수stringFromJNI()
를 사용할 수 있다. MainActivity.onCreate()
가 Hello from C++를 반환하는stringFromJNI()
를 호출하고 이를 사용하여TextView
를 업데이트 한다.
기존 프로젝트에 C/C++ 코드 추가 (Eclipse Migration 포함)
네이티브 코드를 기존 프로젝트에 추가할 수 있다.
- 새로운 네이티브 소스 파일 생성
이미 있으면 생략
- CMake 빌드 스크립트 생성
이미 있으면 생략, ndk-build를 사용하기 위해서
Android.mk
가 있는 경우에도 생략
- CMake 또는 ndk-build 스크립트 파일의 경로를 제공하여 Gradle에 네이티브 라이브러리를 링크 시킨다. 방법은 아래와 같다.
참고문헌
'Computer Science > Android Application' 카테고리의 다른 글
Handler를 이용한 시간제한 기능 구현 (0) | 2017.08.22 |
---|---|
AIDL과 Remote Service (1) | 2017.08.22 |
Preference (0) | 2017.08.20 |
Broadcast Receiver (0) | 2017.08.16 |
Service (0) | 2017.08.16 |