티스토리 뷰
JNI를 이용해 C를 호출 할 때, Java 쪽에는 아래의 사항을 지켜야 한다.
- 호출하는 함수에는 native를 붙인다.
- loadLibrary()를 이용해서 호출할 라이브러리를 지정한다.(NDK를 이용해서 빌드될 라이브러리)
그리고 C/C++에서는 아래의 사항을 지켜야 한다.
- 함수명은 Java로 시작하며, 패키지명, 클래스명, 메소드명을 순서대로 적는다.
- 처음의 2개 인자는 JNIEnv 타입과 jobject 타입으로 해야한다. 이후에 오는 인자들은 Java와 C/C++에서 1:1로 매칭되는 parameter들이다.
예시
public class MainActivity extends Activity { public native int add(int a, int b); //'native'가 제일 중요 static { System.loadLibrary("calc"); } }
Java 코드는 위와 같이 add 함수 앞에 'native'가 붙어 있다.
#include <JNI.H> jint Java_kr_jhb_calcwidget_MainActivity_add(JNIEnv* env, jobject thiz, jint a, jint b) { return a+b; }
C코드는
jint Java_kr_jhb_calcwidget_MainActivity_add(JNIEnv* env, jobject thiz, jint a, jint b) 인데, 순서대로
반환타입 / Java / 패키지명 / 클래스명 / 메소드명 / 인자(JNIEnv* / jobject / parameters...) 인 것을 볼 수 있다.
JNIEnv에는 JNI의 환경 정보가 들어있다. env 변수를 통해 자바 측 실행 정보를 취득해 설정한다.
jobject에는 이 함수가 포함된 클래스의 정보가 들어있다.(위의 경우 MainActivity의 인스턴스 정보가 포함돼 있음)
'Development > Mobile' 카테고리의 다른 글
[Android] Android System Application (기본 설치앱) 지우기 (0) | 2015.11.29 |
---|---|
[Android JNI/NDK] 로그 출력 (0) | 2015.09.21 |
[Android JNI/NDK] 배열 사용하기 (3) | 2015.09.21 |
[Android JNI/NDK] C/C++에서 Java 함수 호출 하기 / 멤버 변수 사용하기 (0) | 2015.09.21 |
[Android JNI/NDK] JNI에서 C와 C++의 차이 (0) | 2015.09.18 |
[Android JNI/NDK] JNI의 변수 타입과 시그니처 (1) | 2015.09.18 |
[Android JNI/NDK] JNI와 NDK에 대한 대략적인 설명 (0) | 2015.09.17 |
[Android] 각 View들의 setBackground... setImage..등등의 사항이 다르다. (0) | 2013.12.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 프로그래밍
- android
- it
- algorithm
- API
- kering
- source
- jni강좌
- database
- jni
- Troubleshooting
- java
- MFC
- 안드로이드
- linux
- C
- 음악
- AWS
- Quiz
- 드라이버
- NDK
- Visual C++
- Cloud
- driver
- db
- 리눅스
- winapi
- gcc
- C++
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함