Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在android应用程序中使用libspotify 12_Android_Android Ndk_Spotify - Fatal编程技术网

无法在android应用程序中使用libspotify 12

无法在android应用程序中使用libspotify 12,android,android-ndk,spotify,Android,Android Ndk,Spotify,我正在尝试使用NDK在我的android应用程序中加载libspotify。 我正在使用libspotify++和jlibspotify库。所有内容似乎都已加载,但当libspotify尝试加载libspotify.so.12库时,它会崩溃 我不能在android中使用符号链接 代码: 日志: 有人知道该怎么做才能让它工作吗?看来您需要更改创建libspotify的构建过程,以获得合适的名称 最简单的方法是使用Android NDK构建系统-它将正确编译和链接库。似乎您需要更改创建libspot

我正在尝试使用NDK在我的android应用程序中加载libspotify。 我正在使用libspotify++和jlibspotify库。所有内容似乎都已加载,但当libspotify尝试加载libspotify.so.12库时,它会崩溃

我不能在android中使用符号链接

代码:

日志:


有人知道该怎么做才能让它工作吗?

看来您需要更改创建libspotify的构建过程,以获得合适的名称


最简单的方法是使用Android NDK构建系统-它将正确编译和链接库。

似乎您需要更改创建libspotify的构建过程,以获得正确的名称


最简单的方法是使用Android NDK构建系统-它将正确编译和链接库。

来自Mārtiņš的答案是正确的,它应该使用Android的NDK构建系统构建。 当无法控制库时,有一个解决方法:

而不是使用System.loadLibrary JLibSpotify加载库; 我手动将/data/data/se.warting.spotify/lib/libspotify.so复制到/data/data/se.warting.spotify/libspotify.so.12 然后将以下内容加载到库中:

System.load("/data/data/se.warting.spotify/libspotify.so.12");
之后,我可以正常加载jlibspotify:

System.loadLibrary("jlibspotify");

马蒂什的回答是正确的,它应该用Android的NDK构建系统构建。 当无法控制库时,有一个解决方法:

而不是使用System.loadLibrary JLibSpotify加载库; 我手动将/data/data/se.warting.spotify/lib/libspotify.so复制到/data/data/se.warting.spotify/libspotify.so.12 然后将以下内容加载到库中:

System.load("/data/data/se.warting.spotify/libspotify.so.12");
之后,我可以正常加载jlibspotify:

System.loadLibrary("jlibspotify");

我将在这里展示我的Java/JVM技能,并尝试在Android/Dalvik上应用它们

System.loadLibrary需要一个JNI库名称作为其参数。在本例中,libspotify不是而且从来都不是JNI库,但libjlibspotify似乎是。注意第一个调用如何在日志中抱怨缺少JNI_OnLoad函数。这通常是一个很好的提示。然而,只要可以找到任何共享库,System.loadLibrary都会接受它,这就是为什么在这种情况下调用不会失败的原因

JNI库的依赖库由平台内置的共享库加载机制自动加载。在这种情况下,libjlibspotify依赖于libspotify.so.12,因此如果加载程序的路径中有这样一个文件可用,那么无论何时加载libjlibspotify,系统都应该自动加载该文件

因此,在这种情况下,正确的Java代码应该是:

public class Session {
    static {
        System.loadLibrary("jlibspotify");
    }
}
但是,如果在System.loadLibrary调用中未找到依赖库,则该调用将失败,并出现未满足的链接错误。请参阅有关缺少的依赖libspotify.so.12文件的日志

libspotify 12目前以libspotify.so.12.1.45的形式在存档中发布,其中一些符号链接libspotify.so和libspotify.so.12指向该文件。我不知道libjlibspotify是如何在这个场景中构建的,但是如果符号链接在Android设置中不相关,那么libjlibspotify应该构建为从存档中加载libspotify.so.12.1.45,无需重命名


我将在这里展示我的Java/JVM技能,并尝试在Android/Dalvik上应用它们

System.loadLibrary需要一个JNI库名称作为其参数。在本例中,libspotify不是而且从来都不是JNI库,但libjlibspotify似乎是。注意第一个调用如何在日志中抱怨缺少JNI_OnLoad函数。这通常是一个很好的提示。然而,只要可以找到任何共享库,System.loadLibrary都会接受它,这就是为什么在这种情况下调用不会失败的原因

JNI库的依赖库由平台内置的共享库加载机制自动加载。在这种情况下,libjlibspotify依赖于libspotify.so.12,因此如果加载程序的路径中有这样一个文件可用,那么无论何时加载libjlibspotify,系统都应该自动加载该文件

因此,在这种情况下,正确的Java代码应该是:

public class Session {
    static {
        System.loadLibrary("jlibspotify");
    }
}
但是,如果在System.loadLibrary调用中未找到依赖库,则该调用将失败,并出现未满足的链接错误。请参阅有关缺少的依赖libspotify.so.12文件的日志

libspotify 12目前以libspotify.so.12.1.45的形式在存档中发布,其中一些符号链接libspotify.so和libspotify.so.12指向该文件。我不知道libjlibspotify是如何在这个场景中构建的,但是如果符号链接在Android设置中不相关,那么libjlibspotify应该构建为从存档中加载libspotify.so.12.1.45,无需重命名


能否检查libjlibspotify.so文件依赖于哪些共享库?您可以使用以下命令对objdump执行此操作:arm-linux-androideabi-objdump.exe-p libtest.so | grep NEEDEDI无法
t格式化输出,所以我编辑了我的问题,我想问题出在需要的库上,我该如何更改它?您的日志显示libspotify.so加载正常-看起来jlibspotify不正确地依赖于libspotify.so.12。您能检查libjlibspotify.so文件依赖于哪些共享库吗?您可以使用以下命令对objdump执行此操作:arm-linux-androideabi-objdump.exe-p libtest.so | grep NEEDEDI无法格式化输出,因此我编辑了我的问题,我想问题出在所需的库中,我如何更改它?您的日志显示libspotify.so加载正常-看起来jlibspotify不正确地依赖libspotify.so.12。当然会,但我不能这样做。我想这个问题是spotify造成的。当然会,但我做不到。我想这个问题是spotify造成的。事实并非如此。您可以使用System.loadLibrary加载任何共享库,以便以后可以在自己的过程中搜索符号。即使这些依赖库不包含任何JNI代码。即使对于JNI库,没有JNI_OnLoad也是完全有效的。jlibspotify是用Androids ndk build构建的。libspotify并非如此。事实并非如此。您可以使用System.loadLibrary加载任何共享库,以便以后可以在自己的过程中搜索符号。即使这些依赖库不包含任何JNI代码。即使对于JNI库,没有JNI_OnLoad也是完全有效的。jlibspotify是用Androids ndk build构建的。libspotify并非如此。