Qt on Android:圖文詳解Hello World全過程

    這是系列文章中的一篇,閱讀本文前請先閱讀《Windows下Qt 5.2 for Android開發入門》,以便確保開發環境和作者一致。

    部分文章被轉發/轉載卻沒有註明出處,特此宣告:版權所有 foruok ,如需轉載敬請註明出處(http://blog.csdn.net/foruok)。

    我將從實踐出發,帶領大家一步一步完成在 Android 上的第一個 Qt 應用: Hello Qt on Android 。應用本身非常簡單(僅僅是在螢幕上顯示一個字串 “Hello Qt on Android” ),這也是每種程式語言的入門教程中 Hello World 程式的共性。

    下面我將和大家一起來探索使用 Qt Creator 3.0 建立、管理、編譯、部署 Qt on Android 應用的整個過程。每一個步驟都配以我精心挑選並編排整理的截圖,力求初學者可以按圖索驥、順暢地走下去,完成自己在 Android 平臺上的第一次觀光旅行。

建立工程

    開啟 Qt Creator ,點選文 “件(F)” 選單,在彈出的選單列表中選擇 “新建檔案或專案(N)” 。如下圖所示:

    如上操作後, Qt Creator 會彈出新建工程介面,讓我們選擇工程模板。如下面的所示:

    這裡我們選擇 “應用程式” 專案, “Qt Widgets Application” 模板。可以看到最右側的實時提示,支援的平臺中有 Android(藍線所示),看到這點,說明前面的開發環境搭建是正確的。
    點選 “選擇(C)…” 按鈕,新建工程嚮導會指引我們進入下一環節 “專案介紹和位置” 。參考下圖:

    我已經做了標識,編號為 1 的文字框,你可以填寫專案的名字,這裡是 “HelloQtAndroid” ;編號為 2 的 “瀏覽…” 按鈕允許你選擇工程的儲存路徑,我準備把工程放在 “D:\projects\blogs\qt” 目錄下面。請對照下圖檢查你的配置:

    點選 “下一步” 按鈕,跟隨嚮導進入構建套件選擇(“Kit Selection”)環節。
    我選擇了兩個套件,”Android for armeabi (GCC 4.7, Qt 5.2.0)” 和 “Desktop Qt 5.2.0 MinGW 32bit”,分別對應下圖中的標號為 1 和 2 的區域。請對照下圖檢查你的配置。

    點選 “下一步” 按鈕,跟隨嚮導進入 “類資訊” 配置環節。下圖是預設的介面:

    上圖中標號為 1 的下拉框,可以選擇待建立的 Widget 的基類,預設是 QMainWindow ,我這裡選擇 QWidget。標號為 2 的核取方塊,如果選中則會生成一個 .ui 檔案,可以通過 Qt SDK 中的介面設計師來編輯介面,為了簡單直接,我們去掉了選中,不使用 .ui 檔案,全部使用程式碼完成介面構建。
    請參考下圖檢查你的配置:

    點選 “下一步” 按鈕,跟隨嚮導進入 “專案管理” 環節。在這裡你可以選擇是否將工程加入版本控制系統(如 svn 之類),還可以看到即將新增到我們的 “Hello Qt on Android” 工程中的檔案。如下圖所示:

    終於看到 “完成(F)” 按鈕了,趕緊點選它!看下圖,我們將進入日後使用 Qt Creator 這個近乎完美的 IDE 程式設計時使用頻度最高、相依相伴時間最久的介面。

    如上圖所示,這就是我們日後天天要面對、不斷打交道的介面。我會選擇幾個最常用的功能簡明扼要的介紹它的用法。
    左邊欄,標號為 1 的標籤,是 “編輯” 標籤,選中它,會進入編輯模式,就是上面的樣子。
    標號為 2 的標籤,是 “專案” 標籤,選中它,會開啟專案選項配置介面。該介面功能豐富到有些繁雜,後面我們會多花些時間來一一介紹我們的 “Hello Qt on Android” 工程必須要用的選項。
    標號為 3 的是 “構建版本” 按鈕, 點選它,會彈出一個快捷介面,允許我們快速選擇不同構建版本(如 Android 的 Release 構建, Desktop 的 Debug 構建等等)。點選 “專案” 標籤所進入的配置介面中也可以完成構建版本選擇。
    標號為 4 的是 “執行” 按鈕,點選它, Qt Creator 會執行編譯、連結、打包等等工作,直到目標程式執行起來或者出錯停止。
    “執行” 按鈕下面依次是 “開始除錯” 、 “構建專案” 按鈕,滑鼠懸停在它們上面就可以看到提示,其用途不言自明。
    標號為 5 的那一橫排標籤,是 Qt Creator 的輸出視窗,點選任一標籤,都會向上伸展出一個視窗顯示與標籤名字對應的資訊。
    問題標籤對應的視窗顯示構建問題,找到問題後雙擊就會跳轉到對應的程式碼行或編譯輸出視窗(部分連結錯誤)。
    編譯輸出標籤對應的視窗會把編譯、連結、打包、部署過程中的資訊都顯示出來,這是我們從外面觀察 Qt Creator 工作過程的極佳途徑,善加使用必將獲益良多。
    應用程式輸出標籤對應的視窗會顯示應用程式使用標準輸出列印的資訊,APK 執行後, logcat 的日誌也會顯示在這裡。
    其它標籤不再細說,開發過程中使用幾次就熟悉了。
    標號為 6 的區域,就是程式碼編輯區。
    標號為 7 的區域,是側邊欄、專案管理區域,這裡允許開發者以專案、類檢視、大綱、檔案系統、型別層次、開啟文件等等方式來管理專案。

專案選項

    介紹完了我們的好夥伴——專案管理與程式碼編輯介面,接下來我們繼續完成 “Hello Qt on Android” 的專案配置。點選前面介紹的標號為 2 的專案標籤,會看到下面的專案選項配置介面:

    我們的新建工程,預設選中了 “Desktop Qt 5.2.0 MinGW 32bit” 這個套件。請注意上圖左下藍線標出的按鈕,前面提到,它是構建版本選擇按鈕,現在顯示的是電腦圖示配Debug字樣。

    點選標號為 1 的區域中的構建按鈕(藍色圓圈所在),切換到 “Android for armeabi” 套件,進行構建相關的配置。如下圖:

    構建配置選項繁多,對於我們的第一個應用,只要關注途中標識出的 1 和 2 兩個功能怎麼使用即可。
    標號為 1 的按鈕,點選可以切換到”執行”選項配置,馬上就能看到。
    標號為 2 的組合框,可以選擇構建版本(一般是 Debug / Release 兩個)。它完成和左邊欄下藍色圓圈標識的構建版本按鈕一樣的功能。我們這裡選擇 “Release” 構建。
    注意藍色圓圈標識區域,隨著我們選中 “Android for armeabi” 套件和 “Release” 構建,它從電腦圖示變成了安卓小機器人配 “Release” 字樣的按鈕。
好啦,現在讓我們點選標號為 1 的”執行”按鈕,進行執行選項配置。對目前這個專案來說,執行配置遠比構建配置複雜,請擦亮眼睛,用心體會。

    切換到執行配置,介面如上圖所示。先來看部署配置,點選圖中標號為 1 的 “詳情” 按鈕,開啟部署配置詳情介面:

    希望你沒被嚇到,我在上圖中作了 9 處標識,比之前的編輯介面( 7 個標識)還多。讓我們化繁為簡,一個一個來看。
    標號為 1 的下拉框,可以選擇應用針對的目標 SDK 版本,這裡預設是 android-17。我得說( 先請大神 BogDan Vatra 見諒 ) Qt Creator 的這種顯示不夠完美,如果滑鼠懸停在下拉框上時懸浮窗提示一下會更好。
    我這裡簡要說明一下 Qt Creator 中的這個配置選項。實際上它對應 Android APK 的主配置檔案 AndroidManifest.xml 中的  android:targetSdkVersion 配置項。這個配置項允許你指定你的應用針對的Android API Level ,而弔詭的是,它使用 sdkVersion 來作為標籤,容易引起混淆。實際上,現在我們可以簡單地把 sdkVersion 和 API Level 理解為同一個東西,細微差別以後再說。
    為了讓大家對 Android API Level 有個概念,我擷取了 Google Android 線上手冊(請訪問頁面” http://developer.android.com/guide/topics/manifest/uses-sdk-element.html” )中的一幅圖放在下面:

    標號為 2 的”對包簽名”核取方塊,選中時 Qt Creator 會自動對 APK 進行簽名。而一旦你選中了它,就需要提供一個金鑰檔案( keystore )供 Qt Creator 使用。 如果沒有,則點選標號為 3 的 “Create” 按鈕, Qt Creator 會幫你建立一個;如果有,可以點選 “Browse” 選擇。
    標號為 4 的單選框,是 Qt 庫佈署策略中的一個,用 Ministro 服務安裝 Qt 。我們推薦使用這個,具體原因會在” Qt 庫的部署策略”一節詳細介紹。另外一個可用的策略是把 Qt 庫打包到你的 APK 中。
    標號為 5 的核取方塊,選中時 Qt Creator 會在打包完成後開啟包所在的目錄,方便開發者訪問生成的 APK 。
    標號為 6 的浮現選,對應日誌輸出選項。
    標號為 7 的按鈕, “Create AndroidManifest.xml” ,如按鈕名所示,幫助你建立並配置 APK 的主配置檔案 AndroidManifest.xml 。如果你不點這個按鈕呢, Qt Creator 會使用預設的選項幫你建立一個預設的配置檔案。建議建立並配置它,否則你的 APK 包名什麼的都會讓你覺得怪怪的有點不舒服。
    標號為 8 的按鈕,”Install Ministro from APK”,則是 Qt Creator 提供給我們的一個貼心服務,允許我們把下載到本地的 Ministro APK 安裝到 Android 裝置上。順便說下,我在完成 “Hello Qt on Android” 專案時就遇到了無法安裝 Ministro 服務的問題,我的 XT882 電信定製版手機,根本訪問不到 Google Play。 
    標號為 9 的區域有兩個按鈕,允許我們新增依賴庫。現在的工程用不到,以後再說。
    啊,天,終於說完了,你睡著了嘛,醒醒,我們繼續往下看。

建立金鑰檔案和證書

    讓我們回到簽名選項(別忘了,標號 2 ),選中它,然後點選標號為 3 的 “Create” 按鈕,建立金鑰檔案和證書。你會看到下面的介面(空空如也,沒錯,是初始介面嘛):

    如上圖所示,有很多選項,照著填寫就行,錯了會有提示。我配置好後截了圖,在下面,請參照著檢查你的配置:

    點選”儲存”按鈕,會彈出檔案選擇對話方塊,讓你選擇金鑰檔案的儲存位置,你也可以修改它的名字。下面是我的配置截圖,供參考:

    點選——,哦,等下,先記住你剛才起的檔名和儲存的位置(在市場中更新 APK 必須要使用和之前釋出版本相同的簽名),後面還要用到,然後再點選”儲存”按鈕,我們會回到執行配置介面。如下圖所示:

    可以對照初始的執行配置截圖,我把修改過的選項用藍色橫線標註出來了。

建立 AndroidManifest.xml

    接下來是我們的另一個重頭戲,建立 AndroidManifest.xml 檔案。
   好啦,下面是建立嚮導,允許你選擇儲存位置,先別動它,使用預設值(工程目錄下的 android 子資料夾,回頭你可以到這個位置觀光一下,AndroidManifest.xml 還有你應用的圖示都放在這裡)就行。

    直接點選”完成(F)”按鈕,你會看到 Qt Creator 提供的供你編輯 AndroidManifest.xml 檔案的圖形化介面(當然你也可以在 Qt Creator 中檢視 XML 並手動修改它)。看圖:

    這是個中等複雜度的介面,我做了 6 處標識,下面一一說明。
    標號為 1 的編輯框,填寫你的包名。如你所見,預設值是 org.qtproject.example ,看起來不那麼正式。
    標號為 2 的微調按鈕,允許你更改應用的版本號。
    標號為 3 的區域,調整最低 API Level 和 目標 API Level。
    標號為 4 的區域,讓你設定你的 APK 圖示,有高、中、低三個尺寸(一般對應 72×72 、 48×48 、 32×32)。
    標號為 5 的下拉組合框,列出了所有支援的許可權,你可以考慮你的 APK 需要什麼許可權,選中它,點選標號為 6 的 “Add” 按鈕就可以在 AndroidManifest.xml 中新增一個許可權。當然你也可以點選 “Remove” 按鈕來取笑一個不必要的許可權。
    關於 APK 的許可權,這裡不細說,會在”AndroidManifest.xml 介紹”一節中詳細說明。對 HelloQtOnAndroid ,我保持 Qt Creator 設定的預設許可權。
    下面是我的配置截圖,改動的部分用藍線標註出來了,請參照檢查你的配置:

    Qt Creator 提供的圖形化 Android Manifest 編輯介面,只支援了主要幾個選項,如果你想細細調整體驗掌控全域性的感覺,請點選上圖藍色方框處的”XML Source”按鈕,手動編輯 xml 檔案。如下圖所示:

    和編輯 C 程式碼一樣,可以在標號為 1 的編輯區來編輯 XML 檔案。
    謝天謝地,一百里路我們走了九十里啦,接下來就會驚嚇、驚喜不斷。

新增程式碼

    雖然你已經準備好迎接驚喜,我們還是得按捺一下心情,把程式碼稍稍修改幾行。回到編輯介面,確保你左側專案管理視窗選中”專案”方式,展開原始檔夾,雙擊其下的 widget.cpp ,在右側編輯區新增一行程式碼:

new QLabel("Hello Qt on Android !", this);

    另外還要包含 QLabel 這個標頭檔案。
    好了,看圖:

執行程式

    好啦好啦,九十九里路啦,咫尺之遙,請點選左邊欄的”執行”按鈕(你是否還記得), Qt Creator 會讓你選擇目標裝置(如果環境配置正確,連線了手機或者建立了AVD),建議直接真機執行(你沒有 Android 手機嗎?),如下圖所示:

    看見了嗎?選中我的老古董手機,摩托羅拉 XT882 ,Android 版本是 2.3.6 ,點選”確定”按鈕,活動一下,靜待奇蹟出現。
    哦,嚇我一跳,我看見了這個介面:

    忘了嗎,我們前面在執行配置中勾選了”Open package location after build”選項。如果你要在市場中釋出你的應用,請注意選擇(圖中藍框所示)簽過名的版本。
    等一下,現在該看手機了。我看到了這個介面:

    你是否還記得,我們選擇的 Qt 庫佈署策略——”使用Ministro 服務安裝 Qt 庫”?
    現在要操作手機,摸下”確定”按鈕,會嘗試安裝 Ministro 服務。驚嚇來了,我看到手機螢幕上華麗麗地閃過一個 Toast 提示“安裝 Ministro 失敗”,然後就是下面的圖:

    看樣子它是到我手機上預設的安智市場中去找 Ministro 了,沒找到。按返回鍵吧,哦,天,停在了黑屏介面,沒有任何反應……好吧,請猛擊手機的返回鍵或者小房子(主頁)鍵。哦,桌面出來了,謝謝。至於為什麼 Ministro 安裝失敗會出現黑屏,請閱讀後續章節。
    現在我們需要回頭來調整執行配置,換一個 Qt 庫佈署策略——”在 APK 中捆綁 Qt 庫”。
    再次執行,再次看到 “package location” 資料夾介面……,好吧,看手機,驚喜終於來了:

    現在,終於可以停下來喘口氣了,我們的第一個 Qt on Android 的應用 “HelloQtOnAndroid”終於在真機上跑起來了。
    如果你是第一次使用 Qt on Android,跟隨我的指南走下來,是什麼感覺?反正我第一次把 “Hello Qt On Android ” 跑通時,還是非常振奮的,激動了大半天。畢竟, Qt 作為在移動網際網路時代,是唯一可以與 Android 、 iOS 並提的跨平臺應用開發框架……;畢竟,作為 C/C 程式猿,我們可以為 Windows 桌面、 Linux 桌面 、 Android 手機/平板、iOS、MAC OS X 、 Tizen 、 Meego 、 Windows Mobile 、 Embedded Linux 、 Symbian等等平臺開發軟體而不需要切換開發框架和工具,是多麼令人舒心、自豪的事兒;畢竟……
   
    好了,第一次 Qt on Android 應用的旅程到此為此。敬請期待後續文章。

    特此宣告:版權所有 foruok ,如需轉載敬請註明出處(http://blog.csdn.net/foruok)。

    我翻譯的大神 BogDan Vatra 的 Qt on Android 系列文章:

    我的關於 Qt on Android 的系列文章: