閱讀94 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Anbox:容器中的 Android

概述

Anbox 使用 Linux 命名空間(user、pid、uts、net、mount、ipc)來在容器中運行完整的 Android 係統,並在任何基於 GNU Linux 平台上提供 Android 應用。

容器內的 Android 無法直接訪問任何硬件。所有硬件訪問都通過主機上的 anbox 守護進程進行。我們重用基於 QEMU 的模擬器實現的 Android 中的 GL、ES 加速渲染。容器內的 Android 係統使用不同的管道與主機係統通信,並通過它發送所有硬件訪問命令。

有關更多詳細信息,請參考下文檔:

Anbox 目前適合桌麵使用,但也用在移動操作係統上,如 Ubuntu Touch、Sailfish OS 或 Lune OS。然而,由於 Android 程序的映射目前隻針對桌麵環境,因此還需要額外的工作來支持其他的用戶界麵。

Android 運行時環境帶有一個基於 Android 開源項目鏡像的最小自定義 Android 係統。所使用的鏡像目前基於 Android 7.1.1。

安裝

目前,安裝過程包括一些添加額外組件到係統的步驟。包括:

  • 啟用用於 binder 和 ashmen 的非發行的樹外內核模塊。
  • 使用 udev 規則為 /dev/binder 和 /dev/ashmem 設置正確權限。
  • 能夠啟動 Anbox 會話管理器作為用戶會話的一個啟動任務。

為了使這個過程盡可能簡單,我們將必要的步驟綁定在一個 snap(見 https://snapcraft.io ) 中,稱之為 “anbox-installer”。這個安裝程序會執行所有必要的步驟。你可以在所有支持 snap 的係統運行下麵的命令安裝它。


  1. $ snap install --classic anbox-installer

另外你可以通過下麵的命令下載安裝腳本。


  1. $ wget https://raw.githubusercontent.com/anbox/anbox-installer/master/installer.sh -O anbox-installer

請注意,我們還不支持除所有 Linux 發行版。請查看下麵的章節了解支持的發行版。

運行下麵的命令進行安裝。


  1. $ anbox-installer

它會引導你完成安裝過程。

注意: Anbox 目前處於 pre-alpha 開發狀態。不要指望它具有生產環境你需要的所有功能。你肯定會遇到錯誤和崩潰。如果你遇到了,請不要猶豫並報告它們!

注意: Anbox snap 目前 完全沒有約束,因此它隻能從邊緣渠道獲取。正確的約束是我們想要在未來實現的,但由於 Anbox 的性質和複雜性,這不是一個簡單的任務。

已支持的 Linux 發行版

目前我們官方支持下麵的 Linux 發行版:

  • Ubuntu 16.04 (xenial)

未測試但可能支持的:

  • Ubuntu 14.04 (trusty)
  • Ubuntu 16.10 (yakkety)
  • Ubuntu 17.04 (zesty)

安裝並運行 Android 程序

從源碼構建

要構建 Anbox 運行時不需要特別了解什麼,我們使用 cmake 作為構建係統。你的主機係統中應已有下麵這些構建依賴:

  • libdbus
  • google-mock
  • google-test
  • libboost
  • libboost-filesystem
  • libboost-log
  • libboost-iostreams
  • libboost-program-options
  • libboost-system
  • libboost-test
  • libboost-thread
  • libcap
  • libdbus-cpp
  • mesa (libegl1, libgles2)
  • glib-2.0
  • libsdl2
  • libprotobuf
  • protobuf-compiler
  • lxc

在 Ubuntu 係統中你可以用下麵的命令安裝所有的依賴:


  1. $ sudo apt install build-essential cmake cmake-data debhelper dbus \
    google-mock libboost-dev libboost-filesystem-dev libboost-log-dev \
    libboost-iostreams-dev libboost-program-options-dev libboost-system-dev \
    libboost-test-dev libboost-thread-dev libcap-dev libdbus-1-dev \
    libdbus-cpp-dev libegl1-mesa-dev libgles2-mesa-dev libglib2.0-dev \
    libglm-dev libgtest-dev liblxc1 libproperties-cpp-dev libprotobuf-dev \
    libsdl2-dev lxc-dev pkg-config protobuf-compiler

之後用下麵的命令構建 Anbox:


  1. $ mkdir build
  2. $ cd build
  3. $ cmake ..
  4. $ make

一個簡單的命令會將必要的二進製安裝到你的係統中,如下。


  1. $ make install

如果你想要構建 anbox snap,你可以按照下麵的步驟:


  1. $ mkdir android-images
  2. $ cp /path/to/android.img android-images/android.img
  3. $ snapcraft

結果會有一個 .snap 文件,你可以在支持 snap 的係統上安裝。


  1. $ snap install --dangerous --devmode anbox_1_amd64.snap

運行 Anbox

要從本地構建運行 Anbox ,你需要了解更多一點。請參考“運行時步驟”文檔。

文檔

在項目源代碼的子目錄下,你可以找到額外的關於 Anbox 的文檔。

有興趣可以看下:

報告 bug

如果你發現了一個 Anbox 問題,請提交 bug

原文發布時間為:2017-04-21

本文來自雲棲社區合作夥伴“Linux中國”

最後更新:2017-05-22 14:32:30

  上一篇:go  阿裏感悟(九)-如何才能晉升
  下一篇:go  免費產品體驗碼有了,禮品還遠嗎?