於 Intel® 架構加速 Android* 模擬器

摘要:

如果您是 Android* 開發者,且對 Android 模擬器的效能不太滿意,那麼請務必閱讀本篇文章。Android 開發者總是對模擬器的效能怨聲載道,抱怨速度緩慢、使用起來痛苦不堪,實在不該如此。現在,只要您的電腦正常更新、具備內建 Intel® 虛擬化技術的 Intel® 處理器、可執行 Microsoft Windows* 或 Apple Mac OS* 系統,即可使用 Intel® 硬體加速執行管理器 (Intel® HAXM),輕鬆將 Android 模擬器的速度加快至一定程度,縮短 Android 應用程式測試與除錯所需的時間,若是 Linux 系統則可使用 KVM。本文將詳細說明模擬器加速所需的各項步驟及使用方法,然後再進一步解說如何使用原生開發套件 (NDK) 編譯 x86 原生碼,以及如何將包含 x86 原生資料庫的 Android 應用程序包 (APK) 正確上傳至 Google Play 商店。Intel HAXM 也可以用於加速 Tizen* 模擬器,但不在本文探討範圍內,詳細資訊請見 tizen.org 網站的軟體開發套件 (SDK) 部分。

1. 簡介

本文提供 Intel® 硬體加速執行管理器 (Intel® HAXM) 的安裝教學。Intel® HAXM 是用於輔助硬體的虛擬引擎 (超管理器),採用 Intel® 虛擬化技術 (Intel® VT),可促進 Android* 於 Windows* 環境的發展效率。文中也會詳述如何在 Linux* 系統中設定輔助硬體的 KVM,並提供於 x86 架構本機編譯及上傳應用程式至 Google Play 商店的最佳方案。

2. 安裝

2.1. 事前準備

  • 需先安裝 Android 軟體開發套件 (SDK)。請至http://software.intel.com/en-us/android下載。

  • 電腦的 Intel 處理器需支援 Intel VT-x 及延伸記憶體 64 技術 (EM64T),且需在 BIOS 中啟用病毒防護技術 (Execute Disable Bit) 功能。

2.2. 於 Windows 安裝

Android SDK 完裝完成後,請開啟 SDK 管理器。您可以在其他 (Extras) 區塊中找到 Intel HAXM。

勾選方塊並點選「安裝套件…」,一旦套件安裝完成,狀態便會顯示為「已安裝」,這很容易讓人誤會,因為其實安裝尚未完成,SDK 僅是將 Intel HAXM 執行檔複製到電腦內,是否要安裝取決於個人。

因此,若要安裝 HAXM 執行檔,請於硬碟內搜尋 IntelHaxm.exe (Mac OS X 則請搜尋 IntelHAXM.dmg)。若未曾變更初始設定,執行檔應該位於

C:\Program Files\Android\android-sdk\extras\Intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe.

Intel HAXM 僅支援 Intel® Atom™ 處理器 x86 系統映像,Android 2.3.3 (API 10)、4.0.3 (API 15)、4.1.2 (API 16)、4.2.2 (API 17) 皆可使用。您可以透過 SDK 管理器安裝以上的 Intel 系統映像,安裝方法與 ARM 架構映像完全相同。

點選 IntelHaxm 執行檔後,便會看見下圖的歡迎畫面

可以在此調整欲分配給 Intel HAXM 的 RAM 記憶體使用額度,完成後請點選下一步。下一視窗會再次確定記憶體的分配額。若沒有問題,請點選安裝

為成功安裝 Intel HAXM,請在 BIOS 中啟用 Intel VT-x,否則會於安裝過程中出現如下的錯誤通知:

若看到此錯誤通知,請至 BIOS 啟用功能。

第二種方法是直接至網站下載 Intel HAXM 和 x86 模擬器系統映像,請至 http://software.intel.com/en-us/android 下載所有所需組件。

2.3. 於 Linux 安裝

由於 Intel HAXM 與 Linux 並不相容,步驟較 Windows 或 Mac OS X 來得複雜,需使用 KVM (核心虛擬系統) 來加速 Android 模擬器。以下步驟於 Ubuntu* 12.04 下執行,可能會與其他 Linux 配置有些差異。

