簡體   English   中英

在 Android 上部署 Qt 應用程序真的很慢嗎?

[英]Deploying Qt Application on Android is really slow?

您可能知道在 Android 上部署 Qt 應用程序的三種方法:

  1. 使用 Ministro 服務安裝 Qt
  2. 將本地 Qt 庫部署到臨時目錄
  3. 在 APK 中捆綁 Qt 庫

第一種方法大約需要 30 秒,它還需要安裝一個額外的 apk 。 部長 第二個對我來說大約需要 1 分鍾! 每當我嘗試運行程序時,Qt creator 都會將 Qt 庫推送到設備上。 第三個使 .apk 文件非常大,對我來說又需要大約 1 分鍾。
我認為在這種情況下使用 Qt 開發 Android 應用程序是不合理的。 有沒有辦法使部署過程更快?

自 OP 以來幾乎整整一年,事情根本沒有改變。 對於在 5 秒內編譯的項目,部署 7 MB APK 需要一分半鍾的時間。 我回答的原因不是問題得到解決,而是提供替代解決方案。

我已經實現了一個“解決方法”,由兩個協同工作的應用程序組成 - 一個在 PC 上,一個在設備上 - 我創建這個主要是為了遠程編譯文件,但結果證明它也是一個更快的部署替代方案. 在主機上創建一個應用程序,在單獨的進程中啟動編譯,完成后通過網絡將產品文件復制到設備進行部署。 除了遠程編譯,這將部署時間減少到 10 秒,我可以接受。

(還不是一個完整且經過全面測試的答案,但如果我發現更多信息,我會更新......)

選項 1:將更改的庫復制到有根設備

新構建通常只會產生一個更改的文件:您的libAppName.so ,即包含應用程序代碼的本機庫。 至少在 2015 年,可以簡單地將這個庫復制到 Android 設備上,而無需重新構建 APK 包。 這僅適用於有 root 權限的 Android 設備(請注意,默認情況下所有模擬器都是有 root 權限的)。

一步一步, 根據這篇博客文章,並更新了我在我的設備上找到的路徑:

  1. 在構建主機系統上運行交叉編譯步驟。 所以只需在 Qt Creator 中make或等效。

  2. 將生成的libAppName.so復制到有根的 Android 設備:

     adb push build/path/libAppName.so /data/app/com.example.appname/lib/arm
  3. 重新啟動 Android 設備上的應用程序。

如果可行,您甚至可以將其集成為 Qt Creator 中的自定義部署步驟。

由於缺乏有根設備,我還沒有測試這種技術。 但它應該仍然有效,因為 (1) 有根的 Android 設備仍然允許覆蓋所有文件,並且 (2) 仍然可以在沒有代碼簽名的情況下安裝 APK 的調試版本,因此在沒有代碼簽名的情況下覆蓋 APK 中的庫應該是可能的。

選項 2:桌面目標作為解決方法

我偶然發現 Qt 的多平台特性可以用來避免 80% 的時間緩慢的 Android 部署。 你只是設置了另一個編譯目標; 在 Qt Creator 下,您將在“項目→構建和運行”下添加一個目標,使用“設備類型:桌面”工具包。

現在,當您想要測試任何非 Android 特定的內容時,請改為在桌面版本中進行測試。 構建和啟動只需要幾秒鍾。

通過使用用於融合應用程序開發的框架進一步支持這種方法,以便在桌面和移動版本中都可以使用相同的用戶界面。 KDE KirigamiMauiKit是基於 Qt 構建的兩個用於此目的的庫。 入門文檔有點少,但對於 Kirigami,我為示例應用程序的設置編寫了大量 README

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM