NDK는 고유 한 것이 아닙니다. Android SDK를 중심으로 JNI wrapper가 있습니다. NativeActivity를 사용하면 특정 앱 라이프 사이클 이벤트를 처리하고 사용자 고유의 코드를 맨 위에 추가 할 수 있습니다. ALooper, AInputQueue 등은 모두 Java SDK의 JNI 래퍼이며, 일부는 실제 앱에서 비공개로 액세스 할 수없는 추가 코드가 포함되어 있습니다.
Android 개발과 관련해서는 네이티브 C++로 애플리케이션을 작성하는 것과 같은 것이 없습니다. (모든 실제 앱 케이스에서) 항상 Android API를 사용해야합니다. 엄청난 정도로 순수 자바. Wether를 사용하면 NDK에서 제공하는 래퍼를 사용하거나 직접 만든 래퍼를 사용하여 실제로이 작업을 변경할 수 없습니다.
질문에 대답하자면 : 코드 호출이 적은 동일한 Java 메소드에 JNI 랩퍼를 작성하는 대신 SDK 호출을 위해 JNI 랩퍼를 작성하게되므로 가치가 없습니다. , 더 간단한 코드 및 더 빠른 코드. 예를 들어, "pure C++"를 사용하여 대화 상자를 표시하면 상당히 많은 JNI 호출이 필요합니다. 똑같은 일을하는 JNI를 통해 Java 메소드를 호출하면보다 빠른 코드 (JNI 호출 하나)를 얻을 수 있으며 유지 관리가 쉬운 코드라고 할 수 있습니다.
할 수있는 일을 완전히 이해하려면 Android 소스 코드를 조사해야합니다. NDK에서 사용할 수있는 native_app_glue.c로 시작한 다음, AActivity, ALooper, AInputQueue 등의 OS 구현을 계속 진행하십시오. Google 코드 검색은 이에 큰 도움이됩니다. :-)
Java에서하기 쉽고 많은 호출이 포함 된 경우 여러 JNI 호출로 모든 코드를 작성하는 대신 모든 작업을 수행하는 JNI를 통해 메소드를 호출하십시오. 기존의 C++ 코드를 그대로 인 것처럼 보존하십시오..
대화 상자가 필요 없으며 UI가 100 % OpenGL로 그려진 OpenGL 게임을 만드는 경우 어떻게됩니까? NativeActivity를 사용하는 것이 더 합리적입니까? – Bram
그 시나리오에서는 완벽하게 이해할 수 있습니다. –