Hyeyeon blog

[Android] JNI에서 사용되는 문법 정리 본문

개발/Android

[Android] JNI에서 사용되는 문법 정리

Hyeyeon.P 2021. 2. 1. 19:16
반응형

 

JNI에서 사용되는 문법 정리



1. jbyte[]를 jstring로 변환

jbyte array[] = {48 ,48 , ..}; // byte array 
jstring result = (*env)->NewStringUTF(env, (char *) array);

2. jbyte[] 크기 구하기

const jbyte array[] = {48, 48, ..}; // byte array 
int size = sizeof(array);

3. char* 크기 구하기

char * text = {48, 48, ..}; // byte array 
int size = strlen(text);

4. char[] 크기 구하기

char arr[] = {48, 48, ..}; 
int size = sizeof(arr);

5. 전역 변수로 byte array를 선언할 경우, 마지막에 '\0' 추가해주어야 함

 char arr[] = {48, 48, .., '\0'};
// 배열의 마지막에 '\0'이 없을 경우, 하위의 array들도 함께 출력됨 
const jbyte array1 = {50,50}; // string: 22
const jbyte array2 = {57,57}; // string: 99

JNIEXPORT jbyteArray JNICALL
Java_com_example_demo_MainActivity_getText(JNIEnv *env, jclass clazz) {
   jstring text = (*env)->NewStringUTF(env, (char *) array1);
   // 2299 출력 
}

6. 특정 형식으로 문자열 변환하기

#include <stdio.h>
#include <stdlib.h>

char *buffer = malloc(100);
snprintf(buffer, 100, "Hello %s", "JNI");
.. 
free(buffer); // 사용 후 메모리 해지 

7. JNI에서 로그 출력하기

#include <android/log.h>
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "LOG", __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG  , "LOG", __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO   , "LOG", __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN   , "LOG", __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR  , "LOG", __VA_ARGS__)

JNIEXPORT jbyteArray JNICALL
Java_com_example_demo_MainActivity_getText(JNIEnv *env, jclass clazz) {
   LOGI("Hello %s", "JNI"); 
   // Hello JNI 출력 
}

 

관련 글

>> [Android] JNI를 이용해 안드로이드에서 c파일 사용하기

728x90
Comments