Android

[Android/NDK] warning: passing 'uint8_t [3]' to parameter of type 'const jbyte *'

Question영 2019. 12. 18. 10:48
반응형
uint8_t crypto[] = { 0x00, 0x00, 0x00 };

JNIEXPORT jbyteArray JNICALL Java_com_example_ndk_Config_crypto (JNIEnv *env, jobject obj){
    jbyteArray ret = (*env)->NewByteArray(env, 8);
    (*env)->SetByteArrayRegion(env, ret, 0, 8, crypto);

    return ret;
}

 

오래된 jni 를 실행하려고 하는데 다음과 같은 오류 메세지가 나왔습니다.

 

jni 는 warning 메세지라고 하더라도 so 파일은 생성이 됩니다.

 

하지만 저런 메세지를 무시하면 빌드된 so 파일이 정상적으로 동작하지 않을수 있기 때문에

 

수정해주고 넘어가야 합니다.

 

위의 문제는 uint8_t 양식의 crypto 란 배열의 데이터를

 

SetByteArrayRegion 에 그대로 전달했기 때문에 발생한 오류입니다.

 

uint8_t crypto[] = { 0x00, 0x00, 0x00 };

JNIEXPORT jbyteArray JNICALL Java_com_example_ndk_Config_crypto (JNIEnv *env, jobject obj){
    jbyteArray ret = (*env)->NewByteArray(env, 8);
    (*env)->SetByteArrayRegion(env, ret, 0, 8, (jbyte *)crypto);

    return ret;
}

 

다음과 같이 uint8_t 로 된 배열을 jbyte* 으로 cast 해주면 문제가 해결됩니다.

 

참고하세요.

반응형