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 的係統運行下麵的命令安裝它。
$ snap install --classic anbox-installer
另外你可以通過下麵的命令下載安裝腳本。
$ wget https://raw.githubusercontent.com/anbox/anbox-installer/master/installer.sh -O anbox-installer
請注意,我們還不支持除所有 Linux 發行版。請查看下麵的章節了解支持的發行版。
運行下麵的命令進行安裝。
$ 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 係統中你可以用下麵的命令安裝所有的依賴:
$ 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:
$ mkdir build
$ cd build
$ cmake ..
$ make
一個簡單的命令會將必要的二進製安裝到你的係統中,如下。
$ make install
如果你想要構建 anbox snap,你可以按照下麵的步驟:
$ mkdir android-images
$ cp /path/to/android.img android-images/android.img
$ snapcraft
結果會有一個 .snap 文件,你可以在支持 snap 的係統上安裝。
$ snap install --dangerous --devmode anbox_1_amd64.snap
運行 Anbox
要從本地構建運行 Anbox ,你需要了解更多一點。請參考“運行時步驟”文檔。
文檔
在項目源代碼的子目錄下,你可以找到額外的關於 Anbox 的文檔。
有興趣可以看下:
報告 bug
如果你發現了一個 Anbox 問題,請提交 bug。
原文發布時間為:2017-04-21
本文來自雲棲社區合作夥伴“Linux中國”
最後更新:2017-05-22 14:32:30