安卓NDK内置库在设备上崩溃,但在模拟器中运行正常。

问题描述 投票:0回答:1

我想通过本地代码进行DSP计算。这在模拟器(Android 4.2.2)中运行良好。但在一些设备上(Android 7和9),NDK构建的lib让应用程序在执行时直接崩溃 System.loadLibrary. 但是: 当我把下载的lib放到我的APK中时,它的加载没有问题。

我承认,对于主要的应用程序,我在Windows上使用一个旧的Eclipse IDE,目标是API 26。我的NDK是一个小的r7,运行在Ubuntu上。但我的lib只用标准c语言对字节数组进行计算,这里没有访问Android的东西。

原生代码在编译时没有任何警告和错误,并且是为armeabi和armeabi-v7a构建的。在APK中 libxyz.so 文件都在正确的文件夹中。导出函数的名称也应该是正确的。但即使Java类中没有为它们做任何声明,也没有调用任何本地函数,崩溃也会直接发生在 static { System.loadLibrary("libxyz.so"); }

我的lib二进制文件会不会不兼容?

谢谢你的帮助

更新了。 libs确实不兼容,请看下面的评论。

android android-ndk crash java-native-interface android-ndk-r7
1个回答
-1
投票

最后我可以从设备上读取logcat(通过命令行adb,在Eclipse中这是行不通的)。这个问题似乎是由以下原因造成的 "文本重新定位" 在二进制文件中。

Logcat: "java.lang.UnsatisfiedLinkError ... dlopen failed ... libxyz.so has text relocations."

更新到较新的NDK(9),修复了TEXTREL的错误。现在System.loadLibrary和调用原生方法可以在新的API上工作。所以我不得不安装了1,4 GB的NDK来计算标准c中的东西。

© www.soinside.com 2019 - 2024. All rights reserved.