Qt安卓系统:为什么QtApp-debug.apk是为发布版本创建的

Qt Android: Why is a QtApp-debug.apk created for a Release build?

本文关键字:布版本 版本 创建 系统 为什么 apk QtApp-debug Qt      更新时间:2023-10-16

我正在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本机代码无关,您可以查看编译版本的大小,以获得更好的效果。