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