Qt Android:为什么为Release版本创建了QtApp-debug.apk?

sas*_*alm 11 c++ qt android apk

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

Release/android-build/bin/QtApp-debug.apk
Release/android-build/bin/QtApp-debug-unaligned.apk
Run Code Online (Sandbox Code Playgroud)

我发现这个问题意味着即使对于Release版本,APK文件也是以调试模式构建的.这里的答案暗示只有拥有证书才能实现发布版本.

我按照那里的说明进行操作,确实在创建证书后,我得到了这些文件:

Release/android-build/bin/QtApp-release.apk
Release/android-build/bin/QtApp-release-unsigned.apk
Run Code Online (Sandbox Code Playgroud)

为什么我需要一个证书才能创建一个Release APK,如果没有证书,Release版本和Debug版本之间是否有区别,或者它们都包含未经优化的代码?

编辑:根据已发布的答案,我想澄清一下,我问为什么没有证书需要 Qt Creator编译C++代码并关闭优化并添加调试信息?

Sma*_*sho 8

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

调用问题来了androiddeployqt.如果您查看源代码,它会在收到时--release或在收到时创建一个发布包--sign.Qt Creator永远不会传递--release,所以它会编译文件,但androiddeployqt只在你使用证书时生成一个版本APK,因为Qt Creator通过了--sign

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

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

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