[TOC]

简介

本文阐述在Linux系统中安装Android Studio,并通过VNC工具以远程虚拟桌面的形式提供给Client端使用。借助Docker打包,实现轻量级、轻易发布和移植的容器应用。

镜像已经打包好并上传至DockerHub(链接

  1. 本文阐述的方案针对大型项目进行设计,将大型项目开发过程中对CPU、RAM、Disk资源有限的终端开发机器的性能要求和负载压力(包含Code Index、Analysis、Complie&Build、Refacotor等)转移到具备更高硬件规格的Linux服务器中。
  2. 通过轻量级的虚拟桌面协议实现接近原生的界面交互。
  3. 面向容器设计,易打包、移植和发布,易于添加扩展成为自定义的PaaS。

Feature

  1. 提供Android Studio套件
  2. 提供adb套件
  3. 提供辅助套件(Chrome、xfce)
  4. 默认提供宿主机挂载点(/metaworld)
  5. 默认暴露一个vnc端口(8205:5901(Host:Docker))

DAAS遵循了容器化思维,维持了最小的功能切面,仅提供android studio功能。一些常见的Linux功能

项目名称及其释义

本项目的名称是Docker as AS DaaS,简称为DAAS

基础名词

DaaS: Desktop as a service, is a cloud computing offering that securely delivers virtual apps and desktops from the cloud to any device

释义

Docker as AS DaaS: 全称由四个单词组成,其中除助词as之外,其他全是特指名词:Docker:容器管理器的名称;ASAndroidStudio的简称;DaaS:云计算应用`Desktop as a Service```的简称。

可以看出,本项目的命名方式非常直观,首词指出本方案的容器本质,尾二词直接表现出本项目提供的服务是Android Studio,服务提供形式是DaaS

如果你知道”GNU”,同时了解”GNU is not unix”,可以看出,”GNU”是其全称”GNU is not unix”的首字母的大写形式。此外,与”GNU”相同,”DAAS”也采用了递归缩写的形式来进行命名。这种命名形式称为递归缩写。

递归缩写即递归首字缩写,是一种在全称中递归引用它自己的缩写。在计算机领域,使用递归缩写是黑客社区中的一个较早的传统,后来又有一些牛人把自己开发的产品或者技术使用了这种方式来命名。最早的递归缩写命名的实例应该是1977年或1978年出现的TINT编辑器,其命名为“TINT Is Not TECO”(TINT不是文字编辑器和修正器)。

  • 搜索引擎Bing:
    Bing Is Not Google

  • Linux:
    Linux Is Not UniX

  • RPM包管理器:
    RPM Package Manager

  • 在linux中运行Windows虚拟机Wine:
    Wine Is Not an Emulator

  • 图片编码格式PNG:
    PNG’s Not GIF

安装Android Studio

本节介绍在Linux上安装Android Studio,主要记录相关命令以及配置。在2021年之际,Compose框架横空出世,此时Android Studio下载时的默认大版本仍然是2020.3.12020.3.1.26/android-studio-2020.3.1.26-linux.tar.gz

1
2
add-apt-repository ppa:maarten-fonville/android-studio
apt install android-studio

本文不仅阐述而且建议将Android Studio打包进Docker,因此本节涉及的部分可以在Docker环境中执行,在您确认使用Docker的前提下,本节内容可能在稍后才有机会使用。

VNCServer与Client

我们使用vncserver作为DAAS的虚拟远程桌面。相关安装步骤不再赘述,可在DockerFile中查看。

桌面选择

DAAS需要依托一个窗口管理器才能正常将Android Studio的窗口呈现出来,VNC只是提供X server的功能。本节介绍DAAS采用的桌面。

常见的轻量桌面包含VNCServer默认提供的OpenBox,以及DAAS选择使用的xfce。

OpenBox

它有一些所有常见的桌面组件,例如系统托盘 stalonetray、任务栏 Tint2 或 Xfce4-panel 等几乎你能想到的。任意组合应用,直到拥有梦想的开源桌面为止。(换言之,如果不做任何定制,OpenBox将显得非常单纯,以至于交互便捷性有所不足)。

OpenBox是vncserver默认提供的,当对桌面没有其他要求时,使用默认的OpenBox即可。

xfce

同样是轻量级桌面,DAAS采用了xfce,相关安装指令见下。

Docker打包

前传:Docker安装

本小节没有任何内容。

听说这个脚本可以一键安装docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Docker镜像构建过程

  1. 构建镜像、库和vnc、xfce
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    docker pull ubuntu:18.04
    docker run -it --shm-size 32G --name NikoDAAS -p 8205:5901 -v ~/project/:/metaworld ubuntu:18.04 /bin/bash
    apt-get update
    apt-get -y install byobu vim
    apt-get -y install xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi xfonts-75dpi-transcoded xfonts-base
    apt-get -y install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
    apt-get -y install tightvncserver tigervnc-standalone-server tigervnc-common
    apt-get install -y x11vnc
    apt-get -y install net-tools git python
    mkdir ~/.vnc
    x11vnc -storepasswd 1234 ~/.vnc/passwd
    vim $HOME/.vnc/xstartup
    # vncserver :1 -localhost no
    vncserver :1 -geometry=1920x1080 -localhost no
  • 配置xfce

    1
    vim $HOME/.vnc/xstartup
  • xfce的配置内容

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/sh

    unset SESSION_MANAGER
    unset DBUS_SESSION_BUS_ADDRESS
    startxfce4 & #启动xface4
    [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
    [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
    xsetroot -solid grey #设置背景色
  • 查看vnc是否成功启动

    1
    netstat -ntupl
  • 关闭vnc

    1
    vncserver -kill :*
  1. 安装Android Studio
    1
    2
    3
    apt-get install -y software-properties-common
    add-apt-repository ppa:maarten-fonville/android-studio
    apt install -y android-studio
  2. 安装Chrome

    准确来说这是一个具备安全和隐私功能的chrome。想想如何摆脱你电脑里面安装的xx助手的监控。

1
2
3
4
5
6
7
8
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 

apt install -y -f ./google-chrome-stable_current_amd64.deb

N: Download is performed unsandboxed as root as file '/root/Downloads/google-chrome-stable_current_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

chown -Rv _apt:root /root/Downloads/
chmod -Rv 700 /root/Downloads/
  • 启动

    1
    google-chrome
  • 报错的话启动

    1
    google-chrome --no-sandbox

Most likely you need to configure SUID correctly.

  • 优化

如果启动报错,且上述指令有效,可以尝试以下优化,使chrome能够从xfce launcher 托盘按钮启动。

  1. 配置容器SUID
  2. 或者通过xfce的settings manager->Perfered App->WebBrowser设置为
    1
    google-chrome --no-sandbox
  • Input/Output error
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    root@7287b2b944e5:~/Downloads# update-alternatives --config x-terminal-emulator
    There are 2 choices for the alternative x-terminal-emulator (providing /usr/bin/x-terminal-emulator).

    Selection Path Priority Status
    ------------------------------------------------------------
    * 0 /usr/bin/gnome-terminal.wrapper 40 auto mode
    1 /usr/bin/gnome-terminal.wrapper 40 manual mode
    2 /usr/bin/xfce4-terminal.wrapper 40 manual mode

    Press <enter> to keep the current choice[*], or type selection number: 2
    update-alternatives: using /usr/bin/xfce4-terminal.wrapper to provide /usr/bin/x-terminal-emulator (x-terminal-emulator) in manual mode
    update-alternatives: warning: skip creation of /usr/share/man/man1/x-terminal-emulator.1.gz because associated file /usr/share/man/man1/xfce4-terminal.1.gz (of link group x-terminal-emulator) doesn't exist
  1. 安装ADB
    1
    2
    apt install -y android-tools-adb
    apt install -y android-tools-fastboot

DockerFile

TODO

远程调试

TODO

本文环境

Linux server

  1. Linux ubuntu 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
  2. Android Studio
    1
    2
    add-apt-repository ppa:maarten-fonville/android-studio
    apt install android-studio

Windows client

  1. VNC-Viewer-6.21.1109-Windows-64bit

Roadmap

DAAS有进一步开发的规划。

  1. 支持Web访问。当前DAAS需要vnc client访问,即将研究开发支持Web browser直接访问的新一代DAAS。
  2. 推出支持DockerFile构建的DAAS。现版本DAAS的获取依靠镜像分发。
  3. 提供基于SPICE的版本,但是这需要QEMU。

 ## 参考文献

  1. Ubuntu安装Linux
  2. tightvncserver默认的窗口管理器OpenBox
  3. OpenBox ArchLinux OpenBox简体中文
  4. Docker install