作者:Costas Styliano
摘要:
如果您是一名 Android* 開發人員,而且對 Android 模擬器的效能不滿意,請閱讀本文。 我們經常聽到許多 Android 開發人員抱怨模擬器速度緩慢而且難以操作,但是事實並不應該如此! 如果您使用的是採用英特爾 處理器且支援英特爾 虛擬化技術並運行 Microsoft Windows* 或 Apple Mac OS* 的新電腦,那麼您可以使用英特爾 硬體加速執行管理器(英特爾 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. 建立 AVD(Android* 虛擬設備)
3. 公認的最佳方法
3.1. 在 Eclipse 中使用模擬器測試應用
3.2. 提交多種面向不同 ABI 的 APK 與提交 fat 二進位檔案至 Google Play
3.3. 編譯面向 x86 的 NDK
3.3.1. 將 NDK 路徑添加至環境變數
3.3.2. 使用 NDK 編譯
3.3.3. 使用 NDK 編譯的其他方法
1. 簡介
本文將為您安裝英特爾 硬體加速執行管理器(英特爾 HAXM)提供指導。英特爾 HAXM 是一款硬體輔助虛擬化引擎(管理程式),它可通過英特爾 虛擬化技術(英特爾 VT)在 Windows* 上加快 Android* 開發速度。 此外,它還介紹了如何在 Linux* 上安裝硬體輔助 KVM,並介紹了如何使用公認的最佳方法進行原生編譯並將應用提交至面向 x86 的 Google Play 商店。
2. 安裝2.1. 前提條件
- 您需要安裝 Android SDK。
- 您的電腦必須採用英特爾處理器並支援通過 BIOS 啟用的英特爾 VT-x、EM64T 和病毒防護技術 (XD) 功能。
2.2.在 Windows 上安裝
安裝 Android SDK 後,請開啟 SDK 管理器。 在附加部分,您可以找到英特爾 HAXM。
勾選方框並點擊“Install packages…”按鈕,安裝軟體包後,狀態即會顯示為“Installed”,這是誤導,事實並非如此。 SDK 僅在您的裝置上複製了英特爾 HAXM 可執行檔,而是否安裝這些可執行檔則取決於您。
如要安裝英特爾 HAXM 可執行檔,請在您的硬碟中搜尋 IntelHaxm.exe(在 Mac OS X 上請搜尋 IntelHAXM.dmg)。 如果您設定為預設,該檔案應該位於以下目錄:C:\Program Files\Android\android-sdk\extras\Intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe。
英特爾 HAXM 僅可與英特爾 淩動? 處理器 x86 系統映像一起使用, 該映像可用於 Android 2.3.3 (API 10)、4.0.3 (API 15)、4.1.2 (API 16)、4.2.2 (API 17)。 通過 SDK 管理器,這些英特爾系統映像的安裝方法與基於 ARM 的映像的安裝方法完全相同。
點擊 IntelHaxm 可執行檔時,將會顯示如下歡迎介面:
您可以調整分配給英特爾 HAXM 的 RAM 記憶體容量。 然後請點擊“Next”。 下一介面將確認記憶體配置。 如果符合您的要求,請點擊“Install”。
為了能夠安裝英特 HAXM,您需要在 BIOS 中啟用英特爾 VT-x,否則在安裝過程中將會出現類似以下的錯誤:
如果出現此錯誤,請進入將您的 BIOS 並啟用該特性。
第二種下載英特爾 HAXM 和 x86 模擬器系統映像的方法是直接存取以下網站: http://software.intel.com/en-us/android,並通過此網站下載必要的組件。
2.3. 在 Linux 上安裝
提升面向 Linux 的 Android 模擬器的效能的步驟與 Windows 和 Mac OS X 不同,因為英特爾 HAXM 與 Linux 不相容,所以您需要使用 KVM(基於核心的虛擬機器)來替代。 以下是使用 Ubuntu* 12.04 的執行步驟,可能會與其他 Linux 版本稍有不同。
在 Windows(和 Mac OS X)中操作時,首先要從 Android 開發人員網站下載 Android SDK。 您將會看到一個 ADT(Android 開發人員工具)包,其中包含 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 節)。
接下來,如果您尚未安裝 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
現在您可以準備進入下一步操作了,即建立和運行 AVD(Android 虛擬機器)。 這一步操作對於 Linux 和 Windows 是相同的。
2.4. 建立 AVD(Android* 虛擬機器)
完成 SDK 和英特爾 HAXM(或 Linux 的 KVM)安裝後,您可以建立一個帶有硬體加速類比的虛擬設備。 如要進行該操作,請進入 AVD 管理器並建立一個新裝置。 確保將英特爾淩動 (x86) 選作 CPU/ABI。 只要安裝了英特爾 x86 系統映像,即會在下拉式功能表中顯示選擇,以便在建立 AVD 時在 GPU 類比上順暢地進行其他圖形切換。
點擊“New”並建立 x86 AVD。 確保選擇了一個由 x86 系統映像支援的 API,將 CPU/ABI 設定為 x86,而且已經啟用了 GPU (OpenGL ES*) 類比。 完成該操作後,點擊“Create AVD”,建立 AVD。
可以通過依次點擊“Start”和“Launch”來啟動 x86 AVD。
如果您已成功安裝,在模擬器啟動時,將會出現一個對話方塊,顯示英特爾 HAXM 已在快速音效模擬模式下運行。
如果您需要進一步確認您使用的是否為 x86 系統映像,可以查看模擬器內“About phone”中的詳細資料。
英特爾 HAXM 或 KVM 的效能取決於您的電腦、硬碟和記憶體等,但是會有 5 倍到 10 倍的大幅提升。 以下顯示了 x86/HAXM 支援的 AVD 與基於 ARM 的 AVD 之間的詳細對比。 x86 AVD 會在 15 秒內進入鎖屏狀態,而非英特爾 AVD 則會花費 40 秒鐘,這是一個明顯的差別。
[根據您的系統配置,英特爾 HAXM(或 KVM)的效能會有 5 到 10 倍的提升: 在效能檢測過程中涉及的軟體及其效能只有在英特爾微處理器的架構下方能得到最佳化。 諸如 SYSmark* 和 MobileMark* 等測試均系基於特定電腦系統、組件、軟體、操作及功能。 上述任何要素的變動都有可能導致測試結果的變化。 請參考其他資訊及效能測試(包括結合其他產品使用時的運行效能)以對目標產品進行全面評估。 配置: 在此案例中使用 Mac Book Pro 進行測試。 更多資訊敬請登陸http://www.intel.com/performance]
3. 公認的最佳方法3.1. 在 Eclipse 中使用模擬器測試應用
無論是基於 NDK 的應用還是 Dalvik* 應用,您都可以使用英特爾 HAXM 來提高您用於測試的模擬器的效能。 如果您使用 Eclipse 進行開發,在啟動模擬器時,可以按照以下這些簡單步驟確認您使用的是英特爾 HAXM。
首先,確認您已按照步驟 2 的描述建立了 AVD。如果已建立完成 AVD,請進入“Run As -> Run Config”,如下所示:
您應該會進入一個類似以下的頁面:
您可以勾選相應的方框,選擇您想要的 AVD。 建立 AVD 並進行相應配置後,可以選擇“Run As -> Android Application”,使用模擬器對項目進行編譯和調試。 這將自動開啟硬體加速 AVD。
AVD 啟動後,您應該可以看到應用的主介面(在螢幕解鎖後)。
3.2. 提交多種面向不同 ABI 的 APK 與提交 fat 二進位檔案至 Google Play
以前,您需要為所開發的應用提交一個 fat 二進位檔案,其中應該包含所有庫以及 NDK 檔案,無法在架構間區分它們。 這就意味著使用者必須下載整個 APK,但是其中包含的一些檔案與特定的架構並無關聯,即 x86 使用者可能具有 ARM 代碼,反之亦然。 其缺陷在於如果您具有一個 fat 二進位檔案,會強迫使用者下載大量資料,而這些資料可能並不適用於裝置。 通常情況下,如果您的 APK 小於 10 到 20 MB,還是可以接受的。
英特爾/Google目前已經實施了 CPU 過濾機制,也就是說,您可以按照建議的版本代碼(如下所示)進行操作,針對各架構提交多個包含不同庫的 APK。
第一位元字代表 ABI(即 6 代表 x86);然後是您需要的 API 層級(即 11);螢幕大小(13);以及應用的版本編號: 3.1.0.
確保您至少具有一個 8 位的版本編號,並將最高的首位元分配給 x86 版本。 在上述樣本中,您需要輸入 6 來代表 x86、2 代表 ARMv7 以及 1 代表 ARMv5TE。 這樣操作將會使得 x86 版本成為 x86 裝置的首選,而 ARM 版本成為 ARM 裝置的首選。
按照這些指南進行操作後,可以確定您的使用者會在自身的裝置上實現最佳效能。 此外,還可以避免使用者由於代碼轉換問題嘗試在特定的裝置上運行應用。
如欲擷取更多資訊,請訪問: http://software.intel.com/en-us/articles/google-play-supports-cpu-architecture-filtering-for-multiple-apk。
3.3. 編譯面向 x86 的 NDK
這一章節將向您介紹如何針對 x86 編譯您應用的 NDK 部分。
為了能夠讓基於 NDK 的應用在 x86 AVD 上運行,您需要針對 x86 架構編譯 NDK 庫。 為此,請採取以下簡單的步驟:
開啟一個命令提示字元,並導航至您 NDK 檔案所在的檔案夾,如下所示:
確保您已經設定了環境變數路徑,以便從任意位置使用 ndk-build 指令碼。
3.3.1. 將 NDK 路徑添加至環境變數
要想針對 NDK 設定環境變數。您需要右擊“Computer”,然後選擇“Properties”。 進入“Advanced system settings”並找到環境變數。 選擇“Path”並點擊“Edit”。 在“Variable Value”字串的結尾,將路徑添加至 NDK 的根資料夾,其中包含 ndk-build.cmd 檔案,如所示:
3.3.2. 使用 NDK 編譯
將命令提示字元導航至 NDK 檔案夾後,執行:
ndk-build APP_ABI:=all
這將針對各架構變數編譯 NDK 檔案,即 ARMv5TE、ARMv7、x86 和 mips。
如要針對特定架構進行編譯,請將“all”替換為不同的架構。 例如:
ndk-build APP_ABI:=armeabi armeabi-v7a x86 mips
確保在 Eclipse 中重新整理項目以擷取最新的設定,即 ndk-build 指令碼建立的最新檔案夾。 現在,在項目的檔案夾庫中,應該可以看到四個檔案夾,每個架構一個檔案夾。
現在,您可以在 x86 AVD 中使用您的 NDK 應用了。
3.3.3. 使用 NDK 編譯的其他方法
針對所有架構(包括 x86 )編譯原生代碼還有另外的方法,即修改 Application.mk 檔案,該檔案位於 jni 檔案夾中。 如果您沒有 Application.mk 檔案,可以自己建立一個並添加以下指令:
APP_ABI:=armeabi armeabi-v7a x86 mips
這樣,在批次檔時(即 ndk-build 指令碼),將會針對所有可用架構編譯庫。
此外,為了簡化應用,可以僅輸入“all”,而不用列出所有架構:
APP_ABI:=all