Android-x86を古いPCに入れてみる!


去年大晦日に購入した中古のNEC Mateですが、標準で2GBメモリと少なく、Windows7とはいえChromeを起動して複数タブであっという間にスワップ処理が動いてフリーズしてしまいます。
そのため、思い切ってAndroidを入れてしまおう、ということにしました。

AndroidにPC版って存在したの!?

存在するんです。4.0からずっと公開されています。
PC版には、GPUドライバーや無線LANドライバー豊富、有線LAN対応などの工夫がされています。
また、ARMトランスレーターというものが搭載されており、スマートフォン向けに開発されたアプリもIntel/AMDアーキテクチャのCPUで動かせます。
OpenGL ES3.0にも対応しているので、重たいゲームもGPUをフル活用して遊べます。

でも導入が結構苦労する!

Android-x86は [Android-x86公式サイト]からダウンロードができます。
しかし、バージョンによっては、有線LANに対応していない、最近の無線LANドライバーに対応していないなどのデメリットがあります。
今のところ使えるのは6.0から7.0です。
5.1(Lollipop)は、フォントが崩れるという不具合があるため、使えません。

ここでは6.0を使うことにしました。
500MBほどなので、CDに焼き込めます。
USBハードディスクにインストールします。

しかしここで詰んだ!!
まともにインストーラーが動いてくれないのです!
USBハードディスクにインストールするので、事前にGPartedでNTFSパーティションを作っておきました。
そこにインストールしたいのですが、GRUBを入れる際になぜかインストーラーはWindowsがあるパーティションだと誤検知。違うので「No」を選びましたが、なぜかフリーズして先に進めません。
断念してQEMUからインストールすることにしました。
なぜかQEMUからだと普通にインストールができました;;
それでも起動できず・・・。
一度は断念しようと思いましたが、こんな記事を見つけました。
Android x86 6.0をUSBメモリにインストールする(@graingiriさん)

どうしてもできないときは手動で導入

とにかくその記事を見ながら挑戦してみましたので、その手順を載せます。

1.Androidのシステムファイル群をUSBにコピー

USBはあらかじめext4ファイルシステムのパーティションだけが存在するように構成してください。
USBはマウントされているはずなのでアンマウントします。
AndroidのISOイメージをダウンロードして、展開して、そのディレクトリに移動したら
root権限に入り、SquashFSとなっているsystem.sfsを解凍します。

my@pc:~/android_installation# unsquashfs -f -d . system.sfs

system.sfsを解凍すると中からsystem.imgが出てきます。これをloopでtempディレクトリにマウントします。

my@pc:~/android_installation# mkdir temp
my@pc:~/android_installation# mount -o loop system.img temp

ここでUSBをマウントします。USBは/dev/sdb1としています。

my@pc:~/android_installation# mount /dev/sdb1 /mnt/usb

マウントしたらcpコマンドでカーネルイメージなどをUSBにコピーします。

my@pc:~/android_installation# cp initrd.img ramdisk.img kernel /mnt/usb/

次にシステムアプリなどが格納されるsystemディレクトリ、アプリデータが保存されるdataディレクトリを作成します。

my@pc:~/android_installation# mkdir /mnt/usb/system
my@pc:~/android_installation# mkdir /mnt/usb/data

最後に、先程展開したsystem.imgの内容をUSBにコピーします。
色々文字が出ますが数十秒ほどで終了します。

my@pc:~/android_installation# cp -avr temp/* /mnt/usb/system/

これでカーネルイメージなどは準備ができました。あとはブートローダーをインストールするだけです。最後にexitで抜けておきます。まだ端末は閉じません。

my@pc:~/android_installation# exit
my@pc:~/android_installation$

2.ブートローダーをインストール

ブートローダーはGRUBを利用します。必要であればGRUBのツールをインストールします。

GRUBの設定ファイルにAndroidの項目を追加するために/etc/grub.d/40_customに記述します。geditなどでroot権限にて編集します。
以下を追加します。

