gpt4 book ai didi

qt - qtquickcompiler 和新的 JIT .qmlc 缓存之间的区别?

转载 作者:行者123 更新时间:2023-12-04 04:20:49 30 4
gpt4 key购买 nike

我对 qtquickcompiler、JIT qml 缓存以及 qt 5.8(分别为 5.9)的开源版本中可用(和不可用)的内容有些困惑。

基本上,我想保护我的 .qml 和 .js 文件在我的发布版本中不被读取。我在没有编辑任何代码的情况下开始了一个新的示例 QtQuick 项目。我关注了这些 instructions并在.pro文件中添加了CONFIG += qtquickcompiler,但是没有效果。

我的 .qml 文件内置于 .exe(在 Windows 上),但如果查看可执行文件,例如使用 Notepad++ ,我仍然可以看到 .qml 文件的源代码。

另一方面,如果我不对我的 .qml 文件使用 QRC,则会在运行时为我的每个 .qml 文件创建 .qmlc 文件。这些文件不是(很容易?)可读的。但是我没有找到只使用 .qmlc 文件而不在我的构建中传送 .qml 文件的方法(我认为它不是那样的)。

来到我的问题:有没有办法用开源版本的 qt 保护我的 .qml 和 .js 文件? qtquickcompiler 和新的 JIT .qmlc 有什么区别?

最佳答案

不,它会是,但后来他们暂时放弃了这些计划,取而代之的是缓存。

我认为您将无法重复使用 .qmlc文件在另一台计算机上,因为 IIRC 它们不是架构可移植的。

以后应该可以预编译.qml.qmlc提前并将它们捆绑到应用程序二进制文件中。

如果您的文件在文件系统上,则无法保护它们不被读取,reverse engineered , 或 tampered with .

使用编译器,QML 代码被转换为 C++ 代码,然后编译为本地二进制文件。另外,上次我检查过,如果您选择编译器,则是“非此即彼”的情况,如果您使用编译的qml,则只能使用编译的qml,因此不能与常规qml文件混合。它也是提前的,并且需要商业许可证。

相比之下,qml 缓存是即时的(将来可能会提前),不需要商业许可证,也没有阻止您使用常规 qml 文件的限制。我不知道实现细节,但它肯定不是 qml 代码转换为 C++ 然后编译,因为它发生在客户端并且不需要安装 Qt 甚至 C++ 编译器。它听起来也不像字节码,因为 IIRC 它在平台之间不是二进制兼容的,它更像是缓存 qml 文件处理结果以避免每次都这样做。

this answer 中所述,通过一些额外的工作,可能可以实现相当数量的保护,例如加密的 QML 文件或二进制资源,但我还没有深入研究。

最后,如果你把qrc文件的压缩设置的阈值很低,它会在一定程度上混淆可执行二进制文件中的QML代码,但即便如此,它也是常规的zip压缩,所以如果你的代码真的值得窃取,它不会真的防止这种情况,只是让它变得不那么微不足道。

关于qt - qtquickcompiler 和新的 JIT .qmlc 缓存之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43845523/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com