So I think i got that completely wrong. I'm more used to using androidextras. They have a nice API that cleans up for you. I gotta that's not an option? Maybe they JNI stuff should get it's own module separate from Android?
> Sent: Friday, January 25, 2019 at 9:00 PM > From: "Jason H" <jh...@gmx.com> > To: "René Hansen" <ren...@gmail.com> > Cc: interest <interest@qt-project.org> > Subject: Re: [Interest] (JNI ERROR) jbytearray -> java.lang.String[] - What > am I doing wrong here? > > > > I'm not familiar with that, jbteArray, but in attemping your challenge, I saw: > > qjniEnv->SetByteArrayRegion(jdata, 0, _size, reinterpret_cast<jbyte *>(foo)); > > but saw this in the docs: > void Set<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array, jsize start, > jsize len, NativeType *buf); > > > is jdata your jni env? > > Sent: Friday, January 25, 2019 at 1:13 PM > From: "René Hansen" <ren...@gmail.com> > To: interest <interest@qt-project.org> > Subject: [Interest] (JNI ERROR) jbytearray -> java.lang.String[] - What am I > doing wrong here? > > 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_______________________________________________ > Interest mailing list Interest@qt-project.org > https://lists.qt-project.org/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest