- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
목록JNI / NDK (22)
드럼치는 프로그래머
이번 컬럼에서는 JNI 코드를 작성하는데 도움을 주는 툴 사용법과 JNI API 중 사용빈도가 높은 타입변환, Java 객체 생성, Java 메소드 호출 및 필드를 다루는 방법에 대해 정리 하고 네이티브 라이브러리를 손쉽게 이클립스 IDE 환경을 이용하여 개발하는 방법에 대해 알아보도록 하겠다. 지난 컬럼부터 제시된 가상시나리오의완결판인 이번 컬럼은 실제 프로젝트 진행중에 벌어질 수 있는 문제상황을 제시하고, 동시에 이 문제를 해결해 나가는 과정을 중심으로 이야기를 진행하고자 한다. 등장인물 ● 허우대 대리 : 몇 달 전 경력사원 공채로 새로 입사한 인물로 Java를 사용해봤다는 이유만으로 난생 처음으로 안드로이드 플랫폼에 기존에 c++로 작성한 소스를 마이그레이션 하는 업무를 맡는다. 허우대는 멀쩡하지..
JNI(Java Native Interface) 플랫폼 독립성을 버리고, 기능을 취한다. 자바 프로그램을 작성하다보면, 부득이하게 시스템 의존적 코딩을 필요로 하는 때가 있다. 하지만, 자바로서는 그러한 욕구를 감당할 수는 없다. 따라서, 자바의 클래스 파일이 C/C++의 함수를 호출하여, 그 결과만 되돌려받게 하는 것도 한 방법이다. 그렇지만 이 자체로서 이미 플랫폼 독립적이라는 특성은 사라졌다고 볼 수밖에 없다. 프로그램 작성 첫째 단계, 자바 프로그램 작성 우선, Native접근이 필요한 메쏘드만 native 키워드를 사용해 구현하지 않은 채 그대로 두고, 나머지는 모두 구현한 후, 컴파일한다. public class Hello { public native void getHello(); static..
컴파일 될 코드 ■ C로 제작할 때 #include #include jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "Hello from JNI !"); } ■ C++로 제작할 때 #include #include extern "C" { JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { return env->NewStringUTF("Hello, NDK!"); } } mk 파일 ■ C로 제작할 때 LOCA..
// parameter jobject YourJObjectRepresentingArrayList; // I suppose you have the JNIEnv somehow JNIEnv* env; // use the Array list ArrayList_class = env->FindClass( "java/util/ArrayList" ); // to conver jobject to jstring jmethodID caster = env->GetMethodID(ArrayList_class, "toString", "()Ljava/lang/String;"); // get two methods Get_method = env->GetMethodID( ArrayList_class, "get", "(I)Ljava/la..
오늘은 JNI 중 Local Reference 와 Global Reference 에 대해 알아보겠습니다. 이 글은 http://java.sun.com/docs/books/jni/html/refs.html#27423 내용을 요약 정리한 내용입니다. Local and Global References JNI는 jobject, jclass, jstring, jarray 등을 지원을 하는데 그것들은 opaque reference 입니다. 그래서 이녀석들은 JNI 함수를 통해서 opaque reference 의 내용물들을 받아와야 합니다. 이 opaque reference 의 장점은 JVM 의 내부구현에 상관없이 native code 를 구현할 수 있다는 것입니다. 프로그래머는 JNI 가 지원하는 다음의 refer..
JNI Functions Reference : http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html#wp17314 JNITest.java public class JNITest { static{ System.loadLibrary("my_dll"); } public native String greeting(String name); public static void main(String[] args) { JNITest test = new JNITest(); String result = test.greeting("Smith"); System.out.println("C 함수 리턴값: "+result); } } JNITest.h /* ..
오늘은 JNI 의 Exception 에 대해 알아보겠습니다. 이 글은 http://java.sun.com/docs/books/jni/html/exceptions.html#11202 을 요약 정리한 글입니다. Exceptions Introduction. 우리는 지금까지 JNI call 후에 여러가지 error 상황들을 체크해왔습니다. 예제 코드에서 말이죠. 여기서는 어떻게 그런 error 를 detect 하고 recover 하는지를 다룹니다. JNI 의 system call 에서 발생하는 에러는 그저 문서에 기술된 처리만 해주면 됩니다. 하지만, Java API method callback 을 호출한 경우에는 여기서 소개하는 방법에 따라 exception 처리를 해야 합니다. JNI Exceptions O..
갑자기 잘되던 프로그램이 안된다... 당황하다가 다시 마음을 잡고 천천히 디버깅 해보았다. Native와 JAVA 사이에 연결되는 함수가 호출되다가 죽는다. 아래와 같이 반복문이 15회정도 반복되는 함수였다.float correctCount = 0.0f; for( int i = 0; i < 30; i++ ) { if( jni_GetPUnlocked( s, i ) == true ) { correctCount++; } } jni_GetPUnlocked 함수는 JAVA함수를 C언어로 읽어들여 체크하는 함수였다. 함수 내용은 아래와 같다. bool jni_GetPUnlocked(int game, int question) { JNIEnv *env; jclass jNativesCls; bool pUnlocked =..
제목 : jbyteArray2cstr 메모리 해제가 안됩니다. 글쓴이: 정완호(guest) 2005/05/16 18:17:13 조회수:776 줄수:43 JNI 프로그래밍을 하다보면 김덕태님의 작성하신 NativeStringUtil.c 의 소스를 사용하게 됩니다. 그런데 이함수가 문제가 있습니다. malloc을 하고 free하는 부분이 없네요 (*env)->ReleaseByteArrayElements 에서 JVM이 자동으로 해주는거 같은데 JVM이 신뢰가 가지 않습니다. char *jbyteArray2cstr( JNIEnv *env, jbyteArray javaBytes ) { size_t len = (*env)->GetArrayLength(env, javaBytes); jbyte *nativeBytes ..
출처 : http://blog.naver.com/e00930/120011147034 JNI(Java Native Interface) 플랫폼 독립성을 버리고, 기능을 취한다. 자바 프로그램을 작성하다보면, 부득이하게 시스템 의존적 코딩을 필요로 하는 때가 있다. 하지만, 자바로서는 그러한 욕구를 감당할 수는 없다. 따라서, 자바의 클래스 파일이 C/C++의 함수를 호출하여, 그 결과만 되돌려받게 하는 것도 한 방법이다. 그렇지만 이 자체로서 이미 플랫폼 독립적이라는 특성은 사라졌다고 볼 수밖에 없다. 프로그램 작성 첫째 단계, 자바 프로그램 작성 우선, Native접근이 필요한 메쏘드만 native 키워드를 사용해 구현하지 않은 채 그대로 두고, 나머지는 모두 구현한 후, 컴파일한다. public clas..