如同在 Windows 和 Mac OS X 環境下,首先需至 Android 開發者網站下載 Android SDK。您可以找到同時包含 Eclipse* 整合開發環境 (IDE) 及 Android SDK 的 ADT (Android 開發者套件) 懶人包。下載 zip 檔案並解壓縮至 Linux 機體。請確定下載的是與 Linux 配置相容的版本:32 或 64 位元。下列指令可協助您輕鬆檢查是否為正確版本:

file /sbin/init

開始安裝 KVM 所需套件前,建議檢查是否有最新的儲存庫,如欲檢查可鍵入:

sudo apt-get update

2.3.1. 安裝 KVM

對 Linux 而言,安裝並執行 KVM 是解決 x86 硬體 (即 Intel VT) 上虛擬化問題的最完整解決方案。若要安裝並執行 KVM,首先需檢查 CPU 是否支援硬體虛擬化,如欲檢查可鍵入:

egrep –c ‘(vmx|svm)’ /proc/cpuinfo

若結果為 0,則代表 CPU 不支援硬體虛擬化,無法執行 KVM。若結果為 1 以上,就能直接開始執行,但仍請確定已於 BIOS 啟用虛擬化 (詳見第 2.2 節)。

接下來,除非 KVM 已預先安裝,否則必須安裝 KVM。如欲檢查處理器是否支援 KVM,可鍵入:

kvm-ok

若 KVM 已安裝,會看見以下訊息:

"INFO: Your CPU supports KVM extensions
INFO: /dev/kvm exists
KVM acceleration can be used"

若尚未安裝 KVM 則會看見以下訊息,請至 BIOS 啟用 Intel 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 及其他所需套件,請鍵入:

udo 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

若安裝成功,便可以進入下一階段:創建並執行 Android 模擬器 AVD (Android Virtual Device)。不論 Windows 或 Linux,步驟皆相同。

2.4. 創建 Android 模擬器 AVD (Android* Virtual Device)

SDK 及 Intel HAXM (或 Linux 上的 KVM) 安裝完成後,即可建立具備硬體加速功能的模擬器。請開啟 AVD 管理員,建立一個新裝置。請選擇Intel Atom (x86)作為 CPU/ABI。系統必須先安裝 Intel x86 系統映像檔,下拉式選單才會看到此選項,若要使圖形運作更流暢,建立 AVD 時請開啟 GPU 仿真。

點選New(新增),建立 x86 AVD。請確定 x86 系統映像支援您所選擇的應用程式介面,CPU/ABI 設定為 x86,且已啟用 GPU (OpenGL ES*) 仿真。完成後,點選Create AVD,建立 AVD。

點選 Start (開始),再點選 Launch (啟動) 即可執行 x86 AVD。

若安裝成功,模擬器開始執行時,畫面會出現一個對話框方塊,顯示 Intel HAXM 正以快速虛擬模式執行中。

若仍不確定是否正在使用 x86 系統映像,您可以隨時至模擬器選項中的「About phone」(關於手機) 檢視詳細資料。

Intel HAXM 或 KVM 的效能增益端視電腦、驅動程式和記憶體等因素而定,不過應會介於 5 倍至 10 倍間。以下螢幕截圖比較啟用 x86/HAXM 的 AVD 與基於 ARM 的 AVD,x86 AVD 自啟動至鎖定螢幕只需 15 秒,然而非 Intel AVD 需花上 40 秒,差異甚大。

