【问题标题】:Qt Android: Why is a QtApp-debug.apk created for a Release build?Qt Android:为什么要为 Release 构建创建 QtApp-debug.apk?
【发布时间】:2014-05-26 12:53:24
【问题描述】:

我正在发布版本中构建我的 Qt/C++ Android 应用程序,但是生成了以下 APK 文件:

Release/android-build/bin/QtApp-debug.apk
Release/android-build/bin/QtApp-debug-unaligned.apk

我发现this question 这意味着 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++关闭优化并添加调试信息的代码?

【问题讨论】:

  • 您是否也尝试过那里的第一个答案,暗示 QtCreator 发生了变化?
  • @LaszloPapp 是的,那里的解决方案有效,但我现在改变了我的问题,问我为什么需要证书,以及它是否真的是调试版本,除非有证书。
  • 我认为您需要证书才能再次向市场提交?
  • @LaszloPapp 查看我的编辑,还有QtApp-release-unsigned.apk,但除非我使用了证书,否则我不会得到它。

标签: android c++ qt apk


【解决方案1】:

这似乎是 Qt Creator 构建过程中的一个错误。 C++ 文件根据所选的构建配置(在发布模式下进行优化且没有调试信息)按应有的方式编译。因此,无论您的 APK 命名为 QtApp-debug.apk,里面的二进制文件都会根据您的选择进行编译。

调用androiddeployqt时出现问题。如果您查看source,它会在收到--release 或收到--sign 时创建一个发布包。 Qt Creator 从不通过--release,因此它会按应有的方式编译文件,但androiddeployqt 仅在您使用证书时生成发布APK,因为Qt Creator 通过--sign

androiddeployqt创建调试包有什么区别:

  • 包名
  • 它包括一个gdbserver 二进制文件(arm-v7 上大约 250 KB)
  • 它用'debug'而不是'release'调用ant。这就是使您的 apk 使用调试密钥签名的原因

没有证书不会关闭优化并添加调试信息,它只是创建一个调试包,如果您不添加自己的调试签名,则这是必需的。所以毕竟,也许这不是一个错误。

【讨论】:

    【解决方案2】:

    这可能是一个老问题,但我在 Qt 5.12.3 中看到了同样的问题,Release 构建在Release 目录中生成了调试 APK。

    发生这种情况是因为我在启动 QtCreator 时没有选中“已签名”复选框(如果选中,则会要求您输入密码)。提供密码后,我得到了通常的android-build-release-signed.apk 文件。

    【讨论】:

      【解决方案3】:

      应用需要证书才能发布到 Google Play。 此证书可识别应用程序和作者,因此您可以更新应用程序。

      重要: 不要丢失您用于发布应用的密钥,否则您将无法再更新它。

      您可以在发布和调试模式下为您的应用签名,Android SDK 允许为调试签名,但您需要自己的密钥来为发布签名。发布模式是进入 Google Play 的模式。

      关于 Android 应用的发布过程有很好的文档。 您可以在这里查看更多详细信息:http://developer.android.com/tools/publishing/preparing.html 在这里:http://developer.android.com/tools/publishing/app-signing.html

      关于Release/Debug之间的区别,我不确定,但我猜它只会与Qt库有关,与你构建过程中生成的Android原生代码无关,你可以看看在编译版本的大小以获得更好的图片。

      【讨论】:

      • 谢谢,但我不确定您的答案在哪里涵盖为什么它正在创建调试而不是发布版本。为什么没有证书就必须编译关闭优化并添加调试信息的 C++ 代码?
      • 我不明白你的问题,你在问为什么它不需要证书来生成调试模式?它在 Android 页面中,您可以使用证书在调试模式下构建,但使用由 Android SDK 生成的证书。
      猜你喜欢
      • 2017-09-02
      • 2012-06-21
      • 2020-03-20
      • 2022-01-11
      • 2021-10-06
      • 2021-10-14
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多