JNI Header 만들기.


javah로 jni 헤더를 만들 때 

$프로젝트폴더 javah -classpath 프로젝트폴더\bin\classes 패키지명.클래스이름

하면 만들어지는데


Bitmap을 return 하는 native 함수를 만들려고하니까

Class android.graphics.Bitmap could not be found. 라고 뜨면서 안됨.


그래서 명령어에

javah -classpath 프로젝트폴더\bin\classes;sdk폴더\platform\android-버전\android.jar; 패키지명.클래스이름

하니까 빌드됨.



배치파일 만듬 (cmd에서 계속 명령어치기 귀찮아서..)

메모장으로 복사해서 만들어도 되고 이걸 다운받아서 써도된다.


JniHeaderMaker.bat


@echo off

title JNI Header Maker


REM 배치파일 실행되는 폴더경로

set curPath=%cd%


REM 안드로이드 버전

set aVersion=14


REM sdk 설치된 경로 (사용자에따라 바꿔줘야함)

set sdkPath=C:\Users\nfs\android-sdks\platforms\android-%aVersion%\android.jar


REM native method들 선언된 클래스의 패키지명

:INPUT_PACKAGE

set /p packageName=패키지명 입력(ex : com.example.TEST) : 

if %packageName% == "" goto INPUT_PACKAGE


REM native method들 선언된 클래스의 클래스명

:INPUT_CLASS

set /p className=클래스명 입력 : 

if %className% == "" goto INPUT_CLASS


:EXEC

echo %packageName%.%className%


@echo on

javah -classpath %curPath%\bin\classes;%sdkPath%; %packageName%.%className%


@echo off

pause


sdkPath와 aVersion만 각자 환경에 맞게 바꾸고

배치파일을 프로젝트 root폴더에 넣고 실행하면 된다. (아마도)

(여기 sdkPath가 있는 이유는 Android 헤더파일을 쓸려고 안 쓰면 없어도될듯)




AndroidBitmap_getInfo 가 undefine 됐다고 뜨면.


Android.mk 에

LOCAL_LDLIBS := -llog -ljnigraphics -landroid 추가.



Posted by outshine90
,