開源Anbox在Linux中運(yùn)行Android應(yīng)用
Anbox 以基于容器的方式,在像 Ubuntu 這樣的常規(guī)的 GNU Linux 系統(tǒng)上啟動一個(gè)完整的 Android 系統(tǒng)。
概述
Anbox 使用 Linux 命名空間(user、pid、uts、net、mount、ipc)來在容器中運(yùn)行完整的 Android 系統(tǒng),并在任何基于 GNU Linux 平臺上提供 Android 應(yīng)用。
容器內(nèi)的 Android 無法直接訪問任何硬件。所有硬件訪問都通過主機(jī)上的 anbox 守護(hù)進(jìn)程進(jìn)行。我們重用基于 QEMU 的模擬器實(shí)現(xiàn)的 Android 中的 GL、ES 加速渲染。容器內(nèi)的 Android 系統(tǒng)使用不同的管道與主機(jī)系統(tǒng)通信,并通過它發(fā)送所有硬件訪問命令。
有關(guān)更多詳細(xì)信息,請參考下文檔:
- Android 硬件 OpenGL ES 仿真設(shè)計(jì)概述
- Android QEMU 快速管道
- Android 的 “qemud” 復(fù)用守護(hù)進(jìn)程
- Android qemud 服務(wù)
Anbox 目前適合桌面使用,但也用在移動操作系統(tǒng)上,如 Ubuntu Touch、Sailfish OS 或 Lune OS。然而,由于 Android 程序的映射目前只針對桌面環(huán)境,因此還需要額外的工作來支持其他的用戶界面。
Android 運(yùn)行時(shí)環(huán)境帶有一個(gè)基于 Android 開源項(xiàng)目鏡像的最小自定義 Android 系統(tǒng)。所使用的鏡像目前基于 Android 7.1.1。
安裝
目前,安裝過程包括一些添加額外組件到系統(tǒng)的步驟。包括:
- 啟用用于 binder 和 ashmen 的非發(fā)行的樹外內(nèi)核模塊。
- 使用 udev 規(guī)則為 /dev/binder 和 /dev/ashmem 設(shè)置正確權(quán)限。
- 能夠啟動 Anbox 會話管理器作為用戶會話的一個(gè)啟動任務(wù)。
為了使這個(gè)過程盡可能簡單,我們將必要的步驟綁定在一個(gè) snap(見 https://snapcraft.io ) 中,稱之為 “anbox-installer”。這個(gè)安裝程序會執(zhí)行所有必要的步驟。你可以在所有支持 snap 的系統(tǒng)運(yùn)行下面的命令安裝它。
- $ snap install --classic anbox-installer
另外你可以通過下面的命令下載安裝腳本。
- $ wget https://raw.githubusercontent.com/anbox/anbox-installer/master/installer.sh -O anbox-installer
請注意,我們還不支持除所有 Linux 發(fā)行版。請查看下面的章節(jié)了解支持的發(fā)行版。
運(yùn)行下面的命令進(jìn)行安裝。
- $ anbox-installer
它會引導(dǎo)你完成安裝過程。
注意: Anbox 目前處于 pre-alpha 開發(fā)狀態(tài)。不要指望它具有生產(chǎn)環(huán)境你需要的所有功能。你肯定會遇到錯(cuò)誤和崩潰。如果你遇到了,請不要猶豫并報(bào)告它們!
注意: Anbox snap 目前 完全沒有約束,因此它只能從邊緣渠道獲取。正確的約束是我們想要在未來實(shí)現(xiàn)的,但由于 Anbox 的性質(zhì)和復(fù)雜性,這不是一個(gè)簡單的任務(wù)。
已支持的 Linux 發(fā)行版
目前我們官方支持下面的 Linux 發(fā)行版:
- Ubuntu 16.04 (xenial)
未測試但可能支持的:
- Ubuntu 14.04 (trusty)
- Ubuntu 16.10 (yakkety)
- Ubuntu 17.04 (zesty)
安裝并運(yùn)行 Android 程序
從源碼構(gòu)建
要構(gòu)建 Anbox 運(yùn)行時(shí)不需要特別了解什么,我們使用 cmake 作為構(gòu)建系統(tǒng)。你的主機(jī)系統(tǒng)中應(yīng)已有下面這些構(gòu)建依賴:
- 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 系統(tǒng)中你可以用下面的命令安裝所有的依賴:
- $ 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
之后用下面的命令構(gòu)建 Anbox:
- $ mkdir build
- $ cd build
- $ cmake ..
- $ make
一個(gè)簡單的命令會將必要的二進(jìn)制安裝到你的系統(tǒng)中,如下。
- $ make install
如果你想要構(gòu)建 anbox snap,你可以按照下面的步驟:
- $ mkdir android-images
- $ cp /path/to/android.img android-images/android.img
- $ snapcraft
結(jié)果會有一個(gè) .snap 文件,你可以在支持 snap 的系統(tǒng)上安裝。
- $ snap install --dangerous --devmode anbox_1_amd64.snap
運(yùn)行 Anbox
要從本地構(gòu)建運(yùn)行 Anbox ,你需要了解更多一點(diǎn)。請參考“運(yùn)行時(shí)步驟”文檔。
文檔
在項(xiàng)目源代碼的子目錄下,你可以找到額外的關(guān)于 Anbox 的文檔。
有興趣可以看下:
報(bào)告 bug
如果你發(fā)現(xiàn)了一個(gè) Anbox 問題,請提交 bug。
取得聯(lián)系
如果你想要與開發(fā)者聯(lián)系,你可以在 FreeNode 中加入 #anbox 的 IRC 頻道。
版權(quán)與許可
Anbox 重用了像 Android QEMU 模擬器這樣的其他項(xiàng)目的代碼。這些項(xiàng)目可在外部/帶有許可聲明的子目錄中得到。
anbox 源碼本身,如果沒有在相關(guān)源碼中聲明其他的許可,默認(rèn)是 GPLv3 許可。