作為 Android 11 開發者預覽版的一部分,Google 已經發布了 Android 11 系統映象,它們能夠執行 ARM 二進位制檔案,效能得到了顯著提升。 以前,依賴於 ARM 庫而無法構建 x86 變體應用程式的開發人員要麼必須使用具有完全 ARM 模擬的系統映像,這比在基於 x86 的計算機上執行的 x86 系統映像要慢得多,要麼求助於物理裝置。新的 Android 11 系統映象能夠在不影響整個系統的情況下將 ARM 指令翻譯成 x86 指令。這允許執行 ARM 二進位制檔案進行測試,而不需要完全的 ARM 模擬的效能開銷。
詳情
這樣做的意義可能需要一些上下文,特別是如果你只使用 Kotlin 或 Java 程式語言構建應用程式的話。不像 Kotlin 或 Java 程式語言,它們都在 Android Runtime (ART)上執行,Android 應用程式中的任何 C++ 都會直接編譯成機器指令。這意味著需要根據目標裝置的體系結構以不同的方式進行編譯。行動電話往往有 ARM 處理器; 因此,許多 C++ 的依賴庫,你可能會新增到你的應用程式,如相機條形碼掃描器庫,只相容 ARM 處理器。如果你使用基於 x86 處理器的計算機進行開發,這將是一個問題,因為它會阻止你執行應用程式。
以前,如果你想繞過這個限制,在 x86 機器上執行一個為 ARM 構建的應用程式,你必須使用一個完全模擬 ARM 的模擬器系統映像。由於將整個系統價值的 ARM 指令轉換為 x86 的開銷,在 x86 主機上執行時,具有完全 ARM 模擬的模擬系統映像往往比基於 x86 的系統映像執行得慢得多。此外,具有完整 ARM 模擬的模擬系統映像無法利用 x86 處理器提供的硬體加速和 CPU 虛擬化技術。
新的與 ARM 相容的 Android 11 系統映象可以像往常一樣利用虛擬化技術本地執行 x86 系統映象。當一個應用程式的程式需要一個 ARM 二進位制檔案時,這個二進位制檔案會在該程式中獨佔地被翻譯成 x86。這允許程式的其餘部分繼續在 x86 中執行,包括 Android Runtime (ART)和其他效能關鍵庫,如 libGLES 和 libvulkan。此外,轉換器避免了昂貴的記憶體訪問插裝和相關效能的影響,因為它避免了執行低階別的特定於硬體的庫。這些新的模擬器系統映像既可以在本地使用,也可以在您自己的持續整合基礎設施上使用。由於與 ARM 有限公司的合作,這是可能的。
展望未來
如果你之前因為缺乏對 ARM 的支援而選擇了物理裝置,那麼試試 Android 11 系統映象,它們現在可以和 Android 11 開發者預覽版一起使用。 這些系統映像可以通過 SDK 管理器或 Android 虛擬裝置管理器在 Android Studio 中下載。
一旦你讓你的應用在模擬器上執行,可以考慮把它改造成適用於 Chrome OS的應用。 還支援在 x86 膝上型電腦上執行為 ARM 開發的 Android 應用程式。 構建 Chrome 作業系統提供了一個大螢幕裝置的實質性生態系統,使你的應用程式能夠觸及全球更多的使用者。
這項技術將使更多的開發人員能夠使用 Android 模擬器進行測試。 儘管如此,Google 仍然建議開發者同時釋出 x86 和 ARM ABI 的應用程式變種,以達到最佳的物理裝置效能,並儘可能多地接觸到使用者。展望未來,Google 計劃將該技術推廣到更廣泛的各種 API 級別,並確保它支援測試物理裝置將要使用的所有用例。鑑於這是一項新技術,請通過 Google 官方的問題跟蹤器反饋任何問題。
注意,ARM to x86 翻譯技術使 ARM 有限公司擁有的智慧財產權得以實施。 它只能在 Google api 和 Play Store 系統映像上使用,並且只能用於 x86 桌上型電腦、膝上型電腦、客戶本地伺服器和客戶購買的基於雲的環境中的應用程式開發和除錯。該技術不應用於提供商業託管服務。
作者:Michael Hazard 原文地址:android-developers.googleblog.com/2020/03/run… 199元學習大禮包:點選領取
原文地址:androidweekly.io/news-androi…
版權宣告:禁止一切形式的轉載-禁止商用-禁止衍生
公眾號:Android開發技術週刊