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

时间:2015-02-23 22:22:20

标签: android macos qt

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

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

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

  1. 安装了Android SDK
  2. 安装了Android NDK
  3. sudo port install qt5-mac安装了Qt5。
  4. 在最后一步之后,我正式看到/opt/local/share/qt5/mkspecs/android-g++,这表明第一步应该是qmake -spec android-g++

    您是否已成功在OS X上编译并从命令行部署到Android的Qt项目而无需编译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

2 个答案:

答案 0 :(得分:4)

你需要什么:
- Java JDK
- Apache ANT
- 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

Build for 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

答案 1 :(得分:1)

感谢Marian写了一个完整的回复。如果你要签署你的包,请通过以下方式告诉androiddeployqt:

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