摘要:當應用的某個進程需要使用 ARM 二進制代碼時,代碼僅會在該進程內被轉換成 x86 指令,其餘進程將繼續在 x86 環境內執行,包括 Android 運行時 (ART) 以及其它性能關鍵庫,例如 libGLES 和 libvulkan。全新的 Android 11 系統映像 與 ARM 兼容,它不僅允許整個系統在本機運行 x86 指令,而且還可以照常使用虛擬化技術。

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

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

  • Android 11 系統映像 https://developer.android.google.cn/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

技術細節

我們可能需要結合具體情景來說明這項新技術的重要性,尤其是如果您只使用 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 公司的協作下,新的模擬器系統映像在本地和持續集成框架內均可運行。

  • Android 11 系統映像

    https://developer.android.google.cn/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

  • libGLES

    https://developer.android.google.cn/ndk/guides/stable_apis#graphics

  • libvulkan

    https://developer.android.google.cn/ndk/guides/graphics/design-notes

下一步

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

使用 Android Virtual Device Manager 創建一個運行 Android 11 的 AVD

  • Android 11 系統映像

    https://developer.android.google.cn/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

  • Android Virtual Device Manager 

    https://developer.android.google.cn/studio/run/managing-avds#createavd

一旦應用在模擬器中成功運行後,請考慮 適配 Chrome OS 。Chrome OS 同樣也支持在 x86 筆記本上執行 ARM 版本的 Android 應用。通過構建適用於 Chrome OS 的應用,您可以挖掘大屏幕設備生態圈所蘊含的海量機遇,讓全球更多的用戶認識您的應用。

  • 適配 Chrome OS

    https://developer.android.google.cn/topic/arc

這項技術可以幫助更多開發者在 Android 模擬器上進行測試。我們建議開發者同時構建 x86 和 ARM ABI 兩個版本的應用,使其在物理設備上擁有最佳的運行性能並吸引儘可能多的用戶。接下來,我們計劃在多個 API 級別普及這項技術,同時確保它能和實體機一樣支持所有測試用例。歡迎大家向我們 提交反饋 ,幫助我們進一步優化這項新技術。

  • 提交反饋

    https://issuetracker.google.com/issues?q=componentid:192727%20status:open

請注意: ARM - x86 指令轉換技術可用於執行 ARM 公司旗下的產品。該技術只可通過 Google API 和 Play Store 系統映像獲取,且僅用於在 x86 臺式機、筆記本、客戶端本地服務器或自購的雲環境上進行應用開發和調試。該技術不可在商用託管服務下使用。

Java 是 Oracle 和/或其附屬公司的註冊商標。

點擊屏末    |   進一步瞭解 Android 11 系統映像

  想了解更多 Android 內容?

  • 在公衆號首頁發送關鍵詞 "Android",獲取相關歷史技術文章;

  • 在公衆號首頁發送關鍵詞 "ADS",獲取開發者峯會演講中文字幕視頻;

  • 還有更多疑惑?歡迎點擊菜單 "聯繫我們" 反饋您在開發過程中遇到的問題。

推薦閱讀

相關文章