QT用于Android-对AnativeWindow_FromSurface的未定义引用

Qt for Android - undefined reference to ANativeWindow_fromSurface

本文关键字:FromSurface 未定义 引用 AnativeWindow 用于 Android- QT      更新时间:2023-10-16

我是qt的初学者,
我试图使用QT来制作Android应用程序,并使用GSTREAMER(不是QTGStreamer(通过RTSP流式视频。
但是当我使用

QPlatformNativeInterface *nativeInterface = QApplication::platformNativeInterface();
jobject activity = (jobject)nativeInterface->nativeResourceForIntegration("QtActivity");
QAndroidJniEnvironment * qjniEnv;
JNIEnv * jniEnv;
JavaVM * jvm = qjniEnv->javaVM();
jvm->GetEnv(reinterpret_cast<void**>(&qjniEnv), JNI_VERSION_1_6);
jvm->AttachCurrentThread(&jniEnv,NULL);
jint r_id_content = QAndroidJniObject::getStaticField<jint>("android/R$id", "content");
QAndroidJniObject view = ((QAndroidJniObject) activity).callObjectMethod("findViewById", "(I)Landroid/view/View;", r_id_content);
if (view.isValid()) {
    QAndroidJniObject child1 = view.callObjectMethod("getChildAt", "(I)Landroid/view/View;", 0);
    QAndroidJniObject child2 = child1.callObjectMethod("getChildAt", "(I)Landroid/view/View;", 0);
    if (child2.isValid()) {
        QAndroidJniObject sHolder = child2.callObjectMethod("getHolder","()Landroid/view/SurfaceHolder;");
        if (sHolder.isValid()) {
            QAndroidJniObject theSurface = sHolder.callObjectMethod("getSurface","()Landroid/view/Surface;");
            if (theSurface.isValid()) {
                ANativeWindow* awindow = ANativeWindow_fromSurface(jniEnv, theSurface.object());
                qDebug() << "This is a ANativeWindow " << awindow;
            }
        }
    } else {
        qDebug() << "Views are not loaded yet or you are not in the Qt UI Thread";
    }
}

获得AnativeWindow,
它有一个错误:undefined reference to 'ANativeWindow_fromSurface'

我在.pro和
中添加了QT += androidextras #include<android/native_window.h>
#include<android/native_window_jni.h>
在.cpp文件中,我不知道该怎么办。

有人可以帮助我解决这个问题吗?
谢谢。

我在 *.pro文件中添加了 LIBS += -landroid。因此,它有效。

我使用qtandroid :: androidActivity((和callmethod,callObjectMethod。

我添加:

android {

qt = core_private gui_private androidextras

定义 = Q_OS_ANDROID have_time_h have_sys_select_h have_lrand48 has_netinet_in_h}

to .pro文件因此,它有效。