- 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 |
- 재능이의 돈버는 일기
- 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
- 무의식이 의식을 지배한다
목록★─Programing/☆─JNI | NDK (28)
드럼치는 프로그래머
이전 글에서는 JNI 를 java 측에서 JNI 를 이용해서 c/c++ 함수를 호출하는 방법을 알아보았다. 이번에는 c/c++ library 측에서 JNI를 이용하여 java 의 함수를 호출하는 방법을 알아보도록 하자. 근본적으로 JNI 를 이용해서 상대의 함수를 이용한다는 개념은 같다. 차이는 jni 가 jvm 에 있는 녀석이라서 java 에서 사용할 때는 크게 신경쓸 것이 c/c++ 쪽에서는 JNI 를 이용하기 위해 JNIEnv* 의 reference 를 넘겨주는 작업이 필요하다. 그럼 이제부터 c/c++ 에서 java 의 함수를 이용하는 방법을 알아보자. C/C++ library -> Java classjava 의 class 를 이용하려면 JVM 이 있어야 한다. 그러므로 c/c++ 에서 java ..
안드로이드때문에 JNI 를 다시 보게 되었다. ^^ 여하튼 그래서 책을 보면서 이해한 내용을 그림으로 정리했다. 코드는 나중에 정리하기로 하고, 여기서는 대략적인 개념만 익히도록 하자. 사실 이 곳의 내용은 그저 내 생각을 정리한 것이라 정확하지 않은 면이 있다.(죄송 ㅜ.ㅜ) JNI에 대한 좀 더 정확하고 상세한 내용은 ref. 3 을 참조하도록 하자. 아래 그림은 JNI 를 사용하는 방법은 시작 프로그램에 따라 2가지가 있다. Java class -> JNI -> C/C++ library : java 에서 native function 을 호출하는 경우 C/C++ library -> JNI -> Java class : c/c++ program에서 java 의 함수를 이용하는 경우 이 중에서, 아래 글은..
오늘은 "JNI Local Reference Changes in ICS" 를 주제로 알아보겠습니다. 이 글은 http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html 내용 번역본입니다. ( 이해가 쉽도록 의역을 많이 넣었습니다. 모호한 내용은 원문을 확인하세요. ) JNI Local Reference Changes in ICS당신이 native code 를 쓰는 것이 아닌 native 함수만 사용한다면 그만 읽어도 됩니다. 하지만, 당신이 JNI 를 이용해서 native code 를 사용한다면, 당신은 이것을 읽는 것이 큰 도움이 될 것입니다. What's changing, and why? 모든 개발자들은 ..
프로젝트를 진행하다보면 여러 폴더에 나뉘어 있는 라이브러리를 링크해야 할 일이 생기는데, NDK 샘플이나 여타의 코드를 보면 전부 한 폴더에 있는 라이브러리만 링크하고 있더군요. 저나 제 주변에 NDK나 리눅스 프로그래밍에 대해서 아는 사람이 없었기 때문에 한참을 헤매고 나서야 방법을 알게 되었습니다. 엄청나게 간단한데 구글링으로도 도저히 찾을수가 없더라구요 ㅠ_ㅠ 방법은 아래처럼 LOCAL_LDLIBS 에 원하는 폴더를 모두 적어주면 됩니다. # libadd.so 는 LibTest1/libs/armeabi 에 # libsubtract.so 는 LibTest2/libs/armeabi 에 있다고 가정합니다. LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../....
출처 : http://decsers.tistory.com/27 Android NDK Overview Introduction: 소개: The Android NDK is a set of tools that allows Android application developers to embed native machine code compiled from C and/or C++ source files into their application packages. Android NDK 는 안드로이드 어플 개발자들이 C 혹은 C++ 소스를 어플의 패키지로 컴파일하여 포함한 네이티브 코드 라이브러리를 사용할 수 있게 해주는 도구들의 모음입니다. IMPORTANT: The Android NDK can only be used ..
a.so 란 파일을 만들었습니다. android.mk 에서 b.so 를 만드는데 a.so 와 링크 하려고 합니다. a.so 를 obj/local/armeabi 여기다가 나둬야지 정상적으로 링크가 되고 있는데요.. a.so 의 위치를 다른곳에다 넣고 path를 주는 방법이 있나요? LOCAL_SHARED_LIBRARIES 나 LOCAL_STATIC_LIBRARIES 를 사용할때 local 에 있는 so나 a 파일의 path를 주려면 어떻게 해야하나요? 락크미슈 2010-11-03 09:45 gcc를 사용할때랑 똑같이 적으시면 됩니다. -L{libpath} -l{libname} 아돌 2010-11-03 11:01 《Re》락크미슈 님 , 어디다가 써야되는거죠? 다 안되는것 같은데요... LOCAL_PATH :..
이번 컬럼에서는 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..