2012-07-08 5 views
2

Android에서 실행되도록 쥬크 박스 예제를 수정했지만 sp_session_create() 함수를 호출 할 때주의해야 할 부분이 있습니다.libspotify.so.12.1.51 Android의 segfaults

기본적으로 - 버튼이있는 helloworld Android 앱이 있습니다.

I/UNISPOT|NDK(5951): prepareSpotify() - 1 
I/UNISPOT|NDK(5951): prepareSpotify() - 2 
I/UNISPOT|NDK(5951): prepareSpotify() - 3 321, 0x575115ac, 0xbec4052c (0x5b4107b4) 
F/libc (5951): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1) 
I/DEBUG (31750): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG (31750): Build fingerprint: 'google/yakju/maguro:4.0.4/IMM76I/330937:user/release-keys' 
I/DEBUG (31750): pid: 5951, tid: 5951 >>> com.holidaystudios.unispot <<< 
I/DEBUG (31750): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 
I/DEBUG (31750): r0 0155d708 r1 4006162c r2 00000000 r3 5b47add8 
I/DEBUG (31750): r4 0155d708 r5 5b47e740 r6 57508d48 r7 0155d708 
I/DEBUG (31750): r8 bec40460 r9 bec4052c 10 0155d768 fp 0155d768 
I/DEBUG (31750): ip 40061474 sp bec40340 lr 5b410a7c pc 5b4104f4 cpsr 60000010 
I/DEBUG (31750): d0 00656c6f736e6f63 d1 72616364732f2061 
I/DEBUG (31750): d2 61726f74532f2f63 d3 7865646e692f6568 
I/DEBUG (31750): d4 0000000000000000 d5 0000000000000000 
I/DEBUG (31750): d6 0000000000000000 d7 00f92b8000000000 
I/DEBUG (31750): d8 0000000000000000 d9 0000000000000000 
I/DEBUG (31750): d10 0000000000000000 d11 0000000000000000 
I/DEBUG (31750): d12 0000000000000000 d13 0000000000000000 
I/DEBUG (31750): d14 0000000000000000 d15 0000000000000000 
I/DEBUG (31750): d16 416f257010000000 d17 3fe0000000000000 
I/DEBUG (31750): d18 0000000000000000 d19 3fe5555560000000 
I/DEBUG (31750): d20 0000000000000000 d21 0000000000000000 
I/DEBUG (31750): d22 3ff0000000000000 d23 0000000000000000 
I/DEBUG (31750): d24 0000000000000000 d25 3fe5555560000000 
I/DEBUG (31750): d26 0000000000000000 d27 3fe5555560000000 
I/DEBUG (31750): d28 0000000000000000 d29 3ff0000000000000 
I/DEBUG (31750): d30 3ff0000000000000 d31 be23e4f5df600000 
I/DEBUG (31750): scr 80000013 
I/DEBUG (31750): 
I/DEBUG (31750):   #00 pc 0016b4f4 /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750):   #01 lr 5b410a7c /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750): 
I/DEBUG (31750): code around pc: 
I/DEBUG (31750): 5b4104d4 e59f50ac e59f30ac e08f5005 e7953003 .P...0...P...0.. 
I/DEBUG (31750): 5b4104e4 e5902004 e2833008 e5803000 e1a04000 . [email protected] 
I/DEBUG (31750): 5b4104f4 e5923000 e1a00002 e1a0e00f e593f178 .0..........x... 
I/DEBUG (31750): 5b410504 e5943004 e3530000 0a000005 e3a02000 .0....S...... .. 
I/DEBUG (31750): 5b410514 e1a00003 e5842004 e5933000 e1a0e00f ..... ...0...... 
I/DEBUG (31750): 
I/DEBUG (31750): code around lr: 
I/DEBUG (31750): 5b410a5c ebfaaa07 e5c7822c e1a00007 ebfffdec ....,........... 
I/DEBUG (31750): 5b410a6c e3500000 1a000005 e1a00007 ebfffe94 ..P............. 
I/DEBUG (31750): 5b410a7c e1a00007 ebfc951c e3a04002 ea00009d [email protected] 
I/DEBUG (31750): 5b410a8c e1a01006 e4d13001 e5c73064 e3a02080 .....0..d0... .. 
I/DEBUG (31750): 5b410a9c e2870065 ebfaa8ee e3a020c0 e2861081 e........ ...... 
I/DEBUG (31750): 
I/DEBUG (31750): stack: 
I/DEBUG (31750):  bec40300 0155d9c8 [heap] 
I/DEBUG (31750):  bec40304 5b37f080 /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750):  bec40308 0155d708 [heap] 
I/DEBUG (31750):  bec4030c 5b47e740 /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750):  bec40310 57508d48 /data/data/com.holidaystudios.unispot/lib/liblespot.so 
I/DEBUG (31750):  bec40314 5b410230 /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750):  bec40318 00000400 
I/DEBUG (31750):  bec4031c bec40460 [stack] 
I/DEBUG (31750):  bec40320 bec4052c [stack] 
I/DEBUG (31750):  bec40324 0155d768 [heap] 
I/DEBUG (31750):  bec40328 0155d768 [heap] 
I/DEBUG (31750):  bec4032c 5b33f988 /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750):  bec40330 00000000 
I/DEBUG (31750):  bec40334 00040000 
I/DEBUG (31750):  bec40338 df0027ad 
I/DEBUG (31750):  bec4033c 00000000 
I/DEBUG (31750): #00 bec40340 575115ac /data/data/com.holidaystudios.unispot/lib/liblespot.so 
I/DEBUG (31750):  bec40344 5b47e740 /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750):  bec40348 57508d48 /data/data/com.holidaystudios.unispot/lib/liblespot.so 
I/DEBUG (31750):  bec4034c 5b410a7c /data/data/com.holidaystudios.unispot/lib/libspotify.so 
I/DEBUG (31750):  bec40350 00000000 
I/DEBUG (31750):  bec40354 57e90026 /system/framework/framework.odex 
I/DEBUG (31750):  bec40358 41678018 /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG (31750):  bec4035c bec404e4 [stack] 
I/DEBUG (31750):  bec40360 00000000 
I/DEBUG (31750):  bec40364 00010001 
I/DEBUG (31750):  bec40368 00000000 
I/DEBUG (31750):  bec4036c 00000000 
I/DEBUG (31750):  bec40370 416a9ee8 /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG (31750):  bec40374 416a9ee8 /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG (31750):  bec40378 41678018 /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG (31750):  bec4037c 00000024 
I/DEBUG (31750):  bec40380 01303740 [heap] 
I/DEBUG (31750):  bec40384 408a39b8 
I/BootReceiver( 189): Copying /data/tombstones/tombstone_00 to DropBox (SYSTEM_TOMBSTONE) 
I/WindowManager( 189): WIN DEATH: Window{416abe40 com.holidaystudios.unispot/com.holidaystudios.unispot.uniSpot paused=false} 
I/ActivityManager( 189): Process com.holidaystudios.unispot (pid 5951) has died. 

