从命令行开发适用于 Android 的 Qt 应用程序

Posted

技术标签:

【中文标题】从命令行开发适用于 Android 的 Qt 应用程序【英文标题】:Developing a Qt app for Android from the command line 【发布时间】:2015-02-23 22:22:19 【问题描述】:

我想在 android 设备上编译和部署一个简单的 helloworld 程序,该程序使用 Qt纯粹 使用 vi/emacs 和 OS X 命令行编写,而不使用 QtCreator 或 Android Studio。

This 页面描述了如何在编译 Qt5 之前为ANDROID_SDK_ROOTANDROID_NDK_ROOT 等填写值。我过去使用 QtCreator 为 Android 编译而无需编译 Qt 本身,我现在想知道是否可以使用命令行工具链来做同样的事情。

到目前为止我采取的步骤是:

    安装了Android SDK。 安装了Android NDK。 sudo port install qt5-mac 安装了 Qt5。

在这最后一步之后,我可以看到/opt/local/share/qt5/mkspecs/android-g++,这表明第一步应该是qmake -spec android-g++

您是否在 OS X 上成功编译并通过命令行将 Qt 项目部署到 Android,而无需编译 Qt 本身?

更新

在 OS X 上运行 sudo port install qt5-mac 似乎不会安装 Qt-for-android。改为下载qt-opensource-mac-x64-1.6.0-8-online.dmg。挂载/运行。单击直到Select Components。确保选择了Android armv7

【问题讨论】:

【参考方案1】:

你需要什么: - Java JDK - 阿帕奇蚂蚁 - Android SDK - Android NDK - Qt for Android

设置环境变量(相应更改):

export ANDROID_HOME=/Path/To/AndroidSDK  
export ANDROID_NDK_HOST=linux-x86  
export ANDROID_NDK_PLATFORM=android-12  
export ANDROID_NDK_ROOT=/Path/To/AndroidNDK  
export ANDROID_NDK_TOOLCHAIN_PREFIX=arm-linux-androideabi  
export ANDROID_NDK_TOOLCHAIN_VERSION=4.8  
export ANDROID_NDK_TOOLS_PREFIX=arm-linux-androideabi  
export ANDROID_SDK_ROOT=/Path/To/AndroidSDK  
export ANDROID_API_VERSION=android-12  

export JAVA_HOME=/Path/To/JavaJDK  
export PATH=$PATH:$ANDROID_HOME/tools:/Path/To/ApacheANT/bin:$JAVA_HOME/bin  

如果您使用的是 OS X,请改用以下行:

export ANDROID_NDK_HOST=darwin-x86_64

为 Android 构建:

mkdir build_myproj_android  
cd build_myproj_android  
/Path/To/QtForAndroid/bin/qmake -r -spec android-g++ /Path/To/MyProject/MyProject.pro  
make  
make install INSTALL_ROOT=android  
/Path/To/QtForAndroid/bin/androiddeployqt --output android --verbose --input android-libMyProject.so-deployment-settings.json  

最后,部署使用:

/Path/to/AndroidSDK/platform-tools/adb install /Path/to/build_myproj_android/android/bin/QtApp-debug.apk

【讨论】:

此配方不再适用于带有 Qt 5.6.0 或 5.7.0 的 El Capitan (10.11.5)。只需QPushButton button("Hello"); button.show(); 答案中描述的链中的所有内容都可以正常工作,但是当在(香草Nexus)设备上启动时,它会以“不幸的是,..已停止”进行轰炸。欢迎提示。 从 5.6 开始,您只能下载预构建 Qt 的 AMRv7 版本。确保您的设备可以运行 ARM7 二进制文件。 (也可以用5.5 AMRv5版本测试) 设备的指令集可以处理 ARMv7。它用 5.5.1 和 5.7.0 轰炸。 这里有一个小注释:export ANDROID_NDK_HOST=linux-x86_64 还有一点小提示:对于 android arm64_v8a,ANDROID_NDK_TOOLCHAIN_PREFIX=aarch64-linux-androidexport ANDROID_NDK_TOOLS_PREFIX=aarch64-linux-android【参考方案2】:

感谢玛丽安写了完整的回复。如果你也打算签署你的包,请通过以下方式告诉 androiddeployqt:

/Path/To/QtForAndroid/bin/androiddeployqt --output android --verbose --input android-libMyProject.so-deployment-settings.json --sign <url/to/keystore> <alias> --storepass <password>

【讨论】:

感谢您的重要补充。如果你做过往返,请看问题***.com/q/38575925/704972

以上是关于从命令行开发适用于 Android 的 Qt 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

从适用于 Android 的亚马逊应用和游戏开发商处购买应用内

自动化测试用例适用于 appium 命令行工具,但不适用于桌面客户端

在 Android 中移植基于 Qt 的应用程序

制作适用于所有 android 版本的 Ionic Android 应用程序

适用于 Android 的开发应用程序密钥和应用程序密钥

在 Linux 上为 Windows Phone 构建 Qt 应用程序