반응형
jni 사용시 주의점.
for 문의 사용
for( int i = 0; i < 3; i++ )
- 위는 자바 스타일의 사용법입니다. C 언어 자체가 저렇게 정의를 하면서 쓰는 것을 지원하지 않는데, JNI 는 C 언어를 사용하기 때문에 아래와 같이 사용해야 합니다.
int i;
for( i=0; i < 3; i++ )
java 로부터 전달받은 array 류의 사용.
- java 에서 primitive array 를 전달한다면 native 에서는 j<Type>Array 로 전달이 됩니다. 예를 들어 java 에서 int[] 를 넘겼다면 native 에서는 jIntArray 의 형태로 전달이 됩니다.
- X
- jIntArray 는 array 가 아닌 object 형태이기 때문에 일반 array 처럼 위와 같은 방법으로 element 에 access 할 수 없습니다.
- O
- 위와 같이 Get<Type>ArrayElements 를 통해서 primitive type 으로 변경을 해주어야 일반 array 를 사용하듯이 element 에 접근할 수 있습니다.
// jintArray intArrayObj is delivered
intArrayObj[ 2 ]
- jIntArray 는 array 가 아닌 object 형태이기 때문에 일반 array 처럼 위와 같은 방법으로 element 에 access 할 수 없습니다.
// jintArray intArrayObj
jint intArray* = (*env)->GetIntArrayElements( env, intArrayObj, 0 );
intArray[ 2 ]
- 위와 같이 Get<Type>ArrayElements 를 통해서 primitive type 으로 변경을 해주어야 일반 array 를 사용하듯이 element 에 접근할 수 있습니다.
java 로 array 를 return 하는 경우.
- java 에서 primitive array 로 전달한 것은 native 에서 j<Type>Array 의 형태로 전달됩니다. 마찬가지로 primitive array 를 return 해줄 때도, j<Type>Array 의 형태로 return 해주어야 합니다.
jint output* = getOutput(); // prepare jint array
jintArray result = (*env)->NewIntArray( env, size );
(*env)->SetIntArrayRegion( env, result, 0, size, output ); jintArray result = (*env)->NewIntArray( env, size );
return result;
도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )
반응형
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] NameValuePair 에 object 전달하는 방법 (0) | 2012.10.26 |
---|---|
[android] camera의 setPreviewSize 에서 발생하는 java.lang.RuntimeException: setParameters failed (2) | 2012.10.26 |
[android] native( JNI ) vs. java 성능 비교 (0) | 2012.10.26 |
[android] ScaleGestureDetector onScale 이 안 불리는 경우, onScaleBegin 만 불리는 경우. (0) | 2012.10.26 |
[android] wheel controller - custom widget (0) | 2012.10.25 |
댓글