Android 공부/Android NDK

안드로이드 스튜디오 NDK 프로젝트 생성.

Machine_웅 2019. 9. 9. 19:39
728x90
반응형

JNI를 이용한 NDK 연동

 

테스트 환경 : Android Studio 2.3 (2.2버전 이상부터 JNI 연동 방식 변경)

 

 

 

안드로이드 프로젝트를 새로 만들어 줍니다. New Project 에서 어플리케이션 이름입력 후 아래 CheckBox Include C++ support를 체크하고 Next로 넘어갑니다. 다음 설정방법은 동일하며 Next로 끝까지 넘어가 Customize C++ Support 부분에서 디폴트 상태로 Finish 해줍니다. 프로젝트 로딩시간이 다소 길어 기다려주시면 됩니다.

 

기존의 프로젝트와 동일하지만 cpp라는 폴더와 CMakeLists.txt가 추가 되었습니다.

제가 기존에 셋팅을 해 두어서 자동으로 설정이 된 것인지 확인이 안되어,

 

SDK Tools에서 CMake, LLDB, NDK 를 설치합니다.

 

CMake : Gradle과 함께 작동하여 네이티브 라이브러리를 빌드하는 외부 빌드 도구.

LLDB : Android Studio가 네이티브 코드를 디버그하는데 사용하는 디버거.

 

기본설정을 완료하였습니다. 이제 테스트 해 봅시다.

 

 

package com.yoohyeok.ndk_test;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Example of a call to a native method
        TextView tv = (TextView) findViewById(R.id.sample_text);

        tv.setText(stringFromJNI());
    }

    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public native String stringFromJNI();
}
 
 

native-lib.cpp


#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring JNICALL
Java_com_yoohyeok_ndk_1test_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}



출처: https://yoo-hyeok.tistory.com/72 [유혁의 엉터리 개발]

 

설명입니다. 기본적으로 만들어진 어플리케이션을 실행하면 native-lib.cpp 내의 c++ 코드 std::string hello = "Hello from C++" 이 출력됩니다. native-lib.cpp 에서 C++ 작업을 진행합니다. cpp 폴더에 원하는 cpp 파일을 생성 후 작업을 진행하면 되고 MainAcitivity.class 에서 public native String stringFromJNI();를 선언하여 네이티브 코드를 사용할 수 있도록 선언해 줍니다. TevtView setText 메소드를 이용하여 네이티브 코드를 적용합니다.

 

C에 최적화되어 있는 알고리즘이나 영상처리 오픈소스 등등 안드로이드에서 NDK를 통해 연동개발이 가능합니다



출처: https://yoo-hyeok.tistory.com/72 [유혁의 엉터리 개발]
출처: https://yoo-hyeok.tistory.com/72 [유혁의 엉터리 개발]

728x90
반응형