Android本机代码崩溃

Android本机代码崩溃,android,crash,native,Android,Crash,Native,我有一个测试用例,java在C中调用一个简单的例程,其中包含两个参数,它返回一个字符串,然后运行 然而,当我以与“调用目标异常”相同的方式编写真实代码时,它会崩溃。然后我将它简化为一个调用并返回一个字符串,它仍然崩溃 这两种情况之间的一个区别是,其中一个调用有6个浮点arg,另一个调用有14个浮点arg。先调用6-arg(设置),然后我得到异常 对本机代码调用中可以包含的参数数量是否有实际限制?或者我应该继续在其他地方查看我的代码来解决这个问题 抱歉-我无法将logcat格式化为评论,因此我将其

我有一个测试用例,java在C中调用一个简单的例程,其中包含两个参数,它返回一个字符串,然后运行

然而,当我以与“调用目标异常”相同的方式编写真实代码时,它会崩溃。然后我将它简化为一个调用并返回一个字符串,它仍然崩溃

这两种情况之间的一个区别是,其中一个调用有6个浮点arg,另一个调用有14个浮点arg。先调用6-arg(设置),然后我得到异常

对本机代码调用中可以包含的参数数量是否有实际限制?或者我应该继续在其他地方查看我的代码来解决这个问题

抱歉-我无法将logcat格式化为评论,因此我将其作为编辑发布。这是日志,有什么建议吗?“未找到实现”是什么意思


使用6个浮点数调用例程,并返回字符串类型。“setup”是我在例程崩溃时调用的例程的名称。

我不知道JNI方法的参数数量有任何限制

很抱歉让人分心,我花了一整天时间在这个问题上,发现这个问题只是我的一个愚蠢的打字错误,可能是复制和粘贴问题

有趣的是,我用try…catch块保护了本机调用,但程序仍然崩溃,而没有得到异常

我有两个问题。第一个小学是:

我的.C文件中例程的修饰名是错误的。在我有效的测试用例中,我使用了:

JNIEXPORT jstring JNICALL Java_com_example_atest_NativeLib_hello
在我的真实案例中,我想要:

JNIEXPORT jstring JNICALL Java_com_kinyur_etold_NativeLib_doSetup
但我得到的是:

JNIEXPORT jstring JNICALL Java_com_example_atest_NativeLib_doSetup
所以,当我把这个案例复制到新的案例中时,我留下了一些残羹剩饭。我不知道今天我看了多少次都没有注意到-(

有趣的是,根据logcat的说法,它似乎链接到了库OK,但在运行时失败了(使用例程名称“hello”而不是“doSetup”):

所需要的是:

return (*env)->NewStringUTF(env, aString);

您是否介意发布您的本机函数原型、相应的java原型以及一个失败的调用示例?相关的logcat条目也会很有用。感谢您向我保证问题不在于arg限制。在我大声寻求更多帮助之前,我会再花一天时间来解决它-如果我能找到它,这将节省您的时间。我运行了logcat并看到了这一点,也许您可以给我一个指向何处的指针?我想可能链接(来自异常消息)有问题。我需要在Eclipse中做些什么来配置它以指向本机库文件吗?
D/dalvikvm(  460): Trying to load lib /data/data/com.kinyur.etold/lib/libgalib.so 0x40515840
D/dalvikvm(  460): Added shared lib /data/data/com.kinyur.etold/lib/libgalib.so0x40515840
D/dalvikvm(  460): No JNI_OnLoad found in /data/data/com.kinyur.etold/lib/libgalib.so 0x40515840, skipping init
W/dalvikvm(  460): No implementation found for native Lcom/kinyur/etold/NativeLib;.hello ()Ljava/lang/String;
D/AndroidRuntime(  460): Shutting down VM
W/dalvikvm(  460): threadid=1: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime(  460): FATAL EXCEPTION: main
E/AndroidRuntime(  460): java.lang.UnsatisfiedLinkError: hello
E/AndroidRuntime(  460):        at com.kinyur.etold.NativeLib.hello(Native Method)
E/AndroidRuntime(  460):        at com.kinyur.etold.ComFields.<init>(ComFields.java:33)
E/AndroidRuntime(  460):        at com.kinyur.etold.EtMain.onCreate(EtMain.java:28)
E/AndroidRuntime(  460):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
char* aString = "1234";
return aString;
return (*env)->NewStringUTF(env, aString);