Ubuntu Weekly Recipe

第468回 UbuntuにAndroidアプリをインストールする

この記事を読むのに必要な時間:およそ 4 分

今回はUbuntuデスクトップにAndroidアプリをインストール・起動できるツールAnboxの使い方と仕組みを紹介します。

Anbox:Android in a Box

AnboxはUbuntuを含むLinuxシステム上でAndroidアプリケーションをインストール・起動できるツールです。仕組みは至極単純で,コンテナ技術を使ってAndroid実行環境を用意し,カーネルそのものはホストのカーネルを流用します。Anboxはこのコンテナを操作する管理ツールであり,GUIアプリケーションです。ただし2017年4月時点では「アルファ版のレベル」です。インストールしたシステムへの思わぬ悪影響が発生する可能性もありますので,インストール先にはよくよく注意してください。

さっそくAnboxをインストールしてみましょう。Anboxはインストーラーと本体のそれぞれを個別のsnapパッケージとして提供しています。メジャーなLinuxディストリビューションはたいていの場合snapを使えるはずですが,残念ながらインストーラーはUbuntuを含む一部のディストリビューションにのみ特化した記述になっています。もしUbuntu以外にインストールしたい場合は,インストーラーから必要なソフトウェアを類推し,適宜手動でインストールしてください。なおAndroidのエミュレーターの都合で,amd64アーキテクチャーとARMアーキテクチャーにのみ対応しています。また,今のところNVIDIAやAMDなどのプロプライエタリなグラフィックスドライバー上では動作しないようです。

Ubuntuの場合は次の手順でインストールします。まずはsnapパッケージとして提供されているインストーラーのインストールからです。

$ sudo snap install --classic anbox-installer
anbox-installer 1 from 'morphis' installed
$ snap list
Name             Version  Rev   Developer  Notes
anbox-installer  1        10    morphis    classic
core             16-2     1577  canonical  -

--classicはsnapパッケージからホストのルートファイルシステムへのフルアクセスを許可するオプションです。つまりsnapの機能のひとつである,パッケージ単位のホストシステムからの隔離は行われません。インストーラーはホストにパッケージやカーネルモジュールを追加するため,このような実装になっています。

次にインストーラーを実行します。途中同意画面などが表示されますので,⁠I AGREE」と入力してください。

$ anbox-installer
Android in a Box - Installer


IMPORTANT: THIS IS ALPHA LEVEL SOFTWARE. EXPECT INSTABILITY AND
           BUGS !!!!!

IMPORTANT: ALSO PLEASE BE AWARE THAT WE DON'T PROVIDE FULL
           CONFINEMENT FOR THE SNAP YET !!!!


PLEASE NOTE: This script will require root access on your system
to install all necessary things. It will prompt you to enter your
password when required.



What do you want to do?

 1. Install Anbox
 2. Uninstall Anbox

Please enter your choice [1-2]:
1


This is the installer for the anbox runtime environment. It will
install certain things on your system to ensure all requirements
are available for anbox to work correctly.

In summary we will install the following things:

 * Add the anbox-support ppa ppa:morphis/anbox-support to the
   host system
 * Install the anbox-modules-dkms deb package from the ppa
   which will add kernel modules for ashmem and binder which are
   required for the Android container to work.
 * Configure binder and ashmem kernel modules to be loaded
   automatically on boot.
 * Add an upstart job for the current user shibata which will
   start the anbox runtime on login.
 * Add a X11 session configuration file to allow the system
   application launcher (Unity7, Gnome Shell, ..) to find
   available Android applications.

Please type 'I AGREE' followed by pressing ENTER to continue
or type anything else to abort:
I AGREE


Starting installation process ...
(中略)
Done!

To ensure all changes made to your system you should now reboot
your system. If you don't do this no Android applications will
show up in the system application launcher.

このインストーラーは次のことを行います。

  • PPAであるppa:morphis/anbox-supportの追加
  • 上記PPAからanbox-modules-dkmsパッケージのインストール
  • 起動時にbinderモジュールとashmemモジュールをロードするように設定/etc/modules-load.d/anbox.conf
  • 上記モジュールが作るデバイスファイルに対するudevルールを追加/etc/udev/rules.d/99-anbox.rules
  • snapコマンドでanboxパッケージをedgeチャンネルから--devmodeでインストール
  • Androidアプリケーション用のDesktopファイルディレクトリとして$HOME/snap/anbox/common/app-dataを追加/etc/X11/Xsession.d/68anbox
  • インストール時のユーザーに対して,ログイン時にAnboxセッションマネージャーを起動するように設定$HOME/.config/upstart/anbox.confまたは$HOME/.config/systemd/user/anbox.service
  • 注:上記の各種設定ファイルは将来的にPPAのanbox-commonパッケージからインストールするようになります

Anboxを使うためには,adbコマンドもあったほうが便利です。というわけで,インストーラーが終了したらあわせてandroid-tools-adbパッケージもインストールしておきましょう。

$ sudo apt install android-tools-adb

ここまで進めたら,一度再起動してください。

特にサードパーティのカーネルモジュールとDKMSをインストールするため,セキュアブートが使えなくなります。すでにセキュアブートを有効化している環境だと,無効化するためのパスワード設定を行い,再起動時にパスワードを入力することになるので注意してください。ちなみにパスワードの入力は「設定したパスワードのN文字目は?」という問い合わせに複数回回答するタイプです。なおセキュアブート有効な環境だと再起動するまでAnboxを使えません。あらかじめ無効化してからAnboxをインストールするほうがスムーズに設定できます。

BinderはAndroid独自のメッセージングシステムで,ashmemはその名の通りAndroid版の共有メモリです。どちらもAndroid SDKのAPIを経由してアプリケーションが使うために必要ではあるものの,UbuntuのLinuxカーネルには存在しない機能です。

snap版のanboxパッケージは今のところedgeチャンネルにのみ存在します。また,現時点ではもろもろの権限の都合上--devmodeを有効化する必要があります。--devmodeは,snapパッケージにおいて本来個別に設定が必要だった「interface」への接続を,自動的に対応するモードです。⁠interface」はAndroidアプリにおけるいわゆる「権限」みたいなものだと思ってください。snapパッケージ開発時に,どのような権限を設定する必要があるか不明なときに,--devmodeで起動して/var/log/syslogにinterfaceへの接続記録を残すといった対応が行われます※1⁠。Anboxはまだ開発途上であるため,このオプションを有効化しています。

※1
よってAnboxをインストールすると,kauditdが大量の警告メッセージをsyslogに記録することになります。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。