티스토리 뷰
타입 선언
자바에서 건네받은 변수를 C/C++에서 사용할 때, 자바에서 선언한 변수 타입에 따라 C/C++에서 변수를 사용하는 방법이 달라진다.
일반적으로 Java에서 사용하는 원시타입 앞에 j 를 붙이며, 배열의 경우 뒤에 Array를 붙인다.
Java |
JNI(C/C++) |
JNI(C/C++ 배열) |
boolean |
jboolean |
jbooleanArray |
byte |
jbyte |
jbyteArray |
char |
jchar |
jcharArray |
short |
jshort |
jshortArray |
int |
jint |
jintArray |
long |
jlong |
jlongArray |
float |
jfloat |
jfloatArray |
double |
jdouble |
jdoubleArray |
object |
jobject |
jobjectArray |
void |
void |
시그니쳐
long foo(int n, String s, int[] arr); 을 signature 형태로 표시하면 다음과 같다.
(ILjava/lang/String;[I)J
시그니쳐를 해석해보면, J를 리턴하고, 인자는 I와 LJava/lang/String;과 [I 다.
이를 한번 더 해석하면 long을 리턴하고 인자는 int와 String과 int[]다.
그냥 JNI를 대충 따라하려 했을때, 가장 이해가 안되고 어려웠던게 바로 이 '시그니쳐' 였다.
시그니쳐는 호출하는 메소드명, 인수, 반환값을 말하며, 이를 지정하여 유일한 값을 만들때 사용한다.
원시타입은 알파벳 한글자로 표시한다. 예를 들어 byte는 B, boolean은 Z로 표시한다.(하단 테이블 설명)
클래스는 앞에는 L을, 끝에는 세미콜론(;)을 붙이고 클래스명을 쓸 땐 패키지명을 포함하여 FULL로 적는다.(fully-qualified-class라 한다) 이 때 패키지명의 .은 /로 대체하여 작성한다. 예를 들어 자바의 String타입은 Ljava/lang/String; 으로 표시한다.
배열은 앞에 [를 붙여서 표시한다. 예를 들어 int[]는 [I; 이다.(대문자 아이)
Java Type |
Type Signature |
boolean |
Z |
byte |
B |
char |
C |
short |
S |
int |
I |
long |
J |
float |
F |
double |
D |
void |
V |
fully-qualified-class |
Lfully-qualified-class |
배열 |
[Type |
리턴 타입 함수명 (인자) |
(인자)리턴 타입 |
byte, char, short, int, float, double은 각각의 앞글자라 외우기 쉽지만.. boolean, long은 예외다.
상세한 설명은 https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/types.html를 참조하기 바란다.
'Development > Mobile' 카테고리의 다른 글
[Android JNI/NDK] 배열 사용하기 (3) | 2015.09.21 |
---|---|
[Android JNI/NDK] C/C++에서 Java 함수 호출 하기 / 멤버 변수 사용하기 (0) | 2015.09.21 |
[Android JNI/NDK] JNI를 이용해 Java에서 C 함수 호출하기 (0) | 2015.09.21 |
[Android JNI/NDK] JNI에서 C와 C++의 차이 (0) | 2015.09.18 |
[Android JNI/NDK] JNI와 NDK에 대한 대략적인 설명 (0) | 2015.09.17 |
[Android] 각 View들의 setBackground... setImage..등등의 사항이 다르다. (0) | 2013.12.21 |
[android] Logcat의 filter(필터)가 제대로 동작하지 않는다. (0) | 2013.12.15 |
[android/php] 안드로이드에서 서버에 사진 이미지 전송하기 (3) | 2013.06.11 |
- Total
- Today
- Yesterday
- gcc
- Quiz
- 드라이버
- driver
- it
- db
- algorithm
- database
- 리눅스
- Troubleshooting
- jni강좌
- Python
- 안드로이드
- MFC
- API
- java
- source
- NDK
- AWS
- C++
- jni
- winapi
- kering
- android
- 음악
- linux
- 프로그래밍
- Cloud
- Visual C++
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |