android-ndk 튜토리얼
android-ndk 시작하기
수색…
비고
Android NDK 란 무엇입니까?
Android Native Development Kit (NDK)는 C / C ++로 앱의 일부를 내장 할 수있는 Android SDK의 보조 도구입니다. 이것은 다음과 같은 경우에 유용합니다.
- 다양한 플랫폼 (Android, iOS, Linux 등)에서 애플리케이션 구성 요소 공유
- 중요한 부분의 성능 향상
- 기존 C / C ++ 라이브러리 재사용
NDK는 헤더와 라이브러리를 제공하여 개발자가 C / C ++로 프로그래밍하면서 활동을 구성하고 사용자 입력을 처리하며 하드웨어 센서를 사용하고 응용 프로그램 리소스에 액세스하는 등의 작업을 할 수 있도록합니다.
버전
간단한 예제로 Android NDK 시작하기
Android Studio 2.2 이상의 NDAC (Native Development Kit)를 사용하여 C 및 C ++ 코드를 컴파일 할 수 있습니다.
수동으로 NDK를 다운로드하여 빌드하거나 CMake를 통해 NDK를 사용할 수 있습니다.
여기서는 NDK와 예제 코드를 수동으로 설치하기위한 프로세스 흐름을 설명하고,
시스템 OS에 따라 NDK를 https://developer.android.com/ndk/downloads/index.html 에서 다운로드 할 수 있습니다.
다운로드 후 시스템 환경 변수에 경로 이름을 " NDK_PROJECT_PATH "변수 값 "NDK 저장 경로 위치"로 지정하십시오.
다음으로 NDK를 Android Studio와 통합하기 위해 새로운 Android 프로젝트를 만든 후,
그라디언트 - 로컬 속성에서 SDD 경로의 위치를 추가합니다.
sdk.dir=F\:\\gowtham\\Android\\sdk과
android.useDeprecatedNdk = true
그런 다음 Build - Make Project (Ctrl + f9)를 누릅니다.
프로젝트가 성공적으로 빌드되고 아래에 표시된 것처럼 메시지 gradle 빌드에서 BUILD SUCCESFUL을 얻게됩니다.
그런 다음 터미널에서 처음에는 프로젝트 경로가 포함됩니다.
cd app/src/main 추가하십시오.
경로는 프로젝트 경로에서 주 경로로 확장됩니다.
다음으로 Build - Make Project (Ctrl + f9)를 다시 누릅니다.
이제 아래와 같이 app-build-intermediate-classes-debug 폴더 아래에 있습니다.
이제 app / src / main / java 아래에 새 Java 클래스 파일을 만듭니다. 여기에서 NativeClass라는 Java 파일을 만들었습니다.
함수 이름과 함수에 대한 입력이있는 간단한 호출 함수를 작성하십시오. 예를 들어 여기에 함수를 작성하고 이에 대한 두 개의 정수 입력이 있습니다.
다시 프로젝트 (Ctrl + f9)를 빌드하고,
빌드 할 때 이와 같이 빌드 된 클래스 파일을 찾을 수 있습니다.
Then,in terminal
`-Javah -d jni –classpath ../../build/intermediates/classes/debug`application.com.ndkapplication.NativeClass
여기서, - d - 출력 디렉토리 - jni - JNI 스타일 헤더 파일 생성 (기본값) - classpath - 클래스를로드합니다.
이제 프로젝트 (Ctrl + f9)를 빌드하면 jni 폴더가 생성되고 아래에 표시된 것처럼 이전에 터미널에서 지정한 이름으로 헤더 파일 이 작성됩니다
이제 헤더 파일을 복사하고 헤더 파일과 동일한 이름의 .cpp 또는 .c 파일을 jni 폴더에 저장하십시오.
나는 아래와 같이 cpp 파일을 만들었다.
Delete everything before **JNIEXPORT line** in this file and **add header file name** alone.
Here I am for simple example just adding two numbers and returning value to android java.
Application_com_ndkapplication_NativeClass.cpp
#include <application_com_ndkapplication_NativeClass.h>
JNIEXPORT jint JNICALL Java_application_com_ndkapplication_NativeClass_example
(JNIEnv *, jclass , jint as , jint bs){
return (as + bs);
}
이 예제에서는 헤더 파일에 함수를 추가 할 필요가 없습니다.
Jni 폴더에 Android.mk 및 Application.mk 라는 새 파일 만들기
Android.mk 파일은 소스를 빌드 시스템에 설명합니다.
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := application_com_ndkapplication_NativeClass.cpp
LOCAL_LDLIBS += -llog
LOCAL_MODULE := exp-jni
include $(BUILD_SHARED_LIBRARY)
이 링크에서 읽은이 파일에 대한 세부 정보 https://developer.android.com/ndk/guides/android_mk.html
Application.mk : 앱에 필요한 기본 모듈을 설명합니다.
Application.mk
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti –fexceptions
APP_ABI := armeabi-v7a armeabi arm64-v8a mips mips64 x86 x86_64
APP_PLATFORM := android-16
이 링크에서 읽은이 파일에 대한 세부 정보 https://developer.android.com/ndk/guides/application_mk.html
Now build the project again **(Ctrl + f9)**, you will find the **armeabi-v7a, armeabi, arm64-v8a ,mips, mips64, x86 and x86_64** folder created inside jniLibs.
그런 다음 주 활동에서 입력을 전달하고 원시 클래스 파일에 대한 출력을 가져옵니다.
int a = 5, b = 5, res ;
res = NativeClass.example(((int) a),((int) b));
TextView textView = (TextView) this.findViewById(R.id.tv);
textView.setText(new Integer(res).toString());
여기서는 a, b를 통해 두 개의 정수를 입력하고 변수 res에서 출력을 얻습니다.
그리고 얻어진 출력은 TextView로 전달되어 화면에 표시됩니다.
그리고 Android.mk 파일에서 지정한 라이브러리 를 LOCAL_MODULE 과 같이 추가하는 것을 잊지 마십시오.
static {
System.loadLibrary("exp-jni");
}
마지막으로 프로젝트를 다시 빌드 (Ctrl + f9)하면 각 armeabi-v7a, armeabi, arm64-v8a, mips, mips64, x86 및 x86_64 폴더 아래에 만들어진 .so 파일을 찾을 수 있습니다.
그런 다음 애플리케이션을 실행하면이 예제의 결과가 10으로 표시됩니다.
이것은 NDK 초보자를위한 기본 프로그램입니다. OpenCV 라이브러리는 여기에서 가져올 수 있으며 이미지 처리 응용 프로그램도 수행 할 수 있습니다.










