首頁>技術>

作為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系統映像不支援

細節

其重要性可能需要一些上下文,尤其是如果您僅使用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 Limited的合作使這成為可能。

Ref: https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html?utm_source=androidweekly.io&utm_medium=website

19
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 聊聊PHP虛擬機器