마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

JNI를 통한 c++ -> 안드로이드 통신

0 추천
안녕하세요

지금 c++ 코드로 JNI를 통해서 안드로이드로 함수 콜을 하고잇느대요 (JNI 잘 몰라요... 여기저기 구글링 및 샘플 코드 참조 하였음 )

 

A함수 연결시 "([Ljava/lang/String;[I;)V" 이런식으로 스트링 배열과, 인테저 배열을 보내고 성공도 하였습니다.

근데 여기다가 추가적으로 스트링 몇개와 인테저 몇개를 보내려고하는대.

"(Ljava/lang/String;III)V" 이런식으로 보낸 다른함수 string, int, int , int 이 B함수 는 잘 보내지는데

 

C 함수 "([Ljava/lang/String;Ljava/lang/String;[I;)V" 이런식으로 보내면

 

11-05 20:40:16.057: A/art(18218): art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception java.lang.NoSuchMethodError: no non-static method "Lcom/example/g9kim/wearproject/UnrealBridge;.SendToAndroid_ArrayTest([Ljava/lang/String;Ljava/lang/String;[I;)V"

이런식의 오류가 뜨네요

 

최종적으로는 스트링 배열, 인테저배열, 스트링, 인테저, 인테저 이렇게 보내고싶은대

 

이게 뭔 규칙이 잇는건지 모르겟네요

 

도움부탁드려요 ㅜㅜ
하루일과 (330 포인트) 님이 2015년 11월 5일 질문

1개의 답변

0 추천

자문 자답

 

구글링 하다가 오늘 아침에 알아 냇내요 (글좀 자세히 볼걸...대충 보고 이렇구나 하고 코딩하다가 문제된듯)

void ( String, int, int, String[], int[])

을 위한 JNI signature 는 

"(Ljava/lang/String;II[Ljava/lang/String;[I)V"

이네요

세미콜론은 스트링이 들어가는부분에만 붙이고 나머진 그냥 쓰는건데 제 맘대로 세미콜론을 붙여서 그랬던거네요

 

참조한 사이트는 

http://codepedia.tistory.com/entry/JNI-Method-signature

요기 입니다

 

 

 

하루일과 (330 포인트) 님이 2015년 11월 6일 답변
...