안드로이드 ndk 질문입니다.
조회수 2060회
안녕하세요. ndk 실습을 하던 도중에 의문이 생겼습니다. 보통 android.mk파일을 이용해 ndk빌드를 할때는 C언어 헤더파일이 필요하잖아요. 그때 보통 메소드 명세가
JNIEXPORT void JNICALL Java_com_msi_ibm_ndk_CameraSurfaceView_convertToGray(JNIEnv * env, jobject obj, jobject bitmapcolor,jobject bitmapgray)
이런식으로 일반 C언어 메소드와는 좀 다르잖아요. 근데 이 메소드를 일일이 javah로 자동생성해야 하나요? ffmpeg 오픈소스 같은 경우는 .h파일이 너무 많은데요.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
javah로 자동 생성되는 헤더는 개발하고 있는 Java 소스코드에서 native로 선언된 함수부분만 헤더를 생성합니다.
기존의 C 소스들은(오픈소스 등) 그냥 사용하면 되며(소스와 라이브러리 경로만 잘 설정해주세요.), 안드로이드 스튜디오(혹은 이클립스 등의 IDE)에서 간단한 설정(참고)을 몇가지 하시면, 간단히 사용할 수 있습니다.
그리고 Java의 함수에 대한 C 언어 대응 규칙 (JNI 함수 정의 방법)만 아시면, javah 를 사용하지 않아도 됩니다. 다만, 자동으로 생성하는 것이 오류(사람의 실수)가 날 가능성을 줄여주기 때문에 사용을 권합니다.
다음에 해당하는 경우에 javah를 다시 사용하세요.
- native로 선언된 클래스의 이름 혹은 패키지 이름을 변경하는 경우
- native로 선언된 함수를 추가하거나 삭제하는 경우
- native로 선언된 함수의 시그니처(파라미터 타입과 순서, 함수 이름 등)를 변경하는 경우
참고
이글을 한번 참조해보세요.
- 기존 네이티브 .h 헤더 메소드를 자바에서 쓰려면 명세를 사람손으로 변경해줘야 하나요? 알 수 없는 사용자 2016.6.5 09:56
- SDK에서 라이브러리와 헤더 참조 경로를 설정 해주시거나, 안드로이드 프로젝트에 포함하는 방법으로 사용할 수 있습니다. 그리고 개발하는 코드에서 일반 C/C++ 개발과 마찬가지로 #include ... 와 같이 사용하시면 됩니다. 허대영(소프트웨어융합대학) 2016.6.5 10:11
- 덧붙이자면, 오픈소스 등의 경우, 안드로이드 플랫폼 용 만들어진 경우가 없다면, 원시소스를 이용해서 안드로이드용 컴파일된 라이브러리를 제작해야 합니다. 이는 NDK를 사용해서 빌드할 수 있습니다. 허대영(소프트웨어융합대학) 2016.6.5 10:13
댓글 입력