Costas Styliano... 于 星期五, 04/10/2013 - 00:21 提交
分類:
安卓*電話平板電腦開發(fā)人員安卓*摘要:
如果您是一名 Android* 開發(fā)人員,而且對 Android 模擬器的性能不滿意,請閱讀本文。 我們經常聽到許多 Android 開發(fā)人員抱怨模擬器速度緩慢而且難以操作,但是事實并不應該如此! 如果您使用的是采用英特爾? 處理器且支持英特爾? 虛擬化技術并運行 Microsoft Windows* 或 Apple Mac OS* 的新電腦,那么您可以使用英特爾? 硬件加速執(zhí)行管理器(英特爾? HAXM)或 KVM for Linux* 來輕松地大幅提升 Android 模擬器的性能,進而加快 Android 應用的測試和調試速度。 本文詳細介紹了加速模擬器所需的步驟以及如何對其進行操作。 然后,我們將介紹如何使用 NDK 編譯 x86 原生代碼以及如何將包含 x86 原生庫的 APK 提交至 Google Play 商店。 英特爾 HAXM 還可用于加速 Tizen* 模擬器,但這不在本文的討論范圍之內。 如欲獲取更多信息,請訪問 tizen.org,了解 SDK 部分的內容。
目錄
1. 簡介2. 安裝2.1. 前提條件2.2. 在 Windows 上安裝2.3. 在 Linux 上安裝2.3.1. KVM 安裝2.4. 創(chuàng)建 AVD(Android* 虛擬設備)3. 公認的最佳方法3.1. 在 Eclipse 中使用模擬器測試應用3.2. 提交多種面向不同 ABI 的 APK 與提交 fat 二進制文件至 Google Play3.3. 編譯面向 x86 的 NDK3.3.1. 將 NDK 路徑添加至環(huán)境變量3.3.2. 使用 NDK 編譯3.3.3. 使用 NDK 編譯的其他方法1. 簡介
本文將為您安裝英特爾? 硬件加速執(zhí)行管理器(英特爾? HAXM)提供指導。英特爾? HAXM 是一款硬件輔助虛擬化引擎(管理程序),它可通過英特爾? 虛擬化技術(英特爾? VT)在 Windows* 上加快 Android* 開發(fā)速度。 此外,它還介紹了如何在 Linux* 上安裝硬件輔助 KVM,并介紹了如何使用公認的最佳方法進行原生編譯并將應用提交至面向 x86 的 Google Play 商店。
2. 安裝
2.1. 前提條件
您需要安裝 Android SDK。
您的電腦必須采用英特爾處理器并支持通過 BIOS 啟用的英特爾 VT-x、EM64T 和病毒防護技術 (XD) 功能。
2.2.在 Windows 上安裝
安裝 Android SDK 后,請打開 SDK 管理器。 在附加部分,您可以找到英特爾 HAXM。
勾選方框并點擊“Install packages…”按鈕,安裝軟件包后,狀態(tài)即會顯示為“Installed”,這是誤導,事實并非如此。 SDK 僅在您的設備上復制了英特爾 HAXM 可執(zhí)行文件,而是否安裝這些可執(zhí)行文件則取決于您。
如要安裝英特爾 HAXM 可執(zhí)行文件,請在您的硬盤中搜索 IntelHaxm.exe(在 Mac OS X 上請搜索 IntelHAXM.dmg)。 如果您設置為默認,該文件應該位于以下目錄:C:\Program Files\Android\android-sdk\extras\Intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe。
英特爾 HAXM 僅可與英特爾? 凌動? 處理器 x86 系統(tǒng)映像一起使用, 該映像可用于 Android 2.3.3 (API 10)、4.0.3 (API 15)、4.1.2 (API 16)、4.2.2 (API 17)。 通過 SDK 管理器,這些英特爾系統(tǒng)映像的安裝方法與基于 ARM 的映像的安裝方法完全相同。
點擊 IntelHaxm 可執(zhí)行文件時,將會顯示如下歡迎界面:
您可以調整分配給英特爾 HAXM 的 RAM 內存容量。 然后請點擊“Next”。 下一界面將確認內存分配。 如果符合您的要求,請點擊“Install”。
為了能夠安裝英特 HAXM,您需要在 BIOS 中啟用英特爾 VT-x,否則在安裝過程中將會出現(xiàn)類似以下的錯誤:
如果出現(xiàn)此錯誤,請進入將您的 BIOS 并啟用該特性。
第二種下載英特爾 HAXM 和 x86 模擬器系統(tǒng)映像的方法是直接訪問以下網站: http://software.intel.com/en-us/android,并通過此網站下載必要的組件。
2.3. 在 Linux 上安裝
提升面向 Linux 的 Android 模擬器的性能的步驟與 Windows 和 Mac OS X 不同,因為英特爾 HAXM 與 Linux 不兼容,所以您需要使用 KVM(基于內核的虛擬機)來替代。 以下是使用 Ubuntu* 12.04 的執(zhí)行步驟,可能會與其他 Linux 版本稍有不同。
在 Windows(和 Mac OS X)中操作時,首先要從 Android 開發(fā)人員站點下載 Android SDK。 您將會看到一個 ADT(Android 開發(fā)人員工具)包,其中包含 Eclipse* IDE 和 Android SDK。 下載 zip 文件并將其解壓縮至您的 Linux 設備。 確保選擇了適合您 Linux 版本的文件,32 位或 64 位。 您可以通過以下命令對此進行檢查:
file /sbin/init
在開始安裝 KVM 所需的軟件包之前,建議您確認已具有最新的庫,您可以通過輸入以下命令進行確認:
sudo apt-get update
2.3.1. KVM 安裝
如要安裝和運行 KVM(一款 x86 硬件之上面向 Linux 的完全虛擬化解決方案,即英特爾 VT),首先需要檢查您的 CPU 是否支持硬件虛擬化。您可以通過輸入以下命令來確認:
egrep –c ‘(vmx|svm)’ /proc/cpuinfo
如果結果為 0,則表明您的 CPU 不支持硬件虛擬化,而硬件虛擬化是運行 KVM 的必要條件。 如果結果為 1 或大于 1 ,則表明您可以安裝和運行 KVM,但仍需確認是否已經在 BIOS 中開啟這一功能(請參閱 2.2 節(jié))。
接下來,如果您尚未安裝 KVM,請進行安裝。 您可以通過輸入以下命令來檢查您的處理器是否支持 KVM:
kvm-ok
如果您已具有 KVM,則會看到:
"INFO: Your CPU supports KVM extensions
INFO: /dev/kvm exists
KVM acceleration can be used"
否則的話,如果您看到以下消息,需要進入 BIOS,然后開啟英特爾 VT:
"INFO: KVM is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard poweroff/poweron your system
KVM acceleration can NOT be used"
接下來需安裝 KVM 和所需的其他幾個軟件包。 為此,請輸入:
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
在下一窗口中,如果您不想變更配置,可以選擇“No configuration”:
然后,將您的用戶添加至 KVM 組和 libvirtd 組。 為此,請輸入:
sudo adduser your_user_name kvm
sudo adduser your_user_name libvirtd
完成安裝后,請重新登錄,以使變更生效。 您可以通過輸入以下命令對安裝進行測試:
sudo virsh -c qemu:///system list
現(xiàn)在您可以準備進入下一步操作了,即創(chuàng)建和運行 AVD(Android 虛擬機)。 這一步操作對于 Linux 和 Windows 是相同的。
2.4. 創(chuàng)建 AVD(Android* 虛擬機)
完成 SDK 和英特爾 HAXM(或 Linux 的 KVM)安裝后,您可以創(chuàng)建一個帶有硬件加速模擬的虛擬設備。 如要進行該操作,請進入 AVD 管理器并創(chuàng)建一個新設備。 確保將英特爾凌動 (x86) 選作 CPU/ABI。 只要安裝了英特爾 x86 系統(tǒng)映像,即會在下拉菜單中顯示選擇,以便在創(chuàng)建 AVD 時在 GPU 模擬上順暢地進行其他圖形切換。
點擊“New”并創(chuàng)建 x86 AVD。 確保選擇了一個由 x86 系統(tǒng)映像支持的 API,將 CPU/ABI 設置為 x86,而且已經啟用了 GPU (OpenGL ES*) 模擬。 完成該操作后,點擊“Create AVD”,創(chuàng)建 AVD。
可以通過依次點擊“Start”和“Launch”來啟動 x86 AVD。
如果您已成功安裝,在模擬器啟動時,將會出現(xiàn)一個對話框,顯示英特爾 HAXM 已在快速虛擬模式下運行。
如果您需要進一步確認您使用的是否為 x86 系統(tǒng)映像,可以查看模擬器內“About phone”中的詳細信息。
英特爾 HAXM 或 KVM 的性能取決于您的電腦、硬盤和內存等,但是會有 5 倍到 10 倍的大幅提升。 以下截圖顯示了 x86/HAXM 支持的 AVD 與基于 ARM 的 AVD 之間的詳細對比。 x86 AVD 會在 15 秒內進入鎖屏狀態(tài),而非英特爾 AVD 則會花費 40 秒鐘,這是一個明顯的差別。
[根據您的系統(tǒng)配置,英特爾 HAXM(或 KVM)的性能會有 5 到 10 倍的提升: 在性能檢測過程中涉及的軟件及其性能只有在英特爾微處理器的架構下方能得到優(yōu)化。 諸如 SYSmark* 和 MobileMark* 等測試均系基于特定計算機系統(tǒng)、組件、軟件、操作及功能。 上述任何要素的變動都有可能導致測試結果的變化。 請參考其他信息及性能測試(包括結合其他產品使用時的運行性能)以對目標產品進行全面評估。 配置: 在此案例中使用 Mac Book Pro 進行測試。 更多信息敬請登陸
http://www.intel.com/performance]
3. 公認的最佳方法
3.1. 在 Eclipse 中使用模擬器測試應用
無論是基于 NDK 的應用還是 Dalvik* 應用,您都可以使用英特爾 HAXM 來提高您用于測試的模擬器的性能。 如果您使用 Eclipse 進行開發(fā),在啟動模擬器時,可以按照以下這些簡單步驟確認您使用的是英特爾 HAXM。
首先,確認您已按照步驟 2 的描述創(chuàng)建了 AVD。如果已創(chuàng)建完成 AVD,請進入“Run As -> Run Config”,如下所示:
您應該會進入一個類似以下的頁面:
您可以勾選相應的方框,選擇您想要的 AVD。 創(chuàng)建 AVD 并進行相應配置后,可以選擇“Run As -> Android Application”,使用模擬器對項目進行編譯和調試。 這將自動開啟硬件加速 AVD。
AVD 啟動后,您應該可以看到應用的主界面(在屏幕解鎖后)。
3.2. 提交多種面向不同 ABI 的 APK 與提交 fat 二進制文件至 Google Play
以前,您需要為所開發(fā)的應用提交一個 fat 二進制文件,其中應該包含所有庫以及 NDK 文件,無法在架構間區(qū)分它們。 這就意味著用戶必須下載整個 APK,但是其中包含的一些文件與特定的架構并無關聯(lián),即 x86 用戶可能具有 ARM 代碼,反之亦然。 其缺陷在于如果您具有一個 fat 二進制文件,會強迫用戶下載大量數據,而這些數據可能并不適用于設備。 通常情況下,如果您的 APK 小于 10 到 20 MB,還是可以接受的。
英特爾/谷歌目前已經實施了 CPU 過濾機制,也就是說,您可以按照建議的版本代碼(如下所示)進行操作,針對各架構提交多個包含不同庫的 APK。
第一位數字代表 ABI(即 6 代表 x86);然后是您需要的 API 級別(即 11);屏幕大小(13);以及應用的版本編號: 3.1.0.
確保您至少具有一個 8 位的版本編號,并將最高的首位數分配給 x86 版本。 在上述示例中,您需要輸入 6 來代表 x86、2 代表 ARMv7 以及 1 代表 ARMv5TE。 這樣操作將會使得 x86 版本成為 x86 設備的首選,而 ARM 版本成為 ARM 設備的首選。
按照這些指南進行操作后,可以確定您的用戶會在自身的設備上實現(xiàn)最佳性能。 此外,還可以避免用戶由于代碼轉換問題嘗試在特定的設備上運行應用。
如欲獲取更多信息,請訪問: http://software.intel.com/en-us/articles/google-play-supports-cpu-architecture-filtering-for-multiple-apk。
3.3. 編譯面向 x86 的 NDK
這一章節(jié)將向您介紹如何針對 x86 編譯您應用的 NDK 部分。
為了能夠讓基于 NDK 的應用在 x86 AVD 上運行,您需要針對 x86 架構編譯 NDK 庫。 為此,請采取以下簡單的步驟:
打開一個命令提示符,并導航至您 NDK 文件所在的文件夾,如下所示:
確保您已經設置了環(huán)境變量路徑,以便從任意位置使用 ndk-build 腳本。
3.3.1. 將 NDK 路徑添加至環(huán)境變量
要想針對 NDK 設置環(huán)境變量。您需要右擊“Computer”,然后選擇“Properties”。 進入“Advanced system settings”并找到環(huán)境變量。 選擇“Path”并點擊“Edit”。 在“Variable Value”字符串的結尾,將路徑添加至 NDK 的根文件夾,其中包含 ndk-build.cmd 文件,如下圖所示:
3.3.2. 使用 NDK 編譯
將命令提示符導航至 NDK 文件夾后,執(zhí)行:
ndk-build APP_ABI:=all
這將針對各架構變量編譯 NDK 文件,即 ARMv5TE、ARMv7、x86 和 mips。
如要針對特定架構進行編譯,請將“all”替換為不同的架構。 例如:
ndk-build APP_ABI:=armeabi armeabi-v7a x86 mips
確保在 Eclipse 中刷新項目以獲取最新的設置,即 ndk-build 腳本創(chuàng)建的最新文件夾。 現(xiàn)在,在項目的文件夾庫中,應該可以看到四個文件夾,每個架構一個文件夾。
現(xiàn)在,您可以在 x86 AVD 中使用您的 NDK 應用了。
3.3.3. 使用 NDK 編譯的其他方法
針對所有架構(包括 x86 )編譯原生代碼還有另外的方法,即修改 Application.mk 文件,該文件位于 jni 文件夾中。 如果您沒有 Application.mk 文件,可以自己創(chuàng)建一個并添加以下指令:
APP_ABI:=armeabi armeabi-v7a x86 mips
這樣,在批處理文件時(即 ndk-build 腳本),將會針對所有可用架構編譯庫。
此外,為了簡化應用,可以僅輸入“all”,而不用列出所有架構:
APP_ABI:=all
如需更全面地了解編譯器優(yōu)化,請參閱
優(yōu)化注意事項。