[Intel HAXM 或 KVM 的效能增益應會高達 5 倍至 10 倍,端視個人的電腦配置而定:效能測試中使用的軟體及工作負載可能僅在 Intel 微處理器上進行效能最佳化。效能測試,例如 SYSmark* 及 MobileMark*,係使用特定電腦系統、組件、軟體、作業系統及功能進行量測。變更其中任何要素皆可能導致結果變更。您必須查閱其他資訊及效能測試以協助您對預計採購項目進行完整的評估,包括該產品與其他產品結合時的效能。配置:本測試使用 Mac Book Pro。

如需詳細資訊,請參閱http://www.intel.com/performance]

3. 最佳方案

3.1. 於 Eclipse以模擬器測試應用程式

無論是測試 Dalvik* 應用程式或是以原生開發套件 (NDK) 為基礎的應用程式,皆可以使用 Intel HAXM 來加速模擬器。如果您是在 Eclipse 環境下進行開發,可以採取以下幾個簡單步驟來確認模擬器啟動是否使用 Intel HAXM。

先請確認已依照步驟 2 建立 AVD。若已預先建立 AVD,請至 Run As (執行為)→ Run Config (執行配置),如下所示:

可看到以下頁面:

可在此勾選您欲選擇的 AVD。AVD 已建立且配置設定完成後,選擇 Run As (執行為)→Android Application (Android 應用程式),開始使用模擬器編譯專案並除錯。硬體加速 AVD 會自動開始運作。

AVD 開始運作後,便可看見應用程式的主畫面 (螢幕解鎖後)。

3.2. 為不同的應用二進制介面 (ABI) 上傳多個 Android 應用程序包 (APK) 以及上傳 fat binary 至 Google Play 商店

過去開發者必須為了所開發的應用程式上傳 fat binary,裡頭包含了所有的資料庫、NDK 檔案,無法區分架構。這表示使用者必須下載全部的 APK 檔案,包括與特定架構相關的檔案,也就是 x86 的使用者會同時下載到 ARM 程式碼,反之亦然。缺點是,如果 fat binary 真的很大,使用者就被迫下載大量自身裝置用不著的資料。通常 APK 只要保持在 10~20 MB 以下皆能接受。

Intel/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 上執行,必須編譯 NDK 資料庫,以供 x86 架構使用。請依照下列步驟執行:

開啟命令提示字元,尋找 NDK 檔案的資料夾,如下所示:

請確認已設定好環境變數路徑,以便隨時使用 NDK 構建腳本。

3.3.1. 新增 NDK 路徑至環境變數

欲為 NDK 設定環境變數,請右鍵點選電腦,點選內容,進入進階系統設定,找到環境變數,選擇Path,點選編輯。於「變數值」的最尾端加上 NDK 根目錄資料夾路徑,此即內含 ndk-build.cmd 檔案的資料夾,如下圖所示:

3.3.2. 以原生開發套件 (NDK) 編譯

以命令提示字元找到 NDK 資料夾後,請執行:

ndk-build APP_ABI:=all

這會將NDK 檔案編譯給各個可用架構,亦即 f ARMv5TE、ARMv7、x86 和 mips。

若要為某個特定架構編譯,請將‘all’ 以不同架構取代,例如:

ndk-build APP_ABI:=armeabi armeabi-v7ax86 mips

請確認已在Eclispe 中重新整理專案,才能讀取最新設定,也就是 NDK 構建腳本所建的最新資料夾。現在可於專案中的 libs 資料夾內找到四個資料夾,分別對應不同架構。

x86 AVD 可以和 NDK 應用程式一同使用了。

3.3.3. 以原生開發套件 (NDK) 編譯的第二種方法

為所有架構 (包括 x86) 編譯原生碼的第二種方法為:修改 jni 資料夾中的Application.mk檔案。若沒有 Application.mk 檔,可以自行建立一個,並加上以下指令:

APP_ABI:=armeabi armeabi-v7a x86 mips

如此一來,當執行批次檔,也就是 NDK 構建腳本時,它便會將所有資料庫編譯為所有架構皆可使用。

更簡單一點,不用列出所有架構,直接以 ‘all’ 取代即可:

APP_ABI:=all


来源:<https://software.intel.com/sites/landingpage/tw/speeding-up-the-android-emulator-on-intel-architecture.php>



来自为知笔记(Wiz)



更多相关文章

  1. 使用Docker编译Android系统内核
  2. Android(安卓)selector状态选择器的使用详解
  3. Android(安卓)SQLite框架greenDAO的使用
  4. KJFrameForAndroid
  5. Android自定义属性时TypedArray的使用方法
  6. Android菜单的使用Menu
  7. Android高手进阶教程之----Android(安卓)中自定义属性(attr.xml,
  8. Android(安卓)的 SQLLite数据库
  9. Parcalable接口使用(android传递结构体数据的方法)

随机推荐

  1. Android(安卓)选择控件
  2. Android高级编程PDF
  3. 【Android入门】新手入门布局源码及零基
  4. android的TextView跑马灯效果属性
  5. Android(安卓)项目优化(七):阿里巴巴Android
  6. Android7.0中文API -- Spinner
  7. Android(安卓)项目优化(七):阿里巴巴Android
  8. 浅析Android手机卫士之手机实现短信指令
  9. 解决Gradle DSL method not found: ‘and
  10. Android(安卓)设置横屏模式显示