首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt生编译器和新的JIT .qmlc缓存之间的区别?

Qt生编译器和新的JIT .qmlc缓存之间的区别?
EN

Stack Overflow用户
提问于 2017-05-08 10:39:11
回答 4查看 3.7K关注 0票数 11

我对qtQuick编译器、JIT qml缓存以及开放源代码版本的qt5.8(分别为5.9)中可用的(和哪些不是)感到有点困惑。

基本上,我希望在发布版本中保护我的.qml和.js文件的可读性。我在没有编辑任何代码的情况下启动了一个新的示例QtQuick项目。我遵循这些使用说明,并在+=文件中添加了配置+=qtQuick编译器,但没有任何效果。

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

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

来问我的问题:是否有办法用开放源码的qt版本保护我的.qml和.js文件?QtQuick编译器和新的JIT .qmlc有什么区别?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-08 10:55:35

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

我认为您无法在另一台计算机上重用.qmlc文件,因为IIRC不是可移植的体系结构。

将来,应该可以提前将.qml编译成.qmlc,并将它们绑定到应用程序二进制文件中。

如果您的文件位于文件系统上,则无法保护它们不被读取、逆向工程篡改

使用编译器,QML代码被转换为C++代码,然后编译成本机二进制文件。另外,上一次我检查,如果您选择编译器,这是一种“任一/或”的情况,如果使用已编译的qml,则只能使用已编译的qml,因此不能与常规qml文件混在一起。这也是提前,并需要一个商业许可证。

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

正如这个答案中所概述的,通过一些额外的工作,也许可以实现相当数量的保护,例如加密的QML文件或二进制资源,但我仍然没有深入研究它。

最后,如果您以较低的阈值为qrc文件设置压缩,它将在可执行二进制文件中混淆QML代码,但即便如此,它也是常规压缩压缩,因此如果您的代码确实值得窃取,它不会真正防止这种情况,只需稍微减少一点琐碎。

票数 1
EN

Stack Overflow用户

发布于 2018-05-22 16:07:18

更新后的答案:从QT5.11开始,Qt快速编译器也可以在开源版本中获得:

代码语言:javascript
运行
复制
CONFIG += qtquickcompiler

请参阅5.11

票数 3
EN

Stack Overflow用户

发布于 2017-05-08 10:55:21

有办法用开源版本的qt保护我的.qml和.js文件吗?

还没。在5.8之前,您需要购买许可证才能使用QML编译器。

QtQuick编译器和新的JIT .qmlc有什么区别?

编译器将把QML转换为C++,然后将其编译到应用程序中。.qmlc文件是引擎生成的缓存,以避免再次解析/优化/等等相同的文件。然而,它们是一个缓存--如果它们不被使用,您将需要原始源。在2016年Qt贡献者峰会上,关于如何简化编译器并将其与缓存集成的问题进行了一些讨论,但到目前为止还没有。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43845523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档