我有一个测试用例,其中 java 使用几个参数调用 C 中的一个简单例程,它返回一个字符串并且它可以工作。
但是,当我以同样的方式编写真实代码时,它会因“调用目标异常”而崩溃。然后我将其简化为仅调用并返回字符串,但它仍然崩溃。
这两种情况之间的一个区别是,其中一个调用有 6 个浮点参数,而另一种调用有 14 个浮点参数。 6-arg 的一个首先被调用(一个设置),然后我得到了异常。
调用 native 代码时可以使用的参数数量是否有任何实际限制?或者我应该继续在其他地方查看我的代码是否存在问题?
抱歉 - 我无法将 logcat 格式化为评论,因此我将其作为编辑发布。这是 logcat,有什么建议我应该看哪里吗? “未找到实现”是什么意思?
D/dalvikvm( 531): Added shared lib /data/data/com.kinyur.etold/lib/libgalib.so 0x405133e0
D/dalvikvm( 531): No JNI_OnLoad found in /data/data/com.kinyur.etold/lib/libgalib.so 0x405133e0, skipping init
W/dalvikvm( 531): No implementation found for native Lcom/kinyur/etold/NativeLib;.setup (FFFFFF)Ljava/lang/String;
D/AndroidRuntime( 531): Shutting down VM
W/dalvikvm( 531): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime( 531): FATAL EXCEPTION: main
该例程使用 6 个 float 调用并返回 String 类型。 “setup”是我在崩溃时调用的例程的名称。
最佳答案
我不知道 JNI 方法的参数数量有任何限制
关于Android 原生代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7375579/