모든 아이디어를 다음 세그먼트 폴트를 보여줍니다 로그 캣 출력 여기

JNIEXPORT void JNICALL Java_com_holidaystudios_unispot_uniSpot_prepareSpotify() { 
    sp_session *sp; 
    sp_error err; 
    const char *username = NULL; 
    const char *password = NULL; 

    username = __USERNAME; 
    password = __PASSWORD; 
    g_listname = __PLAYLIST; 

    UNISPOT_DEBUG("prepareSpotify() - 1\n"); 
    audio_init(&g_audiofifo); 
    UNISPOT_DEBUG("prepareSpotify() - 2\n"); 

    /* Create session */ 
    spconfig.application_key_size = g_appkey_size; 
    UNISPOT_DEBUG("prepareSpotify() - 3 %d, %p, %p (%p)\n", g_appkey_size, &spconfig, &sp, sp_session_create); 

    err = sp_session_create(&spconfig, &sp); 
    UNISPOT_DEBUG("prepareSpotify() - 4\n"); 
. 
. 
. 

있어 : 누를 때()는 sp_session_create에 충돌하는이 함수를 호출?

+0

'sp_session_create'의 코드는 무엇입니까? 나는'sp_session_create'에 관해서 더 많은 정보를 포함하도록 질문을 다시 편집 할 것을 제안 할 것입니다, 왜 그것이 UNISPOT_DEBUG의 마지막 매개 변수로서 거기에 있습니까? 실제 충돌 사고가 발생한 곳인가요? – t0mm13b

+0

sp_session_create()는 libspotify.so의 내부 함수입니다. 이것은 Spotify의 독점 라이브러리입니다. 그래서 불행히도 소스 코드가 없습니다. Spotify 개발자 페이지에서이 사이트로 이동했습니다 ... spotify 태그를 사용하면 lib에 대해 조금 더 알고있는 사람이 대답 할 수 있기를 바랍니다 ... sp_session_create가 UNISPOT_DEBUG의 매개 변수로 전송 된 이유는 인쇄하는 것입니다 그 함수가로드 된 주소 (함수 포인터가 NULL이 아닌지 확인하고 싶습니다.) UNISPOT_DEBUG() 행 다음에 크래시가 있습니다. (PC가 로그를 보면 libspotify.so에 있습니다.) – user1510144

+0

질문은 앱과 핸드셋에 적합한 ARM 칩셋을 타겟팅하는 라이브러리입니까? spotify 개발자 포럼에 게시하지 않았습니까? 그 대신에 정답을 얻는 것이 더 적절한 장소가 될 것입니다 :) – t0mm13b

답변

0

나는 결국 문제가 무엇인지 알아 냈습니다. AndroidManifest.xml이 인터넷 권한 (가능하면 WRITE_EXTERNAL_STORAGE)을 요청하지 않으면 충돌이 발생합니다 ... 불행히도 libspotify는 소켓 생성에 대한 검사를 수행하지 않으므로 충돌합니다 ... 실제로 libspotify의 버그라고 말하고 싶습니다. .. 그러나 어쨋든 - 여기에 내가 그랬던 것처럼 당신이 같은 문제가 발생하는 경우에 당신이 당신의 AndroidManifest.xml에 추가 할 필요가있는 작업은 다음과 같습니다

<uses-permission android:name="android.permission.INTERNET" /> 

을 아마도이 :이 게시하도록하겠습니다

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

나는 똑같은 일을하려고하지만 위의 권한 변경에도 불구하고 sp_session_create에서 충돌이 발생합니다.이 장치는 물론 에뮬레이터에서도 테스트했습니다. @ user1510144 - 다른 입력을 할 수 있습니까? local_files 예제를 빌드하려고합니다. – KurtCobain

2

을 @ KurtCobain 님의 요청에 대답하기 위해 나는 답변에 대한 평판이 필요하다고 생각하기 때문에 답으로 : cache_locationsettings_location은 Android 기기의 쓰기 가능하고 유효한 위치를 가리 킵니다. 이러한 변수에 대한 spotify 예제의 기본값은 "tmp"입니다. 이 작동하지 않습니다 및 응용 프로그램이 중단 될 수 있습니다.

대신 유효한 임시 폴더를 검색하고 C 코드에서이 값을 사용하도록 활동에 Context.getCacheDir 같은 것을 사용할 수있다 (적어도 임시, 간단한 솔루션으로) (즉에 대한 추가 정보를 참조 this question).