【发布时间】:2017-03-04 15:25:09
【问题描述】:
我想创建一个 QML 自定义控件库,并提供给我的客户。同时,我不希望我的客户通过查看 QML 源代码来“逆向工程”我的控件。
避免这种情况的最佳选择是什么?理想的情况是我将我的控件作为编译库提供,他们可以将其导入自己的项目中。
我的目标平台是 iOS 和 Android。
【问题讨论】:
标签: qt qml qtquick2 qtquickcontrols
我想创建一个 QML 自定义控件库,并提供给我的客户。同时,我不希望我的客户通过查看 QML 源代码来“逆向工程”我的控件。
避免这种情况的最佳选择是什么?理想的情况是我将我的控件作为编译库提供,他们可以将其导入自己的项目中。
我的目标平台是 iOS 和 Android。
【问题讨论】:
标签: qt qml qtquick2 qtquickcontrols
如何为自定义 QML 控件创建包?这些控件 请勿以源代码形式打包,防止逆向工程。
问题暗示作者使用 QML 技术本身(不是 C++)实现了 QML 自定义控件。否则,这已经是QML C++ PlugIn,并以编译库或其他形式的本机代码的形式提供(我们可以只注册 QML 类型并从可执行文件中提供必要的导入)。
要实现QML PlugIn(仅使用 QML 源代码),我们应该创建特殊类型的项目。将其组织为嵌套的 subdir project 很方便,以使其与应用程序的其余部分一起工作。请注意,一个插件项目可能包含许多新的 QML 类型。
为了使 QML 代码不可见,我们现在可以使用在某些 Qt 许可下可用的Qt Quick compiler 对其进行编译。
【讨论】:
当为静态链接构建时,从 5.7 开始,Qt 会将 QML 模块构建为共享库,将 qml 文件作为资源嵌入,而不是从文件系统中使用它们。所以这将是一种方法,使用静态 Qt 构建并将您的自定义控件构建为模块。
here 已经概述了另一种可能的方法,尽管要复杂得多。
【讨论】:
QML 文件可以包含在 QRC profile 中,并在带有 "qrc:/" 的代码中使用。
在构建时,它们会被包含在目标二进制文件中,从而保护它们免受杂乱无章的观察。
【讨论】: