[Android-development] java.lang.ClassNotFoundException with Android 6
Fabrice Mousset | GEOCEPT GmbH
fabrice.mousset at geocept.com
Tue Jun 30 09:39:25 CEST 2020
Hi,
I found my error, I am using OnNmeaMessageListener in my Java class, which is only available with Android 7 and upper (API 24).
Sorry for the noise.
BR
Fabrice
> -----Ursprüngliche Nachricht-----
> Von: Android-development <android-development-bounces at qt-
> project.org> Im Auftrag von Fabrice Mousset | GEOCEPT GmbH
> Gesendet: Dienstag, 30. Juni 2020 07:59
> An: android-development at lists.qt-project.org
> Betreff: [Android-development] java.lang.ClassNotFoundException with
> Android 6
>
> Hello,
>
> I have posted this also on Qt Forum, but got no reply, perhaps to technic ☹ I
> try it here.
>
> I have a strange problem with Qt 5.12.x for Android ARM.
> I am developing an App which includes an Activity and 2 background services.
> I also have plugin system to extend one of this background services, and
> some of them use JNI / Java code.
> All works as expected with Android 7.0 devices (and upper) but with Android
> 6.0 (and perhaps older), I've got following errors:
>
> System.err: java.lang.ClassNotFoundException: Didn't find class
> "com.geocept.mobilecore.AndroidGPS" on path:
> DexPathList[[],nativeLibraryDirectories=[/vendor/lib, /system/lib]]:
> com.geocept.navdispatchmobile:mcore
> System.err: at
> dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56):
> com.geocept.navdispatchmobile:mcore
> System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:511):
> com.geocept.navdispatchmobile:mcore
> System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:469):
> com.geocept.navdispatchmobile:mcore
> System.err: at
> org.qtproject.qt5.android.QtNative.startQtApplication(Native Method):
> com.geocept.navdispatchmobile:mcore
> System.err: at
> org.qtproject.qt5.android.QtNative$7.run(QtNative.java:374):
> com.geocept.navdispatchmobile:mcore
> System.err: at
> org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61):
> com.geocept.navdispatchmobile:mcore
> System.err: at java.lang.Thread.run(Thread.java:818):
> com.geocept.navdispatchmobile:mcore
>
> The plugin is loaded with QPluginLoader
>
> To load the Java class, I use something like this:
>
> m_jni = QAndroidJniObject(
> "com/geocept/mobilecore/AndroidGPS",
> "(Landroid/content/Context;)V",
> QtAndroid::androidContext().object<jobject>()
> );
>
> if(m_jni.isValid())
> {
> if(JniMethods != Q_NULLPTR && methodCount > 0)
> {
> QAndroidJniEnvironment JniEnv;
>
> auto ObjectClass = JniEnv->GetObjectClass(m_jni.object<jobject>());
> JniEnv->RegisterNatives(ObjectClass, JniMethods, methodCount);
> JniEnv->DeleteLocalRef(ObjectClass);
> }
> }
>
> Any ideas why Android 6 don't find java class in APK but Android 7 does?
> Is there something I am doing wrong?
> I load the plugin at the beginning of the service process and in the main
> thread.
>
> I also have other C++ classes which are using JNI in the same way as above,
> but those are part of the main project and loading them works fine (with the
> same code base).
>
> For now, I am only need one type of plugin, so I could change it to move the
> plugin into main library (change plugin project into static library for example).
> But this cannot not be the final solution.
>
> Thanks for any suggestion.
>
> BR
>
> Fabrice Mousset
> _______________________________________________
> Android-development mailing list
> Android-development at qt-project.org
> https://lists.qt-project.org/listinfo/android-development
More information about the Android-development
mailing list