수색…


비고

Android NDK 란 무엇입니까?

Android Native Development Kit (NDK)는 C / C ++로 앱의 일부를 내장 할 수있는 Android SDK의 보조 도구입니다. 이것은 다음과 같은 경우에 유용합니다.

  • 다양한 플랫폼 (Android, iOS, Linux 등)에서 애플리케이션 구성 요소 공유
  • 중요한 부분의 성능 향상
  • 기존 C / C ++ 라이브러리 재사용

NDK는 헤더와 라이브러리를 제공하여 개발자가 C / C ++로 프로그래밍하면서 활동을 구성하고 사용자 입력을 처리하며 하드웨어 센서를 사용하고 응용 프로그램 리소스에 액세스하는 등의 작업을 할 수 있도록합니다.

버전

번역 출시일
r12 2016-06-09
r11 2016-03-09
r10 2014-07-01

간단한 예제로 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.mkApplication.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 라이브러리는 여기에서 가져올 수 있으며 이미지 처리 응용 프로그램도 수행 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow