Burt.K

코코아를 좋아하는 프로그래머입니다 ;)

Javah를 AndroidStudio에서 사용하기

NDK 개발을 하면서 귀찮은 점은 classes 파일에서 JNI 형식에 맞는  C 언어 헤더파일을 만드는 일이다. 이 것을 자동으로 해주는 것이 javah 인데, 이클립스에서는 쉽게 연동이 가능해 쉽게 사용할 수 있다. AndroidStudio 에서도 이클립스처럼 쉽게 할 수 있는 방법이 있다. 바로 External Tools 로 등록해서 사용하는 것이다. 아래 그림처럼 Android Studio -> Preferences… 메뉴를 선택한다.

 

External Tools를 선택하고 + 버튼을 누른다.

 

그리고 아래와 같이 항목에 값을 입력해 준다.

 

Program:
/usr/bin/javah

Parameters:
-classpath $Classpath$ -v -jni $FileClass$

Working directory:
$SourcepathEntry$/../jni

사용방법은 아주 쉽다. 워킹디렉토리를 jni로 설정했기 때문에 src -> main 의 서브 디렉토리로 jni를 만들어야 한다.

class 파일에서 jni 헤더파일을 만드는 것이므로 Command + B를 눌러서 빌드한다. 그리고 나서 jni 헤더 파일을 만들고자 하는 자바 파일 위에서 마우스 오른쪽 버튼을 누른다. 그리고 NDK -> javah 를 실행한다.

 

그러면 그림과 같이 h 파일이 생성된다.

아래와 같은 자바 파일이 h 파일로 변경되었다.

HelloNDK.java

package kr.pe.burt.android.hellondk;

/**
 * Created by burt on 2014. 11. 13..
 */
public class HelloNDK {
    public native void helloNDK(String msg);
}

kr_pe_burt_android_hellondk_HelloNDK.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class kr_pe_burt_android_hellondk_HelloNDK */

#ifndef _Included_kr_pe_burt_android_hellondk_HelloNDK
#define _Included_kr_pe_burt_android_hellondk_HelloNDK
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     kr_pe_burt_android_hellondk_HelloNDK
 * Method:    helloNDK
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_kr_pe_burt_android_hellondk_HelloNDK_helloNDK
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

주의할 점은 시스템의 패스에 JDK, Android SDK, NDK 등을 모두 패스로 등록해 주어야 한다.

 

 

← Android Camera’s Bug
ndk-build를 Android Studio에서 사용하기 →