안드로이드 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를 다시 사용하세요.

    1. native로 선언된 클래스의 이름 혹은 패키지 이름을 변경하는 경우
    2. native로 선언된 함수를 추가하거나 삭제하는 경우
    3. native로 선언된 함수의 시그니처(파라미터 타입과 순서, 함수 이름 등)를 변경하는 경우

    참고

    이글을 한번 참조해보세요.

    • 기존 네이티브 .h 헤더 메소드를 자바에서 쓰려면 명세를 사람손으로 변경해줘야 하나요? 알 수 없는 사용자 2016.6.5 09:56
    • SDK에서 라이브러리와 헤더 참조 경로를 설정 해주시거나, 안드로이드 프로젝트에 포함하는 방법으로 사용할 수 있습니다. 그리고 개발하는 코드에서 일반 C/C++ 개발과 마찬가지로 #include ... 와 같이 사용하시면 됩니다. 허대영(소프트웨어융합대학) 2016.6.5 10:11
    • 덧붙이자면, 오픈소스 등의 경우, 안드로이드 플랫폼 용 만들어진 경우가 없다면, 원시소스를 이용해서 안드로이드용 컴파일된 라이브러리를 제작해야 합니다. 이는 NDK를 사용해서 빌드할 수 있습니다. 허대영(소프트웨어융합대학) 2016.6.5 10:13

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)