2

我已经修改了自动点唱机示例以在 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");
.
.
.

这是显示段错误的 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.

有任何想法吗?

4

2 回答 2

2

我将其发布为答案,因为似乎我需要更多的声誉来回答评论,但是,为了回答@KurtCobain 的请求:您还需要确保您的cache_locationandsettings_location指向您的 android 设备上有效的、可写的位置。这些变量的 spotify 示例中的默认值为"tmp"。这将不起作用,并且会导致您的应用程序崩溃。

相反(至少作为一个临时的、直接的解决方案),您可以Context.getCacheDir在您的活动中使用类似的东西来检索有效的临时文件夹,并在您的 C 代码中使用此值(有关更多信息,请参阅此问题)。

于 2012-10-06T20:22:42.280 回答
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" />
于 2012-07-10T17:57:45.907 回答