본문 바로가기 메뉴 바로가기

JHB의 삽질 이야기

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

JHB의 삽질 이야기

검색하기 폼
  • 분류 전체보기 (372)
    • JHB (23)
      • IT 이야기 (4)
      • 잡다한 이야기 (19)
    • Cloud (44)
      • AWS (40)
    • Language (46)
      • C C++ (26)
      • C# (2)
      • Java (1)
      • Python (16)
    • Development (221)
      • Windows (62)
      • Mobile (72)
      • Linux (6)
      • Driver (12)
      • Firmware & HW (3)
      • Algorithm (14)
      • CM&CI&CD (14)
      • Web개발 (8)
      • Container (1)
      • Database (1)
      • Etc (26)
      • Tip (2)
    • MUSIC (17)
      • Listen (12)
      • Compose (5)
    • ETC (20)
      • Public (20)
    • TOOL/FRAMEWORK
      • MFC
      • WPF
      • GIT
    • LANGUAGE
      • C/C++
      • C#
      • Java
      • Python
  • 방명록

jni강좌 (7)
[Android JNI/NDK] 로그 출력

Java로 로그를 찍을 땐 Log.i / Log.d ... 등을 이용하여 로그를 출력한다. JNI에서도 이를 지원한다. 에 있는 __android_log_print를 이용하면 되는데, 이걸 그대로 사용하면 너무 길기에 보통 아래와 같이 정의해 놓고 사용한다.#include #define LOG_TAG "tagname" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO , L..

Development/Mobile 2015. 9. 21. 01:41
[Android JNI/NDK] 배열 사용하기

자바와 C/C++은 내부적으로 배열을 이용하는 구조가 다르다. C/C++은 배열이 메모리 상에서 연속적으로 배치되는데 비해, Java의 경우 반드시 연속적으로 배치돼 있지는 않다. 이런 저런 연유로, Java와 C/C++의 배열은 서로 다르기 때문에, C/C++에서 자바의 배열을 사용하려면 반드시 변환을 해야 한다. C/C++에서 접근 할 수 있는 자바의 배열을 가져오려면 Get[Type]ArrayElement를 사용하며, C/C++에서 자바의 배열에 접근 할 수 있는 배열의 포인터를 반환한다. 중요한 것은, 위의 함수를 이용해 확보한 메모리 영역은, 사용 후 반드시 Release[Type]ArrayElements 함수를 이용해 해제해야 한다는 것이다. // 새로운 int[10] 배열 생성 jintArr..

Development/Mobile 2015. 9. 21. 01:28
[Android JNI/NDK] C/C++에서 Java 함수 호출 하기 / 멤버 변수 사용하기

JNI를 이용하여 C/C++에서 Java 함수를 호출 할 수 있다. 이때는 리플렉션을 이용한다. 개인적으로 Java를 처음 봤을 때 리플렉션 이런거 왜 존재하는 거야..하고 생각했었는데, 요즘 느끼는건 정말.. '강력하다'는 것이다. 웬만하면 변수명/함수명 등의 코드 이름으로 Java 내의 모든 기능을 다 이용 할 수 있으니.. 설계 관점에서 용이해진다. 물론 디버깅이나 가독성은 좀 떨어지는 감이 있지만.. C/C++에서 자바의 메소드를 호출하는 순서는 아래와 같다. FindClass 함수를 이용해서 Java의 클래스를 지정한다. 메소드명과 인자(시그니쳐)를 지정해서 클래스 내의 해당 메소드ID를 찾는다. 1,2에서 구한 클래스와 메소드를 이용하여 호출한다. 이때 반환값이나 정적/일반 메소드에 따라 메소..

Development/Mobile 2015. 9. 21. 01:03
[Android JNI/NDK] JNI를 이용해 Java에서 C 함수 호출하기

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'가 제일 중요 stati..

Development/Mobile 2015. 9. 21. 00:40
[Android JNI/NDK] JNI에서 C와 C++의 차이

JNI에서는 C와 C++을 모두 사용 할 수 있다. 사용법이 약간 다른데, C에서는 env 구조체의 함수 포인터를 이용해 호출하고, C++에서는 env 인스턴스의 멤버 함수를 호출한다. 예를 들어 JNI의 FindClass 함수를 호출하는 예는 각각 아래와 같다. C의 경우 jclass jklass = (*env)->FindClass(env, "java/lang/Integer"); C에서는 함수 포인터를 호출한다. 함수의 첫번째 인자에는 JNIEnv 타입의 변수를 설정하고, 두 번째 부터는 함수에 필요한 인자를 적는다. C++의 경우 jclass jklass = env->Findlass("java/lang/Integer"); C++은 env 인스턴스의 멤버 함수를 호출한다. C처럼 env 구조체를 인자로..

Development/Mobile 2015. 9. 18. 00:22
[Android JNI/NDK] JNI의 변수 타입과 시그니처

타입 선언 자바에서 건네받은 변수를 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 voi..

Development/Mobile 2015. 9. 18. 00:15
[Android JNI/NDK] JNI와 NDK에 대한 대략적인 설명

Android JNI와 NDK 라는 말을 들어봤을 것이다. 나는 이 둘을 대충 안드로이드에서 JAVA가 아닌 C/C++로 개발 할 때 필요한 방법? 쯤으로 알고 있었다. 하지만 그 둘의 정확한 차이가 무엇인지는 정확히 알지 못했다. 일단 용어 설명부터 하자면 JNI Java Native Interface의 약자. 자바에서 C/C++의 함수를 호출하거나, 반대로 C/C++에서 자바의 클래스와 메소드를 사용할 수 있게 해주는 인터페이스. 참고로 이게 Android를 위해 있는게 아니고 기본 Java에도 있음. 책방에 갔다가 1997년에 나온 JNI책을 보고 깜짝 놀란 기억이... NDK Android SDK 와 같은 개발 키트임. SDK가 Software Development Kit 이듯이, NDK는 Nat..

Development/Mobile 2015. 9. 17. 23:23
이전 1 다음
이전 다음
공지사항
최근에 올라온 글
  • Serverless로 E-Commerce 만들기 ⋯
  • 갑자기 RDS CPU 점유율이 100%를 쳤다.
  • DDB Singletable 디자인
  • AWS CLI v2 에서 명령어 출력이 새 창으로⋯
최근에 달린 댓글
  • 안녕하세요~ GridCtrl 을 사용중이시라면 Ctrl⋯
  • 혹시 스태틱으로 GridCtrl 사용해서 목록이있는 그⋯
  • 헉 안돼서 계속 윈도우로만 했는데 감사합니다 복받으세용
  • 글 잘 읽고 갑니다~
Total
854,742
Today
66
Yesterday
182
링크
  • Kaspyx - Hacking
  • JHB LinkedIn
  • Dive into Deep Learning
TAG
  • it
  • 안드로이드
  • Cloud
  • gcc
  • android
  • NDK
  • 프로그래밍
  • database
  • Python
  • Quiz
  • jni
  • 음악
  • AWS
  • source
  • driver
  • C++
  • MFC
  • db
  • 리눅스
  • kering
  • linux
  • algorithm
  • C
  • winapi
  • Troubleshooting
  • API
  • jni강좌
  • java
  • 드라이버
  • Visual C++
more
«   2023/03   »
일 월 화 수 목 금 토
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
글 보관함
  • 2022/03 (1)
  • 2021/11 (1)
  • 2021/10 (1)
  • 2021/09 (1)
  • 2021/08 (1)

Blog is powered by Tistory / Designed by Tistory

티스토리툴바