在Qt中使用CMake构建一个拥有图标、版本、运行名等各项属性的安卓Android应用

起因

最近有一个之前搞的Qt项目想改成使用CMake构建,这样可以方便导入其他开源库,但是该应用有编译为安卓版本的需求,我发现Qt自带的CMake文件中这行

set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/android/")

根本无法使app拥有图标,所以我网上找了找直接添加图标的方法,在github上找到了这个项目https://github.com/LaurentGomila/qt-android-cmake,在主CMake文件中引用可以直接为应用添加属性,但是还差一个图标,所以我自己改了一下。

介绍

这个仓库https://github.com/tedcriss/qt-android-cmake是我fork上述项目自己修改的cmake代码,可以在上述项目的功能基础上实现添加应用图标运行名应用屏幕方向等功能。

使用方法

首先将仓库克隆下来,然后解压,将qt-android-cmake整个文件夹复制到你的项目中。

然后在主CMakeLists.txt中判断安卓平台的部分添加编译安卓库的命令:

add_library(PROJECT_NAME SHARED ${PROJECT_BASE_SOURCES_C_CXX} ${PROJECT_BASE_HEADS} ${PROJECT_QRESOURCES})

引用项目:

include(qt-android-cmake/AddQtAndroidApk.cmake)

接着使用以下代码调整各项属性:

add_qt_android_apk(PROJECT_NAME PROJECT_NAME_APK
    NAME "程序名,就是显示在桌面上该程序的名字"
    NAME_ACTIVE "运行名,显示在该应用程序属性中,也会在安装时显示该名称"
    VERSION_CODE "版本号"
    PACKAGE_NAME "包名,如org.mycompany.myapp"
    KEYSTORE "这个参数有两个输入,第一个是签名key的地址" "第二个为该key的名称,在创建时设置的那个"
    KEYSTORE_PASSWORD "对应上述签名key的密码"
    APK_ICON_DIR "程序图标的存放目录"
    SCREEN_ORIENT "程序默认屏幕方向"
    )

注意事项

  1. 程序版本号(如1.1.1.1)会自动添加${PROJECT_VERSION}的内容,不需要重新传入;
  2. 上述实例中未列出的项目请不要轻易尝试,会出现其他的bug;
  3. 两个PROJECT_NAME要相同,PROJECT_NAME_APK可以自定义,后面会用到,要记住;
  4. 版本号为安卓应用必须设置的属性,如果不设置,程序内部自动设置为1;
  5. KEYSTORE需要直接指向该key文件;
  6. 程序图标目录可使用Qt Creator创建,在左侧项目栏中,选中安卓build选项卡,在右侧 构建设置 - Build的步骤 - Build Android APK 中,点击Application中Android Customization对应的Create Templates选项,然后在弹出的AndroidManifest.xml窗口中的下侧根据提示添加应用图标,最后找到该AndroidManifest.xml文件同目录下的res目录,APK_ICON_DIR后面的参数直接写该目录即可,若不写则自动不添加图标;
  7. SCREEN_ORIENT参数可以控制应用程序默认的屏幕朝向,有以下标签可选。
unspecified,默认值,由系统决定,不同手机可能不一致
landscape,强制横屏显示
portrait,强制竖屏显
behind,与前一个activity方向相同
sensor,根据物理传感器方向转动,用户90度、180度、270度旋转手机方向,activity都更着变化
sensorLandscape,横屏旋转,一般横屏游戏会这样设置
sensorPortrait,竖屏旋转
nosensor,旋转设备时候,界面不会跟着旋转。初始化界面方向由系统控制
user,用户当前设置的方向

一些帮助

在设置完成上述参数后,点击编译即可直接编译,安卓的32位和64位版本可以直接在 构建设置 - CMake 中调整。

我发现在Qt Creator中使用上述代码虽然可以成功创建带属性的apk,但是使用默认设置在编译时会卡住,经测试可采用以下方法解决。

在左侧项目栏中,选中安卓build选项卡,在右侧 构建设置 - Build的步骤 - Build 中,将Targets中的上述代码中对应PROJECT_NAMEPROJECT_NAME_APK两个Target的名称前打勾,然后将最上面默认勾选的all的勾去掉,这样编译完成后程序可以自动运行,但是缺点是会编译两个版本的apk,一个是Qt自动生成的不带版本号的apk,另一个在${CMAKE_CURRENT_BINARY_DIR}/PROJECT_NAME-arm64-v8a/build/outputs/apk下,其中的arm64-v8a可能根据你选择构架名称变化,这下面的apk是带你设置的属性的,内部程序除了你设置的属性外和上述Qt自动编译的apk完全一致,可以将这个用于部署,上述无属性apk用于调试测试。

这样一来我全部的需求都解决了,研究这个东西搞了两三天,希望大家多多点赞支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小涛29

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值