開發環境:
- OS,Microsoft Windows [Version 10.0.17134.523]
- Qt,5.11.1
- Qt Creator,4.6.2
- JDK,1.8.0_181
- Android SDK,26.1.1
- NDK,18.1
起因
心血來潮,突然想產生用Qt編寫Android程序,根據網上的教程,在Tools-Options-Devices-Android配置好JDK、Android SDK、NDK后:
均提示配置成功,但無法像教程一樣,自動生成Android Kit,新建工程時,無法選擇Android:
網上查找到的教程都是使用Qt Creator 3作為例子,於是猜測是Qt Creator版本的問題。
之后Google上找到一篇文章,有人在Qt Creator 4.6.2上安裝成功了:
https://developernote.com/2018/05/setting-up-qt-creator-4-6-1-for-android-development-on-windows-10/
於是下載Qt Creator 4.6.2源碼,分析下原因。
分析
初步分析后,定位到在保存設置的時候,會自動創建Android Kit:
進入AndroidConfigurations::updateAutomaticKitList()查看,找到關鍵代碼:
自動生成的Android Kit使用的是自動檢測的編譯工具鏈,如果自動檢測的編譯工具鏈中找不到API匹配的編譯工具鏈,則不會創建對應ABI的Android Kit。
那么可推測,成功的人應該能在NDK中自動檢測到編譯工具鏈,那么為什么我這里檢測不到?回到剛剛保存配置的函數,發現有注冊新編譯工具鏈的函數,猜測該函數用於自動檢測NDK中的編譯工具鏈:
進入AndroidConfigurations::registerNewToolChains()查看,發現的是這樣:
繼續分析AndroidToolChainFactory::autodetectToolChainsForNdk(),發現只會捕獲GCC編譯器。
查看NDK的更新公告
https://developer.android.google.cn/ndk/downloads/revision_history
發現在r18b版本后,移除了GCC編譯器,使用Clang編譯器代替:
查看自己的NDK版本,為18.1,那么應該是這個問題了。並且網上的教程都是在2018年前發布的,版本低於r18,所有能夠配置成功。不知道新版本的Qt Creator是否修復了這個bug。
總結
在NDK版本高於r18b時,移除了GCC編譯器工具,使用了Clang編譯器代替。Qt Creator 4.6.2版本只會檢測GCC編譯器,當找不到編譯器后 ,Android Kit就不會自動創建。