NDK란 무엇인가?
Android NDK는 C와 C++ 같은 네이티브 코드 언어를 사용하여 앱의 일부를 구현하는 도구모음입니다. 어떤 유형의 앱에서는 네이티브 코드 언어로 작성된 코드 라이브러리를 재사용하는 데 도움이 됩니다. 이해를 돕기위해서 C언어의 Math.h 라이브러리를 이용하는 것과, Java의 Math 클래스를 이용할 때 두가지 중에 C언어로 제작된 라이브러리가 더 높은 효율을 가지고 있다면 NDK를 이용하여 Math.h 라이브러리를 이용하여 효율적인 앱을 만들 수 있습니다. NDK의 장점으로는 속도향상, 유연한 프로그램 개발 가능하며 실제 안드로이드 2D/3D OpenGL 관련 영상처리 라이브러리들은 대부분 NDK(Native Development Kit)를 이용해 개발이 됩니다.
JNI(Java Native Interface)는 JAVA와 C/C++ 라이브러리를 연동시켜주는 Interface 이며, JNI를 이용하여 안드로이드 개발에 NDK를 이용할 수 있습니다.
JNI를 이용한 NDK 연동
테스트 환경 : Android Studio 2.3 (2.2버전 이상부터 JNI 연동 방식 변경)
안드로이드 프로젝트를 새로 만들어 줍니다. New Project 에서 어플리케이션 이름입력 후 아래 CheckBox Include C++ support를 체크하고 Next로 넘어갑니다. 다음 설정방법은 동일하며 Next로 끝까지 넘어가 Customize C++ Support 부분에서 디폴트 상태로 Finish 해줍니다. 프로젝트 로딩시간이 다소 길어 기다려주시면 됩니다.
기존의 프로젝트와 동일하지만 cpp라는 폴더와 CMakeLists.txt가 추가 되었습니다.
제가 기존에 셋팅을 해 두어서 자동으로 설정이 된 것인지 확인이 안되어,
SDK Tools에서 CMake, LLDB, NDK 를 설치합니다.
CMake : Gradle과 함께 작동하여 네이티브 라이브러리를 빌드하는 외부 빌드 도구.
LLDB : Android Studio가 네이티브 코드를 디버그하는데 사용하는 디버거.
기본설정을 완료하였습니다. 이제 테스트 해 봅시다.
MainActivity.class
package com.yoohyeok.ndk_test; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class MainActivity extends AppCompatActivity { // Used to load the 'native-lib' library on application startup. static { System.loadLibrary("native-lib"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call to a native method TextView tv = (TextView) findViewById(R.id.sample_text); tv.setText(stringFromJNI()); } /** * A native method that is implemented by the 'native-lib' native library, * which is packaged with this application. */ public native String stringFromJNI(); }
native-lib.cpp
#include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_com_yoohyeok_ndk_1test_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); }
Android NDK는 C와 C++ 같은 네이티브 코드 언어를 사용하여 앱의 일부를 구현하는 도구모음입니다. 어떤 유형의 앱에서는 네이티브 코드 언어로 작성된 코드 라이브러리를 재사용하는 데 도움이 됩니다. 이해를 돕기위해서 C언어의 Math.h 라이브러리를 이용하는 것과, Java의 Math 클래스를 이용할 때 두가지 중에 C언어로 제작된 라이브러리가 더 높은 효율을 가지고 있다면 NDK를 이용하여 Math.h 라이브러리를 이용하여 효율적인 앱을 만들 수 있습니다. NDK의 장점으로는 속도향상, 유연한 프로그램 개발 가능하며 실제 안드로이드 2D/3D OpenGL 관련 영상처리 라이브러리들은 대부분 NDK(Native Development Kit)를 이용해 개발이 됩니다.
'Android' 카테고리의 다른 글
[Android] Retrofit2 를 이용한 통신방식 (2) | 2018.02.07 |
---|---|
[Hybrid App] Custom 테마 만들기 (0) | 2017.11.07 |
[Hybird App] 페이지간 링크 연결 (0) | 2017.11.06 |
[Hybird App] 모바일 UI 프레임워크(JQuery Mobile) 사용법 (1) | 2017.10.30 |
[Hybird App] 하이브리드 앱 개발환경 세팅 (2) | 2017.10.24 |