【问题标题】:Building SMTP client for Qt for Android target为 Qt for Android 目标构建 SMTP 客户端
【发布时间】:2015-06-30 09:00:37
【问题描述】:

我正在使用SMTP Client 项目在 Windows 上创建一个库文件 (.dll)。一切正常,电子邮件发送成功。

我想将我的 Qt 项目移植到 Android,由于 Android 是一个不同的架构,我需要使用 Android armv7 工具包构建库。

我试试这个,但我得到了错误:

内部错误:未知的 Android 部署 JSON 文件位置。 构建/部署项目 SMTPEmail 时出错(套件:Android for armeabi-v7a(GCC 4.9,Qt 5.4.2)) 执行步骤“构建 Android APK”时

我怀疑我必须从项目文件中添加/删除一些东西。我看到有一个“win32:CONFIG += dll”,但其他平台没有类似的。

.pro 文件如下所示:

#-------------------------------------------------
#
# Project created by QtCreator 2011-08-11T20:59:25
#
#-------------------------------------------------

QT       += core network

TARGET = SMTPEmail

# Build as an application
#TEMPLATE = app

# Build as a library
TEMPLATE = lib
DEFINES += SMTP_BUILD
win32:CONFIG += dll

QMAKE_CXXFLAGS += -fPIC

SOURCES += \
    src/emailaddress.cpp \
    src/mimeattachment.cpp \
    src/mimefile.cpp \
    src/mimehtml.cpp \
    src/mimeinlinefile.cpp \
    src/mimemessage.cpp \
    src/mimepart.cpp \
    src/mimetext.cpp \
    src/smtpclient.cpp \
    src/quotedprintable.cpp \
    src/mimemultipart.cpp \
    src/mimecontentformatter.cpp \

HEADERS  += \
    src/emailaddress.h \
    src/mimeattachment.h \
    src/mimefile.h \
    src/mimehtml.h \
    src/mimeinlinefile.h \
    src/mimemessage.h \
    src/mimepart.h \
    src/mimetext.h \
    src/smtpclient.h \
    src/SmtpMime \
    src/quotedprintable.h \
    src/mimemultipart.h \
    src/mimecontentformatter.h \
    src/smtpexports.h

OTHER_FILES += \
    LICENSE \
    README.md

FORMS +=

【问题讨论】:

  • 显然,QtCreator 5.5.0 在面向 Android 时无法构建简单的库。您是否尝试将模型应用程序(仅带有 main.cpp 文件)添加到您的项目中。这解决了我的问题。
  • 我猜你的意思是 Qt 5.5.0。我会尝试,但我尝试使用 5.5.0 和 5.4.2 构建
  • 是的,QtCreator 3.4.0 和 At 5.5.0。您可能需要一个顶级 .pro 文件 (TEMPLATE = subdirs) 来包含库和虚拟应用程序。创建虚拟应用程序后,您需要在 Project/Run 页面中将其选为 Run configuration。之后,我就可以编译我的库了。
  • @jpo38:您能否为我的问题创建一个答案并添加您的顶级 .pro 文件的外观,并解释在我的虚拟应用程序中哪里可以找到可执行文件?这对我有很大帮助,因为我不确定运行配置。

标签: android c++ qt email shared-libraries


【解决方案1】:

正如 OP 中所评论的,我遇到了同样的问题,只需将应用程序添加到我的项目中即可解决。

我的原始项目是一个针对库 (tinyxml) 的简单 .pro 文件。使用 Qt 5.2.1 (Qt Creator 3.0.1),我能够为 Android 编译库(创建一个 .so 文件)。使用 Qt 5.5.0 (Qt Creator 3.4.0),我收到了与 OP 中报告的相同的错误消息。

这是我的解决方案:

我创建了另一个针对虚拟程序的 .pro 文件:

mockup_app.pro:

TARGET = mockup_app
SOURCES += main.cpp
TEMPLATE = app

ma​​in.cpp:

// actually never compiled
int main()
{
    return 0;
}

toplevel.pro:

TEMPLATE = subdirs
SUBDIRS += tinyxml.pro
SUBDIRS += mockup_app.pro

然后,打开 toplevel.pro。转到“项目”选项卡,选择“运行”,然后选择“mockup_app”作为“运行配置”。

现在,您可以右键单击库项目并选择“编译”:将创建 .so 文件。

看起来问题是“运行配置”(早期的 QtCreator 版本中不存在)需要选择一个应用程序....如果没有,则选择一个库,然后编译甚至不开始。

编辑 07-20-2015:这是一个 Qt 错误,我填写了错误报告:https://bugreports.qt.io/browse/QTCREATORBUG-14710 并已修复。 QtCreator 的下一个版本应该没问题。

【讨论】:

    【解决方案2】:

    如果您只想成功编译共享库而不考虑后续步骤,有一种解决方法:

    转到 Qt Creator 的 -> 项目 -> 构建 -> 构建步骤。禁用“Make install”和“Build Android APK”。

    在为 Android 构建共享库时,Qt Creator 中似乎存在回归:它曾经与 Qt Creator 3.0(基于 Qt 5.2)或更早版本一起使用,但停止与 Qt Creator 3.1(基于 Qt 5.3) 或更新的 Qt Creator 3.4(基于 Qt 5.5)。

    希望这个错误将在 Qt Creator 的未来版本中得到修复。

    【讨论】:

      【解决方案3】:

      我设法通过删除projectname.pro.user文件中的相应记录来解决它。

      • 退出 QtCreator
      • 删除包含apk属性的元素和 install 属性。不是属性,而是包含它们的元素
      • 运行 QtCreator 并确保项目的构建配置中没有 build apkinstall 步骤

      我还确保没有多余的 projectname.pro.user.* 文件并将其删除,但我不知道这是否重要。

      感谢@jonathanzh 在他的回答中的提示

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-11
        • 1970-01-01
        • 2011-03-27
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多