안녕하세요.
제가 soundpool라이브러리를 좀 수정해서 사용하려고 하는데요.
pdk를 이용해서 soundpool관련 c파일들을 새로 컴파일한 뒤 libsoundpool2.so라는 shared library를 만들어서
사용하는데 자꾸 unsatisfiedlinkerror가 나네요.
https://code.google.com/p/android-source-browsing/source/browse/media/jni/soundpool/?repo=platform--frameworks--base&name=android-4.0.1_r1
위 주소에서 soundpool 관련 jni 파일들을 구했고
http://gitorious.org/android-eeepc/base/blobs/b1520e9333efdcc6ce3605be7c02bd0f0c9a0139/media/java/android/media/SoundPool.java
여기서 soundpool.java를 구하고 조금 변경해서 쓰고 있습니다.
libsoundpool2.so 연결과 jni함수 연결은 잘 되는거 같은데 실행하면
08-19 13:12:10.922: E/AndroidRuntime(8129): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1307]: 106 cannot locate '_ZN7android11MediaPlayer6decodeEPKcPjPiS4_'...
이렇게 찍힙니다.
SounPool.cpp 의 DoLoad() 함수에
if (mUrl) {
p = MediaPlayer::decode(mUrl, &sampleRate, &numChannels, &format);
} else {
p = MediaPlayer::decode(mFd, mOffset, mLength, &sampleRate, &numChannels, &format);
LOGV("close(%d)", mFd);
::close(mFd);
mFd = -1;
}
이렇게 Mediaplayer를 사용하는 부분이 나오는데 여기서 라이브러리를 찾지못하고 에러를 내는거 같습니다.
Android.mk에 아래와 같이 관련 shared library를 다 넣어줘서 컴파일도 제대로 된 상태고요.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE := libsoundpool2
LOCAL_SRC_FILES := com_scpark_sound_SoundPool.cpp \
SoundPool.cpp \
SoundPoolThread.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libandroid_runtime \
libnativehelper \
libmedia \
libmediaplayerservice \
libaudioflinger
LOCAL_C_INCLUDES += \
frameworks/base/include/media \
frameworks/base/media/libmedia \
frameworks/base/media/libmediaplayerservice \
frameworks/base/services/audioflinger \
$(JNI_H_INCLUDE)
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
runtime시에 읽어들이지 못하고 있는거 같은데 어떻게 해줘야할까요? 소중한 답변 기다리겠습니다.^^