NDKExam 작성 해보기 - add 함수만들기

기NDK환경 구축이 다되면, NDK를 이용하여 가장 쉬운 예제를 하나 만들어 보도록 하자. 두 수의 합을 구하는 add 함수를 네이티브쪽에서 구현해 보는 예제다.


1. NDKExam프로젝트 생성하기

우리가 만들 프로젝트에서는 두 정수를 입력 받아서 합을 리턴하는 함수를 C로 구현하고 그것을 안드로이드에서 사용할 것이다. 전체적으로 NDK 사용하는 법을 설명하는 페이지니 만큼 자세한 설명은 생략하도록 하겠다.

(이후에 있는 상세 설명 페이지를 참고 하면 되겠다.)


  • 먼저, 다음과 같은 프로젝트를 생성하고 코드를 작성한다.


Screenshot-New_Android_Project_.png


  1. package org.example.ndk;

    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;

    public class NDKExam extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           
            TextView tv = new TextView(this);
            int x = 1000;
            int y = 42;
           
            // 네이티브 메서드를 호출하기 전에 네이티브 라이브러리를 로딩함.
            System.loadLibrary("ndk-exam");
           
            int z = add(x, y);
            tv.setText("The sum of " + x + "and " + y + "is " + z);
           
            setContentView(tv);
        }
       
        public native int add(int x, int y);
    }


2. 동적라이브러리 생성하기

  • 다음으로 동적 라이브러리를 생성하기 위해서 javah 유틸리티를 이용하여 자바 클래스로 부터 C++해더 파일을 생성한다. 위에서 만든 프로젝트 폴더에 가면 bin폴더가 있다. 거기로 들어간다.(참고로 나의 폴더는 ~/workspace/NDKExam/bin 이다. 앞으로 <project>라고 부르겠다.)
  • 아래에 있는 명령을 실행하면 org_example_ndk_NDKExamp.h라는 파일이 생긴다.


  1. $ javah org.example.ndk.NDKExam


Screenshot-2.png

  • 프로젝트 폴더 바로 아래에 "jni"라는 폴더를 만들고(<project>/jni) 거기에 secend.c first.c first.h 을 만들어 실제 add함수를 만들어 낸다. 아래는 각 파일의 코드 내용이다.


Screenshot-4.png                 Screenshot-3.png

Screenshot-5.png


3. 빌드스크립트 작성하기(Android.mk)

  • 이번에는 빌드 스크립트인 Android.mk파일을 만들고 내용을 작성한다. 마찬가지로 jni폴더 아래에(<project>/jni) Android.mk파일을 만들고 아래의 코드를 작성한다.
  1. # 소스 파일들의 위치를 알려줌.
    LOCAL_PATH:= $(call my-dir)

    # Make 관련 환경 변수를 초기화
    include $(CLEAR_VARS)

    # 라이브러리를 빌드하기 위한 정보 생성(라이브러리 이름, 소스 코드 등)
    LOCAL_MODULE    := ndk-exam
    LOCAL_SRC_FILES    := first.c second.c

    # 공유 라이브러리 생성
    include $(BUILD_SHARED_LIBRARY)


4. 빌드 하기(ndk-build)

  • 마지막으로 프로젝트 폴더 바로아래로 가서 (<project>/) 빌드 명령어인 ndk-build를 실행 시키면 동적 라이브러이가 생성된다.
  1. <project>$ <ndk>/ndk-build


  • 이클립스에서 프로젝트를 실행 시키면 다음과 같은 결과가 실행 된다.


Screenshot-6.png