Qt安卓系统:为什么QtApp-debug.apk是为发布版本创建的
Qt Android: Why is a QtApp-debug.apk created for a Release build?
我正在Release版本中构建我的Qt/C++Android应用程序,但会生成以下APK文件:
Release/android-build/bin/QtApp-debug.apk
Release/android-build/bin/QtApp-debug-unaligned.apk
我发现了这个问题,这意味着APK文件是在调试模式下构建的,即使是发布版本。那里的答案意味着只有当你有证书时,发布版本才是可能的。
我遵循了那里的说明,事实上,在创建证书后,我得到了以下文件:
Release/android-build/bin/QtApp-release.apk
Release/android-build/bin/QtApp-release-unsigned.apk
为什么我需要证书来创建Release APK?如果没有证书,Release build和Debug build之间有区别吗?或者它们都包含未优化的代码?
编辑:根据发布的答案,我想澄清一下,我想问为什么没有证书就需要让Qt Creator编译关闭优化并添加调试信息的C++代码?
这似乎是Qt Creator构建过程中的一个错误。C++文件按照所选的构建配置进行编译(在发布模式中进行了优化,没有调试信息)。因此,无论你的APK名为QtApp-debug.APK,里面的二进制文件都会根据你的选择进行编译。
调用androiddeployqt
时出现问题。如果您查看源代码,它会在收到--release
或收到--sign
时创建一个发布包。Qt Creator从不通过--release
,所以它会按照应该的方式编译文件,但androiddeployqt
只在您使用证书时生成一个发布APK,因为Qt Creater通过了--sign
androiddeployqt创建调试包的区别是什么:
- 程序包名称
- 它包括一个
gdbserver
二进制文件(arm-v7上大约250 KB) - 它用"debug"而不是"release"调用
ant
。这就是使用调试密钥对apk进行签名的原因
没有证书并不是关闭优化和添加调试信息,它只是创建一个调试包,带有调试签名,如果你不添加自己的签名,这是必要的。毕竟,也许这不是一个bug。
这可能是一个老问题,但我在Qt 5.12.3中看到了同样的问题,这是一个Release
构建在Release
目录中生成的调试APK。
发生这种情况是因为我在启动QtCreator时没有选中"已签名"复选框(如果选中,将要求您输入密码)。提供密码后,我得到了通常的android-build-release-signed.apk
文件。
应用程序需要证书才能发布到Google Play。此证书标识应用程序和作者,因此您可以更新应用程序。
重要信息:不要丢失用于发布应用程序的密钥,否则您将无法再对其进行更新。
您可以在发布和调试模式下对应用程序进行签名,Android SDK允许对其进行调试签名,但您需要自己的密钥才能进行发布签名。发布模式是谷歌播放的模式。
关于安卓应用程序的发布过程,有很好的文档。您可以在此处查看更多详细信息:http://developer.android.com/tools/publishing/preparing.html在这里:http://developer.android.com/tools/publishing/app-signing.html
关于发布/调试之间的差异,我不确定,但我的猜测是,它只与Qt库有关,而与构建过程中生成的Android本机代码无关,您可以查看编译版本的大小,以获得更好的效果。
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- 如何正确实现与基类不同的版本?
- 从预处理器获取 Windows 版本(C++ Win32)
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如何在C++中将 Python 字符串转换为其转义版本?
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建