Unsolved QtAndroidExtras Source: How to compile .java file to .class file?
-
Hi; I wonder
loadClass
function how to compiled .java files to .class files inqtbase-dev/src/corelib/kernel/qjni.cpp
? Because we know *.java files must to compile to *.class files forenv->FindClass
function. But how to doingloadClass
this job?qtbase-dev/src/corelib/kernel/qjni.cpp ----> loadClass function
:inline static jclass loadClass(const QByteArray &className, JNIEnv *env, bool binEncoded = false) { const QByteArray &binEncClassName = binEncoded ? className : toBinaryEncClassName(className); bool isCached = false; jclass clazz = getCachedClass(binEncClassName, &isCached); if (clazz != 0 || isCached) return clazz; QJNIObjectPrivate classLoader(QtAndroidPrivate::classLoader()); if (!classLoader.isValid()) return 0; QWriteLocker locker(cachedClassesLock); // did we lose the race? const QLatin1String key(binEncClassName); const QHash<QString, jclass>::const_iterator &it = cachedClasses->constFind(key); if (it != cachedClasses->constEnd()) return it.value(); QJNIObjectPrivate stringName = QJNIObjectPrivate::fromString(key); QJNIObjectPrivate classObject = classLoader.callObjectMethod("loadClass", "(Ljava/lang/String;)Ljava/lang/Class;", stringName.object()); if (!exceptionCheckAndClear(env) && classObject.isValid()) clazz = static_cast<jclass>(env->NewGlobalRef(classObject.object())); cachedClasses->insert(key, clazz); return clazz; }
classLoader
defined inqtbase-dev/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
like this:private static ClassLoader m_classLoader = null; public static ClassLoader classLoader() { return m_classLoader; } public static void setClassLoader(ClassLoader classLoader) { m_classLoader = classLoader; }
Thanks.