为 Android 目标构建 Qt 的 SMTP 客户端
Building SMTP client for Qt for Android target
我正在使用 SMTP Client 项目在 Windows 上创建库文件 (.dll)。一切正常,邮件发送成功。
我想将我的 Qt 项目移植到 Android,因为 Android 是一个不同的架构,我需要使用 Android armv7 工具包构建库。
我尝试这样做,但出现错误:
Internal Error: Unknown Android deployment JSON file location.
Error while building/deploying project SMTPEmail (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.4.2))
When executing step "Build Android APK"
我怀疑我必须从项目文件中 add/remove 做一些事情。我看到有一个 "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 +=
如 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
main.cpp:
// actually never compiled
int main()
{
return 0;
}
toplevel.pro:
TEMPLATE = subdirs
SUBDIRS += tinyxml.pro
SUBDIRS += mockup_app.pro
然后,打开toplevel.pro。转到 "Projects" 选项卡,select "Run" 然后 select "mockup_app" as "Run configuration".
现在,您可以右键单击库项目,然后 select "Compile":将创建 .so 文件。
看起来问题是 "Run configuration"(早期的 QtCreator 版本中没有)需要一个应用程序 selected....当有 none,一个库selected 然后编译甚至没有开始。
编辑 07-20-2015:这是一个 Qt 错误,我填写了错误报告:https://bugreports.qt.io/browse/QTCREATORBUG-14710 并且已修复。 QtCreator 的下一个版本应该没问题。
如果您只想成功编译您的共享库而不考虑后续步骤,有一个解决方法:
转到 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 的未来版本中得到修复。
我设法通过删除 projectname.pro.user
文件中的相应记录来解决它。
- 退出 QtCreator
- 删除包含
apk
属性的元素和
install
属性。不是属性,而是包含它们的元素
- 运行 QtCreator 并确保项目的构建配置中没有
build apk
和 install
步骤
我还确保没有多余的 projectname.pro.user.* 文件并将其删除,但我不知道这是否重要。
感谢@jonathanzh 在他的回答中提供的提示
我正在使用 SMTP Client 项目在 Windows 上创建库文件 (.dll)。一切正常,邮件发送成功。
我想将我的 Qt 项目移植到 Android,因为 Android 是一个不同的架构,我需要使用 Android armv7 工具包构建库。
我尝试这样做,但出现错误:
Internal Error: Unknown Android deployment JSON file location. Error while building/deploying project SMTPEmail (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.4.2)) When executing step "Build Android APK"
我怀疑我必须从项目文件中 add/remove 做一些事情。我看到有一个 "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 +=
如 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
main.cpp:
// actually never compiled
int main()
{
return 0;
}
toplevel.pro:
TEMPLATE = subdirs
SUBDIRS += tinyxml.pro
SUBDIRS += mockup_app.pro
然后,打开toplevel.pro。转到 "Projects" 选项卡,select "Run" 然后 select "mockup_app" as "Run configuration".
现在,您可以右键单击库项目,然后 select "Compile":将创建 .so 文件。
看起来问题是 "Run configuration"(早期的 QtCreator 版本中没有)需要一个应用程序 selected....当有 none,一个库selected 然后编译甚至没有开始。
编辑 07-20-2015:这是一个 Qt 错误,我填写了错误报告:https://bugreports.qt.io/browse/QTCREATORBUG-14710 并且已修复。 QtCreator 的下一个版本应该没问题。
如果您只想成功编译您的共享库而不考虑后续步骤,有一个解决方法:
转到 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 的未来版本中得到修复。
我设法通过删除 projectname.pro.user
文件中的相应记录来解决它。
- 退出 QtCreator
- 删除包含
apk
属性的元素和install
属性。不是属性,而是包含它们的元素 - 运行 QtCreator 并确保项目的构建配置中没有
build apk
和install
步骤
我还确保没有多余的 projectname.pro.user.* 文件并将其删除,但我不知道这是否重要。
感谢@jonathanzh 在他的回答中提供的提示