开源Anbox在Linux中运行Android应用

Anbox 以基于容器的方式,在像 Ubuntu 这样的常规的 GNU Linux 系统上启动一个完整的 Android 系统。

概述

Anbox 使用 Linux 命名空间(user、pid、uts、net、mount、ipc)来在容器中运行完整的 Android 系统,并在任何基于 GNU Linux 平台上提供 Android 应用。

容器内的 Android 无法直接访问任何硬件。所有硬件访问都通过主机上的 anbox 守护进程进行。我们重用基于 QEMU 的模拟器实现的 Android 中的 GL、ES 加速渲染。容器内的 Android 系统使用不同的管道与主机系统通信,并通过它发送所有硬件访问命令。

有关更多详细信息,请参考下文档:

  • Android 硬件 OpenGL ES 仿真设计概述
  • Android QEMU 快速管道
  • Android 的 “qemud” 复用守护进程
  • Android qemud 服务

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 \ 
  2.     google-mock libboost-dev libboost-filesystem-dev libboost-log-dev \ 
  3.     libboost-iostreams-dev libboost-program-options-dev libboost-system-dev \ 
  4.     libboost-test-dev libboost-thread-dev libcap-dev libdbus-1-dev \ 
  5.     libdbus-cpp-dev libegl1-mesa-dev libgles2-mesa-dev libglib2.0-dev \ 
  6.     libglm-dev libgtest-dev liblxc1 libproperties-cpp-dev libprotobuf-dev \ 
  7.     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 的文档。

有兴趣可以看下:

  • 运行时步骤
  • 构建 Android 镜像

报告 bug

如果你发现了一个 Anbox 问题,请提交 bug。

取得联系

如果你想要与开发者联系,你可以在 FreeNode 中加入 #anbox 的 IRC 频道。

版权与许可

Anbox 重用了像 Android QEMU 模拟器这样的其他项目的代码。这些项目可在外部/带有许可声明的子目录中得到。

anbox 源码本身,如果没有在相关源码中声明其他的许可,默认是 GPLv3 许可。

作者:Anbox

来源:51CTO

时间: 2024-08-04 04:25:53

开源Anbox在Linux中运行Android应用的相关文章

Shashlik:Linux 上运行 Android 应用的新法子

Shashlik 是一个在通常的 GNU/Linux 发行版上加载 Android 应用的 "Android 模拟环境". Shashlik 将于7月晚些在 KDE Akademy 2015 大会上以 "一个在 '真正' Linux 上运行 Android 应用的新法子" 提到. 来自 Dan Leinir Turthra Jensen 的情报 : "Shashlik,一个尽可能小的 Android 系统和框架的集合,构建且运行于标准的.现代的 linux

Anbox:容器中的 Android

概述 Anbox 使用 Linux 命名空间(user.pid.uts.net.mount.ipc)来在容器中运行完整的 Android 系统,并在任何基于 GNU Linux 平台上提供 Android 应用. 容器内的 Android 无法直接访问任何硬件.所有硬件访问都通过主机上的 anbox 守护进程进行.我们重用基于 QEMU 的模拟器实现的 Android 中的 GL.ES 加速渲染.容器内的 Android 系统使用不同的管道与主机系统通信,并通过它发送所有硬件访问命令. 有关更多

Visual Studio 2010中运行android程序

问题描述 已经安装了monoDroid插件,新建一个项目,模拟器正常启动,程序无法运行是怎么回事儿啊 解决方案 解决方案二:楼主都开始玩monoDroid了,时髦啊,顶.解决方案三:该回复于2012-03-16 17:27:04被版主删除解决方案四:能啊怎么不能百度一下,你就知道的引用2楼nanjingnpx的回复: 楼主你用vs能开发android吗南京牛皮癣医院哪家-- 解决方案五:完全工作需要引用1楼foundersg的回复: 楼主都开始玩monoDroid了,时髦啊,顶. 解决方案六:m

linux中运行一个golang程序为守护进程

安装daemonize 安装git环境 yum install git -y 获取daemonize git clone git://github.com/bmc/daemonize.git 安装daemonize cd daemonize ./configure make && make install 查看是否安装www.111cn.net daemonize -v 通过daemonize执行golang守护进程 你需要打包你的golang程序为可执行文件(go build),并通过d

linux下配置android sdk

该文章介绍下如何在linux中配置android sdk 一.下载android sdk 下载SDK,下载地址:http://developer.android.com/sdk/index.html,选择Linux(i386).因为SDK只有32位的,如果装的是64位系统,则要安装ia32-libs,运行32位程序.安装命令:sudo apt-get install ia32-libs(在Ubuntu中的命令).下载完成后解压,在终端进入到SDK的根目录,然后执行:tools/android u

如何在Linux中永久修改USB设备权限

提问:当我尝试在 Linux 中运行 USB GPS 接收器时我遇到了下面来自 gpsd 的错误. gpsd[377]: gpsd:ERROR: read-only device open failed: Permission denied  gpsd[377]: gpsd:ERROR: /dev/ttyUSB0: device activation failed.  gpsd[377]: gpsd:ERROR: device open failed: Permission denied - r

Linux 有问必答:如何在 Linux 中永久修改 USB 设备权限

提问:当我尝试在 Linux 中运行 USB GPS 接收器时我遇到了下面来自 gpsd 的错误. gpsd[377]: gpsd:ERROR: read-only device open failed: Permission denied gpsd[377]: gpsd:ERROR: /dev/ttyUSB0: device activation failed. gpsd[377]: gpsd:ERROR: device open failed: Permission denied - ret

如何在Linux系统中运行ASP.NET vNext

最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希望对其他想要尝鲜的人有所帮助. 运行环境 Ubuntu Server 14.04 VirtualBox Mono >= 3.4.1 *由于Ubuntu库中的Mono版本比较陈旧,满足不了最低要求,所以第一步要做的就是安装最新版本的Mono. 安装Mono 1. 首先从GitHub上取得mono代码:

在Android中开源类库使用过程中兼容性等问题的讨论

1.在Android4.0环境下编译的actionbarsherlock.slidingmenu类库,能不能在4.0以下的版本中使用 相信很多人跟我一样,都以为在低版本(如Android2.1或2.3版本)编译的应用能够在高版本中运行,但高版本(比如Android3.0或4.0)中编译的应用恐怕就不能在低版本中运行.于是,我们可能就会想方设法地把一些在高版本中编译的代码,改成在低版本的Android SDK中编译,以便兼容.我们一直忽视了在<manifest>文件中关于兼容性的声明,如下面代码