JOURNAL

重たいAndroid StudioはUbuntuで動かす — Linux開発環境の快適さと、今後のアプリ展開

赤猫座の店先に並んでいるのは、ブラウザさえあれば登録不要ですぐ使える「Web道具」が中心です。ですが、実は裏でコソコソとAndroidアプリの開発も進めていたりします。

今のところサイト上では公開していませんが、「ブラウザ版とは一味違う、スマホのネイティブ機能を生かした道具」もいずれこの店先に並べてみたいという野望を持っています。ウィジェットで常駐させたり、バックグラウンドでガッツリ動かしたり、完全オフラインで手元に置いておける道具たちです。

ただ、Androidアプリを開発するにあたって、開発者なら誰もがぶつかる巨大な壁があります。そう、「Android Studio、重たすぎ問題」です。

なぜWindowsではなく「Ubuntu(Linux)」で開発するのか

Android Studioでアプリを作ったことがある方なら激しく頷いていただけると思うのですが、この開発環境、とにかくPCリソースを容赦なく食いつぶします。

  • IntelliJベースの巨大IDE本体(JVM上で動く大量のインデックス処理)
  • Gradleによるビルド処理(大量のタスク並列実行とメモリ消費)
  • Android Emulator(AVD)(仮想マシンとして1台のスマホOSを丸ごと動かす負荷)

これらをWindows上で同時に走らせると、CPUファンはジェット機のように唸りを上げ、メモリは16GB積んでいてもあっという間にカツカツになります。さらにWindows Updateやセキュリティソフトのリアルタイムスキャンが裏で動き出すと、Gradleビルドの進捗バーを眺めながら虚無の時間を過ごすことになります。

そこで行き着いた結論が、「開発環境を丸ごとLinux(Ubuntu)に移行する」という選択でした。

UbuntuでAndroid開発をすると快適な理由(小ネタ集)

実際にUbuntu上でAndroid Studioを動かしてみると、Windowsに戻れなくなるレベルで快適なポイントがいくつもありました。マニアックな小ネタも含めてご紹介します。

① KVM(カーネル仮想化)直結でエミュレータが爆速

Linux環境最大の強みがこれです。Linuxにはカーネル標準の仮想化機構であるKVM(Kernel-based Virtual Machine)が組み込まれており、Androidエミュレータ(QEMUベース)がハードウェアアクセラレーションを直接利用できます。

WindowsのHyper-VやHAXMを経由するオーバーヘッドがなく、/dev/kvmを通じてCPUの仮想化支援(Intel VT-x / AMD-V)をネイティブに叩けるため、エミュレータの起動が圧倒的に速く、実機並みにヌルヌル動きます。エミュレータを起動する億劫さが激減しただけでも、Ubuntuにした価値がありました。

② Gradleビルドとext4ファイルシステムの相性が抜群

Androidのビルドプロセスは、何千・何万という中間ファイルやキャッシュを高速に生成・読み書きします。Linux標準のファイルシステム(ext4など)は小ファイルの大量I/O処理が非常に得意です。

また、Windowsでありがちな「ウイルス対策ソフトが生成された中間ファイルを片っ端からスキャンしてファイルロックがかかる」といった現象が起きないため、Clean Buildや差分ビルド(Incremental Build)の完了速度が目に見えて速くなります。

項目 Windows環境 Ubuntu(Linux)環境
エミュレータ 仮想化レイヤーのオーバーヘッドあり KVM直結で超高速・軽量
Gradleビルド ファイルスキャン等でI/O待ちが発生しやすい ext4の高速I/Oでサクサク完了
OSの基本メモリ消費 起動直後で約4GB〜6GB 起動直後で約1GB〜2GB(余力をIDEに回せる)
実機USBデバッグ メーカーごとのADBドライバ導入が必要な場合あり udevルールを1行書くだけで即認識

③ USB接続の実機デバッグがudevルール1行で済む

実機をUSBで繋いでデバッグする際、Windowsだと「デバイスマネージャーを開いて専用ドライバを探して…」という面倒な儀式が発生しがちです。

Ubuntuなら、/etc/udev/rules.d/51-android.rules にUSBベンダーIDを1行書き足してudevルールを再読み込みするだけで、どんな中華端末でもマイナー端末でも即座に adb devices で認識してくれます。この素直さはLinuxならではの快感です。

もちろんLinuxならではの地味な苦労もある

手放しで絶賛ばかりしていると嘘くさいので、LinuxでAndroid Studioを使っていてハマった地味な落とし穴も書いておきます。

一番遭遇しやすいのが「日本語入力(IME)まわりの相性問題」です。Java SwingベースのIDE特有の挙動で、Fcitx5やIBusを使っていると、コード編集画面でインライン変換のポップアップ位置が画面の変な場所に飛んでいったり、変換確定時にフォーカスが外れたりすることがあります。

環境変数(_JAVA_OPTIONS)や起動スクリプトの調整、あるいは「JetBrains Toolbox」経由でIDEのカスタムランタイムを最新に保つことで今はほぼ安定していますが、最初のセットアップ時は少し試行錯誤が必要でした。

いずれ赤猫座のAndroidアプリもお披露目したい

Webのツールは「思い立ったらURLを踏むだけですぐ使える」という最高の手軽さがあります。一方で、スマホの画面にアイコンを置いて毎日使ってもらうような道具、オフラインの電波が届かない山奥でも確実に動く道具には、アプリならではの良さがあります。

Ubuntuの快適な開発環境でガシガシ育てているAndroidアプリたちも、形が整い次第、何らかの形でこの赤猫座でお届けできればと考えています。

いつになるかは店主の気まぐれと開発の進み具合次第ですが、気長にお待ちいただけると嬉しいです。