今天為了測試使用 Qt Creator 3.0.0 開發的純 C 工程,利用了 Windows 下 Qt 5.2 for Android 開發入門裡建立的 HelloAndroid 工程,想把純 C 工程生成的 so 庫加到 HelloAndroid 工程中。結果加入進去了,但不會自動拷貝到生成目錄打包進
APK 。
研究了一個小時,大體搞明白了 Qt Creator 生成 APK 的流程。
首先 Qt Creator 會編譯時會生成一個 json 檔案,就在工程目錄下,我的是 android-libhelloAndroid.so-deployment-settings.json 。內容如下:
{
"description": "This file is generated by qmake to be read by androiddeployqt and should not be modified by hand.",
"qt": "C:\\Qt\\Qt5.2.0\\5.2.0\\android_armv7",
"sdk": "E:/android-sdk-windows",
"ndk": "E:\\Android\\android-ndk-r8d",
"toolchain-prefix": "arm-linux-androideabi",
"tool-prefix": "arm-linux-androideabi",
"toolchain-version": "4.7",
"ndk-host": "windows",
"target-architecture": "armeabi-v7a",
"android-extra-libs": "libhttpclient_test.so",
"application-binary": "E:/qt/helloAndroid/libhelloAndroid.so"
}
上面檔案裡的 application-binary ,實際上是一個 so 檔案,在我這裡是 libhelloAndroid.so 。
要說明的是,編譯階段只會生成 so 檔案,什麼事情不幹。當你執行時,選擇了 Android 裝置,Qt Creator 才開始執行一系列動作來生成 APK ,並 push 到裝置上執行。大概步驟是這樣的:
- 建立構建目錄
- 拷貝 application-binary
- 拷貝 Qt 自己的庫和依賴的庫,如 libgnustl_shared.so 等。
- 根據模板拷貝 java 檔案、生成 AndroidManifest.xml 、資原始檔等等
- 呼叫 ant 編譯、打包、簽名、對齊
- 連線裝置,install APK 並執行
這些動作都是由一個名為 androiddeployqt.exe 的程式完成的,感興趣的可以看它的原始碼,Qt SDK 裡有,同時也可以在 Qt Creator 的輸出 panel 中看到 這個部署程式的輸出資訊。更詳細的過程可以參考 Qt 官方文件 Deploying Applications
to Android Devices,那裡面說得很詳細。
說說我遇到的問題。我在 pro 檔案裡使用 LIBS = -lxxx 加入了我的 C 庫,編譯通過,可是 androiddeployqt 沒有拷貝 libxxx.so ,APK 執行時找不到依賴的 libxxx.so 直接掛掉了。這個問題的解決,只要新增一個額外的依賴庫就可以了,Qt Creator 會傳遞引數給 androiddeployqt ,後者就會正確打包。
在 Qt Creator 中,選則 Projects > Run > Deploy
configurations > Details
,可以看到下面的介面:
看圖片上畫藍線、籃圈的地方,就是這裡,新增你依賴的庫即可。
好啦,到這裡我們可以在純粹 C 的 IDE 當中進行 Android 的開發了,帶介面的、不帶介面的,都可以完成。不過貌似 service 還不行,這個我還沒有研究。
写评论
很抱歉,必須登入網站才能發佈留言。