我想通过本机代码进行DSP计算。这在模拟器(Android 4.2.2)中运行良好。但是在几台设备(Android 7和9)上,由NDK构建的库使应用程序在执行 System.loadLibrary 时直接崩溃。 但是:当我将下载的lib放入APK时,它不会出现问题。
我承认,对于主应用程序,我在Windows上使用的是旧的Eclipse IDE,目标是API26。我的NDK是在Ubuntu上运行的小型r7。但是我的lib只在标准c语言中对字节数组进行计算,此处未访问Android内容。
本机代码编译时没有警告和错误,是为armeabi和armeabi-v7a构建的。在APK中, libxyz.so 文件位于正确的文件夹中。导出函数的名称应正确。但是,即使Java类中没有针对它们的声明并且没有调用任何本机,崩溃也直接发生在static { System.loadLibrary("libxyz.so"); }
我的库二进制文件可以不兼容吗?
感谢您的帮助!
更新:这些库确实不兼容,请参见下面的注释。
答案 0 :(得分:-1)
最后,我可以从设备读取logcat(通过命令行adb,在Eclipse中这是行不通的)。该问题似乎是由二进制文件中的“文本重定位” 引起的。
Logcat:“ java.lang.UnsatisfiedLinkError ... dlopen失败... libxyz.so具有文本重定位”
更新到新的NDK(9)修复了TEXTREL错误。现在,System.loadLibrary和调用本机方法可在较新的API上使用。因此,我必须安装1,4 GB的NDK才能在标准c中进行计算。