天天看點

在 Android 模拟器上運作 ARM 應用

随着 Android 11 開發者預覽版的釋出,我們同時也推出了 Android 11 系統映像。新的系統映像在執行 ARM 二進制檔案方面取得了顯著的性能提升。此前,依賴 ARM 庫且無法建構 x86 版本應用的開發者隻能使用完整的 ARM 模拟系統映像 (其速度遠低于在 x86 裝置上運作 x86 系統映像) 或者實體機。Android 11 系統映像能夠在不影響整個系統的前提下,直接将 ARM 指令轉換成 x86 指令。開發者無需搭建高負載的 ARM 環境即可執行 ARM 二進制檔案并進行測試。

在 Android 模拟器上運作 ARM 應用

全新的 Android 11 (Google API) x86 系統映像支援 ARM 應用二進制接口 (ABI),較舊版本的 Android Oreo 系統映像并不提供該支援

技術細節

我們可能需要結合具體情景來說明這項新技術的重要性,尤其是如果您隻使用 Kotlin 或 Java 程式設計語言來建構應用的話。Kotlin 和 Java 程式設計語言均在 ART (Android 運作時) 上執行,但 C++ 則與它們不同,Android 應用中的所有 C++ 指令會直接編譯為機器指令,也就是說,目标裝置的平台架構決定着 C++ 的編譯方法。移動手機一般搭載 ARM 處理器,是以,您為應用添加的許多 C++ 依賴項 (例如攝像頭條形碼掃描庫) 僅與 ARM 處理器相容。在這種情形下,如果您使用基于 x86 處理器的裝置進行開發工作,便會遇到應用無法運作的問題。

過去,開發者需要通過模拟器鏡系統映像搭建一個完整的 ARM 環境,才能繞過這個限制并在 x86 機器上執行 ARM 應用。但是,把整個系統的 ARM 指令都轉換成 x86 指令會造成過高的性能負荷,是以與基于 x86 的系統映像相比,完整的 ARM 系統映像在 x86 主控端上的運作速度會慢很多,而且它還無法使用 x86 處理器提供的硬體加速和 CPU 虛拟化技術。

全新的 Android 11 系統映像與 ARM 相容,它不僅允許整個系統在本機運作 x86 指令,而且還可以照常使用虛拟化技術。當應用的某個程序需要使用 ARM 二進制代碼時,代碼僅會在該程序内被轉換成 x86 指令,其餘程序将繼續在 x86 環境内執行,包括 Android 運作時 (ART) 以及其它性能關鍵庫,例如 libGLES 和 libvulkan。除此以外,指令轉換器也不會執行低層的硬體特定庫,進而避免高成本的記憶體通路檢測和相應的性能影響。在 ARM 公司的協作下,新的模拟器系統映像在本地和持續內建架構内均可運作。

下一步

如果您之前由于缺乏高性能的 ARM 支援,去選擇了實體機而非模拟器,不妨嘗試一下 Android 11 系統映像。此映像檔案目前已随 Android 11 開發者預覽版一同開放下載下傳。您可通過 SDK Manager 或者 Android Virtual Device Manager 将最新版本的系統映像下載下傳至 Android Studio。

在 Android 模拟器上運作 ARM 應用

使用 Android Virtual Device Manager 建立一個運作 Android 11 的 AVD

一旦應用在模拟器中成功運作後,請考慮适配 Chrome OS。Chrome OS 同樣也支援在 x86 筆記本上執行 ARM 版本的 Android 應用。通過建構适用于 Chrome OS 的應用,您可以挖掘大螢幕裝置生态圈所蘊含的海量機遇,讓全球更多的使用者認識您的應用。

這項技術可以幫助更多開發者在 Android 模拟器上進行測試。我們建議開發者同時建構 x86 和 ARM ABI 兩個版本的應用,使其在實體裝置上擁有最佳的運作性能并吸引盡可能多的使用者。接下來,我們計劃在多個 API 級别普及這項技術,同時確定它能和實體機一樣支援所有測試用例。歡迎大家向我們送出回報,幫助我們進一步優化這項新技術。

請注意: ARM - x86 指令轉換技術可用于執行 ARM 公司旗下的産品。該技術隻可通過 Google API 和 Play Store 系統映像擷取,且僅用于在 x86 桌上型電腦、筆記本、用戶端本地伺服器或自購的雲環境上進行應用開發和調試。該技術不可在商用托管服務下使用。

Java 是 Oracle 和/或其附屬公司的注冊商标。