2017-05-08 129 views
5

我對qtquickcompiler,JIT qml緩存以及qt 5.8(分別爲5.9)的開源版本中有哪些(以及哪些不可用)有點困惑。qtquickcompiler和新的JIT .qmlc緩存之間的區別?

基本上,我想保護我的.qml和.js文件在發佈版本中不可讀。我開始了一個新的示例QtQuick項目,無需編輯任何代碼。我遵循這些instructions並在.pro文件中添加了CONFIG + = qtquickcompiler,但它沒有效果。

我的.qml文件內置於.exe(在Windows中),但如果查看可執行文件,例如用記事本++,我仍然可以看到.qml文件的源代碼。

另一方面,如果我不使用QRC作爲我的.qml文件,則會在運行時爲每個.qml創建.qmlc文件。這些文件不容易讀取。但是我沒有找到一種方法來只使用.qmlc文件,而不在我的版本中發佈.qml文件(我不認爲它是這樣的)。

回到我的問題:有沒有辦法保護我的.qml和.js文件與開源版本的QT? qtquickcompiler和新的JIT .qmlc有什麼區別?

回答

1

不,它將會是,但他們暫時放棄了這些計劃,並將其替換爲緩存。

我不認爲你將能夠在另一臺計算機上重新使用.qmlc文件,因爲IIRC他們不是體系結構便攜式。

將來,應該可以提前將.qml預編譯爲.qmlc,並將它們捆綁到應用程序二進制文件中。

如果您的文件位於文件系統上,則無法保護它們免受讀取,reverse engineeredtampered with

使用編譯器,將QML代碼轉換爲C++代碼,然後將其編譯爲本機二進制文件。另外,上次我檢查了,如果你使用編譯器,它是一個「或/或」的情況,如果你使用編譯的qml,你只能使用編譯的qml,所以不要和普通的qml文件混合。這也是提前,並且需要商業許可證。

相比而言,qml緩存即時(可能會在未來提前),不需要商業許可證,並且不具備阻止您使用常規qml文件的限制。我沒有意識到實現細節,但它肯定不是將qml代碼轉換爲C++,然後編譯,因爲它發生在客戶端,並且不需要安裝Qt甚至不需要安裝C++編譯器。它聽起來不像字節碼,因爲IIRC它不是平臺之間的二進制兼容,它更像是緩存qml文件處理結果,以避免每次都這樣做。

正如this answer所述,通過一些額外的工作,可能實現一個體面的保護措施,例如加密的QML文件或二進制資源,但我仍然沒有深入研究。最後,如果你爲低限的qrc文件設置了壓縮,它會在可執行二進制文件中混淆QML代碼,但即使如此,它也是普通的zip壓縮,所以如果你的代碼真的值得竊取,它不會真的阻止,只是讓它稍微微不足道。

+0

請注意,將GammaRay指向任何Qt應用程序即可轉儲資源系統的所有內容(壓縮或不壓縮)就足夠了。 – peppe

+0

更多好消息... – dtech

1

有沒有辦法保護我的.qml和.js文件與開源版本的qt?

還沒有。在(包括)5.8版本中,您需要購買許可證才能使用QML編譯器。

qtquickcompiler和新的JIT .qmlc有什麼不同?

編譯器會將QML轉換爲C++,然後將其編譯到您的應用程序中。 .qmlc文件是由引擎生成的緩存,用於避免再次解析/優化/重新分類相同的文件。然而,他們是一個緩存 - 你需要原始來源以防他們不習慣。在2016年Qt撰稿人峯會上,有關於如何簡化和集成編譯器與緩存的討論,但至今沒有任何內容存在。

1

回答我的問題:有沒有辦法保護我的.qml和.js文件 與開源版本的qt?

是的,當然, 看看我的回答: https://stackoverflow.com/a/40861056 您可以使用encripted資源文件,解密的執行時間...... 我這樣做,在我所有的項目... 是不是一件小事,但工作正常。