menuentry "Android x86 6.0" {
set root='(hd0,1)'
linux /kernel quiet root=/dev/ram0 androidboot.hardware=android_x86 acpi_sleep=s3_bios,s3_mode SRC=/ HWACCEL= 
initrd /initrd.img
}

追加したら保存して閉じます。

次にUSBにGRUBをインストールします。USBは/dev/sdbとしています。
※sdb1など数字がつくものではなく、sdbなどを指定します。

my@pc:~/android_installation$ sudo grub-install --boot-directory=/mnt/usb/boot /dev/sdb

Installation finished. No error reported.
my@pc:~/android_installation$

次に設定ファイルを書き出します。

my@pc:~/android_installation$ sudo grub-mkconfig -o /mnt/usb/boot/grub/grub.cfg

このままでは余計なメニューが追加されているため、削除します。
/mnt/usb/boot/grub/grub.cfgをgeditなどでroot権限で編集します。
「### BEGIN /etc/grub.d/40_custom ###」と書いてある行の1つ前の行から上は全て消して構いません。

最後にUSBをアンマウントします。

my@pc:~/android_installation$ sudo umount /mnt/usb

お疲れ様でした!Androidのインストールはこれで終わりです!
PCなので、HDMIなどでテレビに繋いでも、UIが自動で調整されるので使いやすく、またHD画質にも対応しているため、Android TVのように大画面、高画質でYouTubeなどを楽しむことができます。

はじめはキーボード配列がアメリカになっているため、@などはShift+2で入力する必要がありますが、後ほどGoogle Playからアプリを追加すると日本語配列にできます。
さらに、Google日本語入力をインストールすれば日本語入力も可能になります。

私がおすすめする、日本語入力に必要なアプリは以下です。

Google日本語入力
ELECOM Keyboard layout

「ELECOM Keyboard layout」は、一見ELECOM製品だけにしか使えないのではと思いますが、どのキーボードにも使えます。これをインストールすると、半角全角切替キーが動作します。

また、Microsoft Wordや、PowerPointなどのAndroidアプリも使えます。つまり、Android-x86でも普通のPCかのように使えてしまうのです!
Windowsなどではサービスなどが余計なメモリを使用しますが、Androidはモバイル向け設計なのでその分メモリは使用しないため、古いPCでも軽快に動作できます!

Android-x86で動くアプリは?

ARMトランスレーターを搭載しているのでスマホ向けアプリも利用可能。

LINEやツムツムは動くの?

Android-x86では問題なく、あのスマホで必需品のLINEも動作します。

ツムツムは6.0-r3では動作しませんでした・・・。※現在デベロッパーに問い合わせ中。(2018/5/3)

荒野行動は動くの?

以前試したときに、マウスなどでは操作ができませんでした。
そこでデベロッパーに要望しましたところ、なんと
5月8日頃のアップデートによりマウスによる操作が可能になりました!!

謝礼

https://qiita.com/grainrigi/items/96a9eb59883e5d08a3f1
上記の記事を書いてくださったgrainrigiさんに感謝します。
この記事ではこれを元に進めております。

豆知識: Androidが起動しないときに試すといいこと

筆者は何回も出くわして、苦戦しました。
インストールはできたのに、「Detecting Android-x86....」でどうしても止まってしまうのです。
でも原因が分かりました。Ubuntuなどが入ったHDDを接続していることが原因なのです。

Androidカーネルは起動時にAndroidシステムがあるデバイスを探します。
HDDとUSBがある場合、sda(HDD) → sdb(USB)の順に探します。
そのとき、sdaにLinuxパーティションがあったときに、それをマウントしようとすると、理由は分かりませんがエラーになります。(Debugモードで判明。恐らくSwapパーティションをマウントしようとしたのが原因?)
このことから、Ubuntuなどを入れているPCの場合、Androidを利用する際はBIOS設定でHDDのSATAポートを無効にするか、SATAケーブルを抜くなどして認識させないようにして起動する必要があります。
筆者も実際そのようにしています。