All I want to do is send some bytes from Qt to Java, but I'm running into an annoying problem, where my *jbyteArray* gets turned into *java.lang.String[]* in mid-flight:
E art : JNI ERROR (app bug): attempt to pass an instance of java.lang.String[] as argument 1 to int Foo.bar(byte[]) F art : art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: bad arguments passed to int Foo.bar(byte[]) (see above for details) F art : art/runtime/java_vm_ext.cc:410] from void org.qtproject.qt5.android.QtNative.runPendingCppRunnables() F art : art/runtime/java_vm_ext.cc:410] "main" prio=5 tid=1 Runnable ... Here's a minimal example; just a simple auto test project: *TestJNI.pro:* QT += testlib androidextras QT -= gui CONFIG += qt console warn_on depend_includepath testcase CONFIG -= app_bundle TEMPLATE = app SOURCES += tst_test_jni.cpp ANDROID_PACKAGE_SOURCE_DIR = $$PWD DISTFILES += \ src/Foo.java *tst_test_jni.cpp:* #include <QtTest> #include <QAndroidJniEnvironment> #include <QtAndroid> class test_jni : public QObject { Q_OBJECT private slots: void test_case1(); }; void test_jni::test_case1() { QAndroidJniEnvironment qjniEnv; jsize _size = static_cast<jsize>(5); jbyteArray jdata = qjniEnv->NewByteArray(_size); jint result; if (jdata == nullptr) QFAIL("Failed creating new jbyteArray"); if (qjniEnv->GetArrayLength(jdata) != _size) { qjniEnv->DeleteLocalRef(jdata); QFAIL("Failed to allocate entire array through JNI"); } // Lorem char foo[] = { 0x4c, 0x6f, 0x72 ,0x65, 0x6d }; qjniEnv->SetByteArrayRegion(jdata, 0, _size, reinterpret_cast<jbyte *>(foo)); QtAndroid::runOnAndroidThread([jdata] { QAndroidJniObject::callStaticMethod<jint>( "Foo", "bar", "([B)I", jdata); }); QCOMPARE(result, 42); } QTEST_APPLESS_MAIN(test_jni) #include "tst_test_jni.moc" *Foo.java:* public class Foo { static int bar(byte baz[]) { return 42; } } Have I missed something very basic here? Best regards, René Hansen
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest