일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- winapi
- kering
- control
- API
- 리눅스
- Python
- db
- jni강좌
- NDK
- linux
- C++
- 프로그래밍
- database
- 드라이버
- Visual C++
- sqlite3
- UI
- android
- driver
- it
- 안드로이드
- gcc
- source
- Troubleshooting
- 음악
- C
- java
- MFC
- Quiz
- jni
- Today
- 91
- Total
- 586,201
목록jni (7)
JHB의 프로그래밍 삽질기
Java로 로그를 찍을 땐 Log.i / Log.d ... 등을 이용하여 로그를 출력한다. JNI에서도 이를 지원한다. <android/log.h>에 있는 __android_log_print를 이용하면 되는데, 이걸 그대로 사용하면 너무 길기에 보통 아래와 같이 정의해 놓고 사용한다.#include <android/log.h> #define LOG_TAG "tagname" #define LOGV(...)..
자바와 C/C++은 내부적으로 배열을 이용하는 구조가 다르다. C/C++은 배열이 메모리 상에서 연속적으로 배치되는데 비해, Java의 경우 반드시 연속적으로 배치돼 있지는 않다. 이런 저런 연유로, Java와 C/C++의 배열은 서로 다르기 때문에, C/C++에서 자바의 배열을 사용하려면 반드시 변환을 해야 한다. C/C++에서 접근 할 수 있는 자바의 배열을 가져오려면 Get[Type]ArrayEleme..
JNI를 이용하여 C/C++에서 Java 함수를 호출 할 수 있다. 이때는 리플렉션을 이용한다. 개인적으로 Java를 처음 봤을 때 리플렉션 이런거 왜 존재하는 거야..하고 생각했었는데, 요즘 느끼는건 정말.. '강력하다'는 것이다. 웬만하면 변수명/함수명 등의 코드 이름으로 Java 내의 모든 기능을 다 이용 할 수 있으니.. 설계 관점에서 용이해진다. 물론 디버깅이나 가독성은 좀 떨어지는 감이 있지만.. C/C++에서 자바의 메..
JNI를 이용해 C를 호출 할 때, Java 쪽에는 아래의 사항을 지켜야 한다. 호출하는 함수에는 native를 붙인다. loadLibrary()를 이용해서 호출할 라이브러리를 지정한다.(NDK를 이용해서 빌드될 라이브러리) 그리고 C/C++에서는 아래의 사항을 지켜야 한다. 함수명은 Java로 시작하며, 패키지명, 클래스명, 메소드명을 순서대로 적는다. 처음의 2개 인자는 JNIEnv 타입과 jobject 타입으로 해야한다. 이후에..
JNI에서는 C와 C++을 모두 사용 할 수 있다. 사용법이 약간 다른데, C에서는 env 구조체의 함수 포인터를 이용해 호출하고, C++에서는 env 인스턴스의 멤버 함수를 호출한다. 예를 들어 JNI의 FindClass 함수를 호출하는 예는 각각 아래와 같다. C의 경우 jclass jklass = (*env)->FindClass(env, "java/lang/Integer"); C에서는 함수 포인터를 호..
타입 선언 자바에서 건네받은 변수를 C/C++에서 사용할 때, 자바에서 선언한 변수 타입에 따라 C/C++에서 변수를 사용하는 방법이 달라진다. 일반적으로 Java에서 사용하는 원시타입 앞에 j 를 붙이며, 배열의 경우 뒤에 Array를 붙인다. Java JNI(C/C++) JNI(C/C++ 배열) boolean jboolean jbooleanAr..
Android JNI와 NDK 라는 말을 들어봤을 것이다. 나는 이 둘을 대충 안드로이드에서 JAVA가 아닌 C/C++로 개발 할 때 필요한 방법? 쯤으로 알고 있었다. 하지만 그 둘의 정확한 차이가 무엇인지는 정확히 알지 못했다. 일단 용어 설명부터 하자면 JNI Java Native Interface의 약자. 자바에서 C/C++의 함수를 호출하거나, 반대로 C/C++에서 자바의 클래스와 메소드를 사용할 수 있게 ..