android ndk 예제

궁극적으로 빌드 시스템이 빌드하는 공유 개체 파일의 이름은 libTeapotNativeActivity.so. 빌드 시스템은 lib 접두사와 .so 확장을 추가합니다. 매니페스트가 원래 android:value에 할당하는 값의 일부도 아닙니다. helloJNI.java 파일은 hellojni / src / com / 예제 / hellojni / 에 있습니다. 네이티브 쪽에서 문자열을 검색한 다음 화면에 표시하는 함수를 호출합니다. Application.mk 동일하게 유지됩니다. 예제 1과 동일한 방식으로 프로젝트를 빌드하고 바이너리를 실행할 수 있습니다. android_app_glue가 시스템에서 onNativeWindowCreated() 콜백을 수신할 때 ndk_helper 클래스는 APP_CMD_INIT_WINDOW를 게시합니다. 응용 프로그램은 일반적으로 EGL 초기화와 같은 창 초기화를 수행할 수 있습니다. 활동이 아직 준비되지 않았기 때문에 활동 수명 주기 외부에서 이 작업을 수행합니다. 우리는 우리 자신의 메이크 파일을 정의하기 위해 이전 기술을 더욱 밀어 붙일 수 있습니다. 다음 예제는 예제 4에서 찾을 수 있습니다.

이것은 NDK를 사용하여 안드로이드에 „안녕하세요 세계“프로젝트를 만드는 방법에 대한 자습서입니다. 그것은 당신이 (구글에서) 이클립스 -ADT를 사용하는 것으로 가정합니다. JNI의 작동 방식을 자세히 설명하는 것이 아니라 예제를 제공하기 위한 것입니다. 이 줄은 빌드 시스템에 빌드할 CPU와 빌드할 아키텍처를 알려줍니다. 이 예제에서는 빌드 시스템이 지원되는 모든 아키텍처에 대해 빌드됩니다. 마지막으로 우리는 helloworld-c 네이티브_app_glue에 의존 하도록 CMake를 말합니다., 안 드 로이드, 그리고 우리가 target_link_라이브러리를 사용 하 여 log-lib 라는 라이브러리. 이렇게 하면 C++ 프로젝트에서 네이티브 앱 논리를 참조할 수 있습니다. add_library 앞에 설정된 호출은 helloworld-c가 android_native_app_glue에서 제공하는 ANativeActivity_onCreate라는 함수를 구현하지 않도록 합니다.

다음은 Android NDK의 공식 설명서입니다 https://developer.android.com/ndk/guides/index.html. 메시지의 의미에 대한 자세한 내용은 android_native_app_glue.h 및 .c 소스 파일의 주석을 참조하십시오. 여기에 세분화 할 것이 많므로 시작하십시오. 먼저 native_app_glue라는 라이브러리를 만들고 정적 라이브러리로 나타내기 위해 _library를 추가합니다. 그런 다음 자동으로 생성 된 환경 변수 ${ANDROID_NDK}를 찾아 NDK 설치에서 일부 파일을 찾습니다. 이를 사용하여 native_app_glue: android_native_app_glue.c에 대한 구현을 가져옵니다. 그런데 전체 프로젝트는 Github: https://github.com/artem-leushin/superpowered-ndk-example 에서 사용할 수 있습니다. APP_BUILD_SCRIPT는 전체 응용 프로그램의 주요 메이크파일 항목을 나타냅니다.

우리의 경우, 그것은 Android.mk. 지금까지 모든 것이 좋아 보입니다, 다음, 우리는 프로젝트를 구축하기 위해 다음 명령을 사용, 우리는 ndK 빌드 명령에 NDK_APPLICATION_MK 변수를 추가하여 ndk 빌드Application.mk 찾을 위치를 알려주시기 바랍니다. 이 예제에서는 다음 명령을 사용 합니다: 사용 가능한 CMake 변수의 전체 목록에 대 한 참조 https://developer.android.com/ndk/guides/cmake.html#variables 할 수 있습니다. 이러한 규칙에 따라 이 예제에서는 Java_com_example_hellojni_HelloJni_stringFromJNI라는 함수 이름을 사용합니다. 이 이름은 hellojni/ src/com/example/hellojni/HelloJni.java에 있는 stringFromJNI(라는 Java 함수)를 나타냅니다. ndk_helper 클래스의 첫 번째 사용은 EGL 관련 수명 주기를 처리하고 EGL 컨텍스트 상태(생성/손실됨)를 Android 수명 주기 이벤트와 연결하는 것입니다. ndk_helper 클래스를 사용하면 응용 프로그램에서 컨텍스트 정보를 보존하여 시스템이 소멸된 활동을 복원할 수 있습니다. 이 기능은 예를 들어 대상 컴퓨터가 회전할 때(활동이 파괴된 다음 새 방향으로 즉시 복원됨) 또는 잠금 화면이 나타나는 경우에 유용합니다. 다음 예제 프로젝트에서는 입력 번호에 추가 및 곱셈을 수행하기 위해 add() 및 mul() 함수를 호출하는 소스 파일 compute.cpp 내부에 main() 함수가 있습니다.