Anbox:容器中的 Android

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介:

概述

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中国”

相关文章
|
Android开发 索引 容器
【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 父容器坐标系坐标 | 窗口坐标系坐标 | 屏幕坐标系坐标 | 触摸坐标 )
【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 父容器坐标系坐标 | 窗口坐标系坐标 | 屏幕坐标系坐标 | 触摸坐标 )
295 0
|
安全 测试技术 Android开发
Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试
Python自动化,大概也许或者是今年最具热度的话题之一了。七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那么Python自动化到底能帮我们做些什么呢? 第一,Python自动化可以避免熟练工种的重复工作,对于功能相对完整和成熟的软件,每发布一个新的版本,无论是大版本还是小版本,其中大部分功能和界面都几乎和上一个版本相似或完全相同,但所谓向上兼容,你不能因为新功能的产生而不对老版本功能进行测试工作,而这些老功能又在上一个版本上线时测过,所以这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。
Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试
|
XML 开发工具 Android开发
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
298 0
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
|
Java Android开发 容器
支付宝客户端架构解析:Android 容器化框架初探
一.前言   本节将介绍支付宝 Android 容器化框架设计的基本思路。 1.1 开发背景 随着 Android 应用程序所能实现的功能越来越强大和复杂,随之而来的是: Android 程序的的代码和资源越来越多,APK 文件的 size 越来越大,Android 程序也越来越复杂; 随着应用的迭代、项目的扩张,团队数量以及团队人数的同时增多,基于传统架构模式的并行开发也变得愈加困难。
1493 0
|
XML Android开发 数据格式
【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )
【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )
501 0
|
Java Android开发 开发者
支付宝客户端架构解析:Android 容器化框架初探
1. 前言 由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”、“网络优化”、“性能启动优化”、“自动化日志收集”、“RPC 组件设计”、“移动应用监控、诊断、定位”等具体实现,带领大家进一步了解支付宝在客户端架构上的迭代与优化历程。
2293 0