2011년 11월 16일 수요일

Android Native 공유 라이브러리 연동

[개발환경]
1. Cygwin 설치
  가. http://www.cygwin.com 에서 다운받는다.
  나. Select package 화면에서 gcc-core, g++, make 패키지를 검색해서 설치한다.


2. NDK 설치
  가. http://developer.android.com/sdk/ndk/index.html 에서 다운받아 압축을 푼다.
  나. 시스템 변수 path영역에 압축푼 경로를 추가한다.
       ex) D:\AndroidNDK\android-ndk-r6b


3. 테스트
  가. cygwin을 실행해서 >ndk-build 를 실행하여 관련 메시지가 나타나는지 확인한다.




[개발 테스트]
1. Android  프로젝트를 생성한다.
  가. 프로젝트 생성 : NDKExam
// =start=======================================================

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);
        //setContentView(R.layout.main);
        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);
}

// = end =======================================================




2. 헤더 생성은 링크 클릭 => JNI 네이티브 함수 헤더 생성하기




3. JNI 네이티브 함수 구현하기
  가. eclipse 패키지에서 "jni" 폴더 생성한다.
  나. second.c 파일을 생성한다.
// =start=======================================================

#include "first.h"
#include <jni.h>


jint Java_org_example_ndk_NDKExam_add(JNIEnv* env,
 jobject this,  jint x,
 jint y)
{
return first(x, y);
}

// = end =======================================================




  다. first.c 파일을 생성한다.
// =start=======================================================

// first.c
#include "first.h"


int first(int x, int y)
{
return x + y;
}

// = end =======================================================


  라. first.h 파일을 생성한다.
// =start=======================================================

// first.h
#ifndef FIRST_H
#define FIRST_H


extern int first(int x, int y);


#endif /* FIRST_H */

// = end =======================================================


  마. jni 폴더에 Android.mk 파일을 생성한다.
// =start=======================================================

# 소스 파일 위치
LOCAL_PATH:= $(call my-dir)


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


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


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

// = end =======================================================


※ Android.mk 작성 문법 관련해서는 <NDK_HOME>\docs 파일 참조




  바. <PROJECT-ROOT>ndk-build 실행


  사. eclipse에서 android run하여 에뮬이나 디바이스에서 결과 확인.

댓글 없음:

댓글 쓰기