试图弄清楚为什么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;
}
此代码在没有警告的情况下崩溃应用程序:
jint Java_org_ntorrent_DummyTorrentInfoProvider_next(
JNIEnv * env,test);
return number + test;
}
在应用程序崩溃之前,我可以在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");
}
}