Android上的libspotify.so.12.1.51段错误

时间:2012-07-08 17:57:49

标签: android spotify android-ndk

我已经修改了自动点唱机示例以在Android上运行,但在尝试调用sp_session_create()函数时它会出现错误。

基本上 - 我有一个带按钮的helloworld Android应用程序。按下它时会调用此函数,该函数在sp_session_create():

上崩溃
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");
.
.
.

这是显示segfault的logcat输出:

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  . ...0...0...@..
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  .........@......
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.

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我发布这个作为答案,因为我似乎需要更多声誉来回答评论,但是,回答@ KurtCobain的请求:您还需要确保cache_locationsettings_location点到Android设备上有效,可写的位置。这些变量的spotify示例中的默认值为“tmp”。这不起作用,会导致您的应用崩溃。

相反(至少作为一种临时的,直截了当的解决方案)您可以在活动中使用Context.getCacheDir之类的内容来检索有效的临时文件夹,并在C代码中使用此值(请参阅this question更多信息)。

答案 1 :(得分:0)

我终于弄明白了问题所在。如果你的AndroidManifest.xml没有请求INTERNET权限(可能还有WRITE_EXTERNAL_STORAGE)它会崩溃......不幸的是libspotify没有对创建套接字执行任何检查,因此会崩溃...我说它实际上是libspotify中的一个错误。 ..但是,如果你遇到与我一样的问题,这就是你需要添加到AndroidManifest.xml中的内容:

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

也可能是这样:

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