안드로이드 ndk 질문입니다.


안녕하세요. 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파일이 너무 많은데요.

  • 2016년 06월 05일에 작성됨
    개발을 공부하는 학생 ANDROID / IOS / JSP / VB.NET / AWS

조회수 280


1 답변


좋아요
0
싫어요
채택취소하기

javah로 자동 생성되는 헤더는 개발하고 있는 Java 소스코드에서 native로 선언된 함수부분만 헤더를 생성합니다.

기존의 C 소스들은(오픈소스 등) 그냥 사용하면 되며(소스와 라이브러리 경로만 잘 설정해주세요.), 안드로이드 스튜디오(혹은 이클립스 등의 IDE)에서 간단한 설정(참고)을 몇가지 하시면, 간단히 사용할 수 있습니다.

그리고 Java의 함수에 대한 C 언어 대응 규칙 (JNI 함수 정의 방법)만 아시면, javah 를 사용하지 않아도 됩니다. 다만, 자동으로 생성하는 것이 오류(사람의 실수)가 날 가능성을 줄여주기 때문에 사용을 권합니다.

다음에 해당하는 경우에 javah를 다시 사용하세요.

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

참고

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

  • 2016년 06월 05일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

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

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close