Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. General talk
  3. Brainstorm
  4. QtAndroidExtras Source: How to compile .java file to .class file?
Forum Updated to NodeBB v4.3 + New Features

QtAndroidExtras Source: How to compile .java file to .class file?

Scheduled Pinned Locked Moved Unsolved Brainstorm
1 Posts 1 Posters 833 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    Ibrahim
    wrote on 28 Jan 2017, 13:05 last edited by Ibrahim
    #1

    Hi; I wonder loadClass function how to compiled .java files to .class files in qtbase-dev/src/corelib/kernel/qjni.cpp ? Because we know *.java files must to compile to *.class files for env->FindClass function. But how to doing loadClass 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 in qtbase-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.

    1 Reply Last reply
    0

    1/1

    28 Jan 2017, 13:05

    • Login

    • Login or register to search.
    1 out of 1
    • First post
      1/1
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved