안드로이드 개발 질문/답변
(글 수 45,052)
JNI를 공부하면서 가능할지 모르겠지만.
예를들어 음악을 재생할 수 있는 mediaplayer class에서 호출하는 JNI에
android_media_MediaPlayer.cpp가 존재 합니다. 이 안에서 API를 추가해서
저만의 mediaplayer 함수를 만들 수 있을까요?
아니면 따로 JNI코드를 만들어서 android_media_MediaPlayer.cpp의 함수를 호출하거나 상속받는 방법으로 진행을
해야할까요?
목적 : 공부를 위해 안드로이드 소스 중 C++ or C언어로 되어있는 JNI형태의 코드를 수정하거나 추가해서 해당 부분의 API를 새롭게 사용하기 위함.
2012.11.21 11:02:03
가능은 합니다만,
rooting 된 시스템은 상용으로는 의미가 없기 때문에 주의하셔야 합니다.
그리고 so library는 NDK(C언어)로 사용해야 합니다.
library를 read만 하는 경우라면 rooting 없이 가능하고, 상용 어플중에는 이런 어플들도 있습니다.
NDK를 넘어서 PDK 기능까지 아는 사람들만 쓰는 겁니다.
단, 임의로 추가한 api를 가진 library를 넣기 위해서는
system을 rooting해서 강제로 넣거나 아예 시스템을 새로 만들어야 합니다.
시간 여유 있으면 전용 SDK 만드는게 제일 깔끔합니다. ㅡㅡ;
Android framework단에 뭘 추가하면 새로 추가한 API를 framework을 뚫어서
어플단(보통 java)단까지 위로 올려줘야 하는데,
보통 전용 SDK 를 만들어야 합니다.
Java 단까지는 작업을 해봤는데, NDK 까지만 되게 하는 건 확인을 못했습니다.
어플이 media player so file에 바로 붙을 수만 있으면(rooting 필요)
가장 간단할 것 같네요. ㅡㅡ;
아니면 거꾸로 Linux kernel단으로 내려와서 character device driver를 하나 만들고,
r/w 권한을 줘서(rooting 필요) ,
어플단은 SDK 안 거치고 Java 나 C I/O 함수로 device driver에 바로 붙어서 제어할 수도 있습니다.
이 방법은 boot.img 을 다시 만들어야 해서 kernel + Android framework 둘 다 필요합니다.
media player core 는 HW CODEC도 건드려야 하고,
이미 solution 으로 제공하는 global 회사(VisualOn, ...)들이 이미 많기 때문에
CODEC 전문으로 하시는 분이 아니면 하기 힘든 분야입니다.