试图弄清楚为什么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"); } }