6op*_*puc 6 c++ java java-native-interface android android-ndk
试图弄清楚为什么c ++函数调用返回一个int会崩溃整个应用程序而不会出现任何错误/警告.
这是工作代码:
jint Java_org_ntorrent_DummyTorrentInfoProvider_next(
JNIEnv * env, jobject obj, jint number)
{
jint test = rand();
__android_log_print(ANDROID_LOG_DEBUG, "HelloNDK!", "rand() = %d", test);
return number;
}
Run Code Online (Sandbox Code Playgroud)
此代码在没有警告的情况下崩溃应用程序:
jint Java_org_ntorrent_DummyTorrentInfoProvider_next(
JNIEnv * env, jobject obj, jint number)
{
jint test = rand();
__android_log_print(ANDROID_LOG_DEBUG, "HelloNDK!", "rand() = %d", test);
return number + test;
}
Run Code Online (Sandbox Code Playgroud)
在应用程序崩溃之前,我可以在log cat中看到我的日志消息(__ android_log_print)
编辑:即使我用"1"替换"数字+测试",应用程序仍然崩溃......它只有在我返回"数字"时才有效...
编辑#2:Java端代码:
package org.ntorrent;
import java.util.ArrayList;
import java.util.Random;
public class DummyTorrentInfoProvider implements TorrentInfoProvider {
public native Integer next(Integer number);
//public Integer next() { return _random.nextInt(); }
public native void test();
private Random _random = new Random(100);
@Override
public ArrayList getTorrents() {
test();
ArrayList torrents = new ArrayList();
torrents.add(
new TorrentInfo("test torrent number 1", next(1), 3f, 5f));
torrents.add(
new TorrentInfo("test torrent number 2", next(2), 4f, 15f));
torrents.add(
new TorrentInfo("test torrent number 555"));
torrents.add(
new TorrentInfo("test torrent number 3", next(3), 13f, 5f));
return torrents;
}
static {
System.loadLibrary("test");
}
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ton 13
jint Java_org_ntorrent_DummyTorrentInfoProvider_next(
JNIEnv * env, jobject obj, jint number)
Run Code Online (Sandbox Code Playgroud)
和
public native Integer next(Integer number);
Run Code Online (Sandbox Code Playgroud)
不符合.一个整数是一个对象,而一个INT是一个原语.
如果您的本机代码使用jint,那么您的java代码应该在本机方法的声明中使用int.
(如果你希望传递一个Integer,你需要将它视为本机的一个jobject,并跳过箍来访问它 - 它可能更容易使用int/jint并在Integer中进行任何必要的转换. java方面)
| 归档时间: |
|
| 查看次数: |
10650 次 |
| 最近记录: |