【问题标题】:Qt for Android - undefined reference to ANativeWindow_fromSurfaceQt for Android - 未定义对 ANativeWindow_fromSurface 的引用
【发布时间】:2017-04-26 04:03:35
【问题描述】:

我是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&lt;android/native_window.h&gt;
#include&lt;android/native_window_jni.h&gt;
在 .cpp 文件中,我不知道我还能做什么。

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

【问题讨论】:

    标签: android c++ qt gstreamer-1.0


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我使用 QtAndroid::androidActivity() 和 callMethod、callObjectMethod。

      我补充:

      android {
      

      QT += core_private gui_private androidextras

      定义 += Q_OS_ANDROID \ HAVE_TIME_H \ HAVE_SYS_SELECT_H \ HAVE_LRAND48 \ HAVE_NETINET_IN_H }

      到 .pro 文件 所以,它可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 2015-05-14
        • 2014-06-24
        • 2012-03-16
        相关资源
        最近更新 更多