본문 바로가기
my_lesson/_Android

01 Android(C++) NDK [Vsual Studio] -Basic Common Sence

by boolean 2020. 12. 16.
728x90

01 C++ Android NDK [Vsual Studio] -Basic Common Sence


IDE : Visual Studio 2019 

Language : C++

Operate : Android


What is NDK? : from Developer.com

The Android NDK is a toolset that lets you implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can help you reuse code libraries written in those languages.


java로 구현하기에 복잡한기능이나 성능향상이 기대 되는 부분을   C나 C++ 언어로 작성하거나 이미 구현된  프로그램을 java에서 사용할 수 있도록 JDK에서 제공하는 것이 JNI(Java Native Interface)이다.


NDK를 사용하면 다음과 같은 이점을 가질 수 있다.


1. 기존에 C로 만들어진 대규모 코드를 JAVA에서 다시 만들 필요없이 재사용이 가능하다.


2. 시스템 디바이스 접근과 JAVA성능을 넘어선 작업이 필요할때 유용하다.


3. 속도 및 성능을 향상시킬 수 있다.


이러한 이점때문에 NDK는 주로 영상처리, 게임, 신호처리, 물리 시뮬레이션 등에 사용된다.


NDK를 활용한 Adroid 개발 방법 


1. Android Studio 를 이용 ( Java  &  C++)


2. Visual Studio 를 이용  (Only C++)


3. 리눅스 환경에서 이용 ( Java & C++)


여기에서는 visual Studio 에서 NDK를 이용해 Android를 개발해 보겠다


How it works?

앱을 빌드할 때는 다음 구성 요소에 대해 잘 파악하고 있어야 한다.
  • 네이티브 공유 라이브러리: NDK는 개발자의 C/C++ 소스 코드에서 이러한 라이브러리 또는 .so파일을 빌드한다.
  • 네이티브 정적 라이브러리: NDK는 정적 라이브러리나 .a 파일을 빌드할 수도 있는데, 이들을 다른 라이브러리로 링크할 수 있다.
  • 자바 네이티브 인터페이스(JNI): JNI는 자바 및 C++ 구성 요소의 상호 통신 채널 역할을 하는 인터페이스이다.
JNI에 대한 자세한 내용은 자바 네이티브 인터페이스 사양
  • 애플리케이션 바이너리 인터페이스(ABI): ABI는 앱의 기계어 코드가 런타임에 시스템과 어떻게 상호작용할지를 정확히 정의한다. NDK는 이러한 정의에 대해 .so 파일을 빌드한다. 다양한 ABI가 각기 다른 아키텍처에 대응된다.
NDK는 32비트 ARM, AArch64, x86, x86-64에 대한 ABI 지원을 포함한다. 자세한 내용은 ABI 관리(https://developer.android.com/ndk/guides/abis.html?hl=ko)를 참조해라.
  • 매니페스트: 자바 구성 요소가 없는 앱을 작성 중인 경우, 반드시 매니페스트에서 NativeActivity 클래스를 선언해야 한다. 네이티브 액티비티 및 애플리케이션의 "native_activity.h 인터페이스 사용" 제목 아래에서 이 방법의 자세한 설명을 제공했다.


Development flow

Android용 네이티브 앱 개발을 위한 일반적인 흐름은 다음과 같다.
  • 어떤 부분을 자바로 구현하고 어떤 부분을 네이티브 코드로 구현할지 결정해 앱을 디자인한다.
참고: 자바 사용을 완전히 피할 수는 있지만, 디스플레이와 UI의 제어를 비롯한 다양한 작업에 Android 자바 프레임워크가 유용하다는 사실을 알 수 있을 것이다.
  • 필자는 NativeActivity 코드로만 된 앱을 만들것이다

다른 Android 프로젝트의 경우와 마찬가지로 Android 앱 프로젝트를 만든다.

AndroidManifest.xml에서 NativeActivity 클래스를 선언한다.
NativeActivity가 Android 프레임워크와 네이티브 코드 간의 통신을 처리하므로 이를 하위 클래스로 처리하거나 메서드를 호출할 필요가 없다. AndroidManifest.xml 파일에서 애플리케이션을 네이티브로 선언하고, 네이티브 애플리케이션을 만들기 시작하면 된다.
NativeActivity를 사용하는 Android 애플리케이션은 다른 애플리케이션에서 샌드박싱된 자체 가상 머신에서 계속 실행된다. 따라서 JNI를 통해 Android 프레임워크 API에 계속 액세스할 수 있다. 하지만 센서, 입력 이벤트, 자산 등의 경우에는 NDK가 JNI를 호출할 필요 없이 사용할 수 있는 네이티브 인터페이스를 제공한다.
이러한 지원에 대한 자세한 내용은 Android NDK 네이티브 API를 참조해보자.


Referance Video:


Visual-C++-----Step1 Create a project & Figure out the structure of project

Visual-C++ ----Step2

Visual-C++ ----Step3



Android(C++)  NDK [Vsual Studio] -


간단 용어 정리

JNI(Java Native Interface):  :  돌아가기

The JNI is a native programming interface. It allows Java code that runs inside a Java Virtual Machine (VM) to interoperate with applications and libraries written in other programming languages, such as C, C++, and assembly.


library.a & library.so : 돌아가기

library.a 는 라이브러리의 정적 버전으로 정적링크되는 버전이다. 최종파일안에 생성된다.

library.so.version 은 공유 라이브러리 버전으로 윈도우즈에 dll과 비슷하다고 생각하시면 되겠다. 프로그램 실행후 필요할 때 불려진다.

같이 디렉터리 안에 같은 이름으로 존재한다면 동적라이브러리가 우선시되어 링킹된다.

'my_lesson > _Android' 카테고리의 다른 글

an_03  (0) 2020.12.16
02 Android(C++) NDK [Vsual Studio] - Starting  (0) 2020.12.16
Android Apps - Linux_Android Studio 설치 Guide  (0) 2017.07.08
Android apps - Image  (0) 2017.07.08
Android Apps - Errors  (0) 2017.05.24

댓글