【Linux】【anbox】anbox のインストール【SW】

Ubuntu18.04 への anbox のインストール
Ubuntu 18.04 にて Android アプリを実行させるために、anbox というソフトをインストールする。
なお、Android アプリを実行させる目的はヨドバシカメラの電子書籍アプリ Doly を Linux でも実行するためである。
 

 
まずは結論から。
本ページの手順では、アーキテクチャによっては失敗する。(私は失敗に終わった)
PC を Core2 Duo から Core i7 4770 に変更することで anbox のインストールに成功した。
 

概要

開発環境である Ubuntu にて、ヨドバシで購入した電子書籍を読みたい。
そのために専用リーダである doly を Ubuntu で実行できるようにする必要がある。
 
現状、Kindle Fire にて Android アプリが動かせるようなったので、Ubuntu で Android アプリを動かせる環境を作成し、Android 版 doly を実行させる方針でいる。
 
Web で探したところ、こちらのサイトで Android アプリを実行するためのソフトウェアとして Anbox というものがあると紹介されている。
ページ内では Anbox は α版で動作不安定といった旨のことが書かれていたが、2018年時点ではβ版まで進んでいるようである。
そこで、Ubuntu 18.04 に Anbox のインストールを試みることにした。

Anbox の紹介

公式サイト より。

 

インストール手順

参考にしたページ
How to install and run Anbox in Ubuntu 18.04? - Ask Ubuntu
anbox/install.md at master · anbox/anbox · GitHub

1. 上記「参考にしたページ」の記述に従って Anbox をインストールする

% sudo add-apt-repository ppa:morphis/anbox-support
% sudo apt install -y anbox-modules-dkms

 

2. Android IPC 通信のためのドライバをロードする

参考にしたページ
Binderのはじめの一歩とAndroid
 

共有メモリ(Ashmem=Anonymous Shared Memory) カーネルドライバのロードをする
% sudo modprobe ashmem_linux

 

IPC実現のためのカーネルドライバをロードする。
% sudo modprobe binder_linux

 

3. anbox のインストールをする

anbox のインストールをする

が、失敗に終わる。

% sudo snap install --devmode --beta anbox
error: cannot perform the following tasks:
- Run install hook of "anbox" snap if present (run hook "install":
-----
The CPU of your computer (Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz) does not support all
features Anbox requires.
It is missing support for the following features: SSE 4.2
You can for example find more information about SSE
here https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions
-----)

継続検討する。
どうやらアーキテクチャが古いことが原因らしく、PC を Core2 Duo から Core i7-4770 に変更したところ anbox のインストールに成功した。
f:id:dnkrnka:20181109232559p:plain

anbox インストーラの入手
% snap list
Name   Version    Rev   Tracking  Publisher   Notes
anbox  4-e1ecd04  158   beta      morphis     devmode
core   16-2.35.5  5742  stable    canonical✓  core
go     1.11.1     2890  stable    mwhudson    classic

 

anbox インストーラの実行

参考にしたサイトの手順ではいくつかエラーが出るが、指示に従い実行し直せばインストールできた。
以下、失敗した手順も含めて記す。

% anbox-installer
Command 'anbox-installer' not found, but can be installed with:
sudo snap install anbox-installer

 
指示に従い実行し直す。

% sudo snap install anbox-installer
error: This revision of snap "anbox-installer" was published using classic confinement and thus may
       perform arbitrary system changes outside of the security sandbox that snaps are usually
       confined to, which may put your system at risk.

       If you understand and want to proceed repeat the command including --classic.

 
「--class」を付与しろ、といったメッセージが出たので指示に従い実行する。

> sudo snap install anbox-installer --classic
anbox-installer 1 from morphis installed

 

adb コマンドも合せてインストールする

参考サイトより、Android Debug Bridge(adb) もあった方が良いとのことなので android-tools-adb をインストールしておく。

%  sudo apt install android-tools-adb

 

Ubuntu を再起動する

わざわざ Ubuntu を再起動させなくても sudo ldconfig を実行すれば良いのかも知れないが、ここは先人の指示に従う。 
 

4. anbox を起動させる

anbox を起動する
% anbox
ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded (failed to map segment from shared object): ignored.
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
Unknown command 'run'
NAME:
    anbox - anbox

USAGE:
    anbox [command options] [arguments...]

COMMANDS:
    wait-ready                     Wait until the Android system has successfully booted                                               
    help                           prints a short help message                                                                         
    check-features                 Check that the host system supports all necessary features                                          
    system-info                    Print various information about the system we're running on                                         
    version                        print the version of the daemon                                                                     
    session-manager                Run the the anbox session manager                                                                   
    launch                         Launch an Activity by sending an intent      

 
上記エラーログより。
LD_PRELOAD*1 に libgtk3-nocsd.so.0 を設定すれば良い模様。
そこで、一時的に環境変数 LD_PRELOAD に libgtk3-nocsd.so.0 を指定して anbox を起動してみる。
fish の場合

% set -x LD_PRELOAD 
% set -x LD_PRELOAD /usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 $LD_PRELOAD

 
bash の場合

% LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 anbox 

 
結果は次のようになり、起動に失敗する。(以下、 bash での実行例)

% LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 anbox
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
Unknown command 'run'
NAME:
    anbox - anbox

USAGE:
    anbox [command options] [arguments...]

COMMANDS:
    wait-ready                     Wait until the Android system has successfully booted                                               
    help                           prints a short help message                                                                         
    check-features                 Check that the host system supports all necessary features                                          
    system-info                    Print various information about the system we're running on                                         
    version                        print the version of the daemon                                                                     
    session-manager                Run the the anbox session manager                                                                   
    launch                         Launch an Activity by sending an intent                                                             

 
何となく anbox に引数が必要そうであることから、launch を指定してみる。
 

% LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 anbox launch
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
realpath: '': No such file or directory
[ 2018-11-09 14:53:27] [launch.cpp:169@operator()] The intent you provided is invalid. Please provide a correct launch intent.
[ 2018-11-09 14:53:27] [launch.cpp:170@operator()] For example to launch the application manager, run:
[ 2018-11-09 14:53:27] [launch.cpp:171@operator()] $ anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity

 
またまた、エラーが出た。
エラーの最終3行より引数の指定例が書かれているので、参考にして再実行してみる。

% LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0 anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity

 
すると、起動に成功した。
f:id:dnkrnka:20181110000842p:plain:w600

*1:この環境変数に設定した共有ライブラリを優先的に読み込む