One IT Thing

IT業界で飯を食う為の学習系雑記

android chrome linux

Android版ChromiumをVirtualBoxにインストールしたUbuntuでビルドしてみる

投稿日:2020年1月10日 更新日:

「Chromium」はChromeの開発ソースが公開されたプロジェクトです。

Operaや2020/1/15にリリースされる新しいMicrosoft Edgeでもコアとして使われていて、私たち個人でも同じように拡張して自分だけのブラウザを作ることが出来ます。

カスタマイズして自分だけのブラウザを作ったり、Googleの中の人達がやっているようなビルド時間を短くする施策はおいおいやっていくとして、「Chromium?ビルドしたことありますけど?」と言えるようにまずはビルドの成功体験を積みたいですね。

公式手順に従えば誰でもコンパイルして実行ファイルを作ることが出来ますが、一度公式手順通りにやってみると数日レベルのビルド時間が掛かったり、前提条件が欠損していたり、途中で諦めてしまうこともあるビルドチャレンジゲーム的側面もあります。

自分がハマった経験を元に出来るだけハマらず、少ないリソースでビルドを完了させる方法をご紹介します。

環境

前回VirtualBoxにインストールしたUbuntu18.04でAndroid版Chromiumをビルド、apkを作成してAndroidにインストールします。

  • Ubuntu 18.04(Windows10 VirtualBox 6.0.4)
  • Android 9(インストール先)
  • Chromium 81.0(ビルドしてインストールするもの)

使用したWindows10 PCのCPUスペック。

PS C:\Users\naka> Get-CimInstance Win32_WinSat


CPUScore              : 7.8
D3DScore              : 7.5
DiskScore             : 5.9
GraphicsScore         : 7.5
MemoryScore           : 7.8
TimeTaken             : MostRecentAssessment
WinSATAssessmentState : 1
WinSPRLevel           : 5.9
PSComputerName        :

Android版Chromeビルドの留意点3つ

上手く行かなくて諦めてしまわない為のポイント。

1.Ubuntuでビルドする

確実にビルドしたいならUbuntuを使うのが安パイです。ビルド途中でlsb_releaseコマンドが走ってUbuntuかDebianじゃないと機嫌を損ないます。(以下はCentOS8の例)

$ build/install-build-deps-android.sh
ERROR: The only supported distros are
        Ubuntu 14.04 LTS (trusty with EoL April 2022)
        Ubuntu 16.04 LTS (xenial with EoL April 2024)
        Ubuntu 18.04 LTS (bionic with EoL April 2028)
        Ubuntu 19.04 (disco)
        Ubuntu 19.10 (eoan)
        Debian 8 (jessie) or later

WindowsやMacOSXでのビルドは公式アナウンスでもサポートされていません。

Building the Android client on Windows or Mac is not supported and doesn’t work.

https://chromium.googlesource.com/chromium/src/+/master/docs/android_build_instructions.md

素直にUbuntuでビルドした方が得策です。

2.VirtualBoxのスペックは高めに設定

CPU数4、メモリ8Gbyte、HDD100Gbyteは最低限必要です。それ以下だとmakeのパラレルビルドを有効利用出来ずに時間が掛かってしまいます。

VirtualBoxにUbuntuをインストールした後でもCPU数やメモリサイズはVirtualBox Manager画面から簡単に変更出来るので、時間を無駄にしない為にも増やしておきます。

3.デフォルト設定ビルドはしない

公式手順通りにビルドすると、ただapkが欲しい場合には必要の無いNacl(Google Native Client)のビルドが走ったりデバッグビルドをしてしまって3、4日掛かってしまうかも知れない上に必要HDD容量が公式推奨の100Gbyteでは足りずに枯渇、ビルド失敗します。

後は公式ビルドオプションを見て「速くなる」と書いてあるものは指定したおいた方が無難です。

ビルド前準備

概ね公式手順に従って進めて行きます。

が、ビルドに必要なgit、python2、javaを先に入れておきます。
この三つを入れておかないと途中でこけてやり直すことになります。

gitインストール

$ sudo apt install git

python2.7インストール

Ubuntu18.04にデフォルトで入っているpython3コマンドではビルドに失敗します。素直にpython2.7を入れます。

$ sudo apt install python2.7

ChromiumをビルドするだけのUbuntu環境なのでpyenvやvirtualenvなどは入れず、単純に/usr/bin/pythonにpython2.7のシンボリックリンクを作って対応。

$ cd /usr/bin
$ sudo ln -s python2.7 python

java8インストール

Androidアプリ(apk)のビルドにはJavaが必要なので入れておきます。

$ sudo apt install openjdk-8-jdk

$JAVA_HOMEも設定しておかないと途中怒られて萎えるので設定。

$ sudo vi /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"   ← 追加

$ source /etc/environment

$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64/

Chromiumビルド開始

ようやくビルド環境の準備が出来ました、ビルドしていきましょう!
UbuntuにSSHクライアントでログインしておきます。

depot_toolインストール

gclientなどのビルドツールが格納されたgitリポジトリをcloneしておきます。

$ cd ~
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

上記リポジトリのコマンドが使えるようにパスを通しておきます。

$ export PATH="$PATH:/home/naka/depot_tools"

ソースをフェッチ

Android版Chromeのソースをダウンロード。そこそこ時間が掛かります。

$ mkdir ~/chromium && cd ~/chromium
$ fetch --nohooks android
$ cd src
$ gclient sync

ビルドする為の依存をインストール

これもそこそこ時間が掛かります。

$ build/install-build-deps-android.sh
$ gclient runhooks

ninjaビルドの用意

chromiumビルドに使うninjaの設定ファイルを生成。ninjaはmakeの並列コンパイル機能を利用して分身、忍者のように速く(makeの1/10)コンパイルできます。

gn args out/Default

viが開くので以下の内容を記述して保存。以前はビルドが速くなった「use_jumbo_build=true」は残念ながらdeprecatedになってしまったようです。指定してもエラーが出ます。

naka@naka-VirtualBox:<br/>/chromium/src$ gn args out/Default
Waiting for editor on "/home/naka/chromium/src/out/Default/args.gn"...
Generating files...
ERROR at //build/config/jumbo.gni:16:1: Assertion failed.
assert(!use_jumbo_build,
^-----
The jumbo build is no longer supported. Please remove any uses of 'use_jumbo_build', 'jumbo_build_excluded', or 'jumbo_file_merge_limit' from your args.gn file and re-run GN.
See //media/media_options.gni:9:1: whence it was imported.
import("//build/config/jumbo.gni")
^--------------------------------
See //BUILD.gn:22:1: whence it was imported.
import("//media/media_options.gni")
^---------------------------------

最終的に以下のビルドオプションにしました。

# Build arguments go here.
# See "gn args <out_dir> --list" for available build arguments.

target_os="android"
target_cpu="arm64"
enable_nacl=false
symbol_level=0
blink_symbol_level=0
is_debug=false
is_component_build=true

生成が終わるとout/Defaultにファイルが出来上がります。args.gnを編集すればビルドパラメータを再設定することが出来ます。

$ ls out/Default/
android_chrome_versions.txt  args.gn      build.ninja.d   clang_x64           clang_x86         gen          obj
android_clang_arm            build.ninja  build_vars.txt  clang_x64_v8_arm64  clang_x86_v8_arm  gen.runtime  toolchain.ninja

ビルド開始

Android7以上用のChromiumとしてビルド開始。
放置して寝たり、ご飯を食べたり、気長に待ちます。

$ autoninja -C out/Default monochrome_public_apk

私の環境だと凡そ10時間後、apkが出来上がりました。
(timeしとくんでした)

$ ls -lh /home/naka/chromium/src/out/Default/apks/MonochromePublic.apk
-rw-rw-r-- 1 naka naka 288M  1月  4 09:08 /home/naka/chromium/src/out/Default/apks/MonochromePublic.apk

この設定で必要なディスク使用量はOS分を差し引くと大体50Gbyte強。

$ df -h
ファイルシス    サイズ 使用  残り 使用% マウント位置
/dev/sda1       148G   60G   81G  43% /

時間は掛かりましたが、apkが出来て一安心です。

Android端末へインストール

Androidの設定で野良アプリをインストール可能な状態にしておき、適当なHTTPサーバにapkをアップロード、Androidのブラウザからダウンロードしてインストールします。

ホーム画面から起動してみると・・・

違和感の無いChrome(Chromium)を自分でコンパイルしてインストールすることが出来ました。

まとめ

Windows10に入れたVirtualBox(CPU4コア、メモリ8Gbyte)と、ビルドが速くなりそうなオプションを指定して凡そ10時間でした。大分掛かりましたね・・・。

Googleの中の人は「goma」と名付けた分散コンパイル環境を使っているそうで、自前ビルドでもcpuクロックとコア数が多ければninjaビルドは速くなります。

ただこのスペックでも一度ビルドしてしまえば2回目以降は数十分ほどになるので、辛いのは最初ですね。一度ビルドに成功すれば、後は大分楽になると思います。

そもそも最初のビルドのスペックが足りない場合は、安くて良いのでPCを新調しておきましょう。

自分だけのブラウザ、作っちゃいましょう!

-android, chrome, linux

執筆者:

関連記事

GitLabのIPを変更したらMattermostにログイン出来なくなった話「the redirect uri included is not valid. 」

目次1 発端2 環境3 GitLabのIP変更設定を開始4 そしてハマる5 解決6 結局どこに設定が保存されていたか7 まとめ 発端 先日オフィスの引っ越しが有りネットワークセグメントが変わる為、Gi …

B2BスマホアプリをGooglePlay、AppStoreに公開することがお勧め出来ない7つの理由とその対策

商材の性質やシーンに応じてスマホアプリをGooglePlayやAppleStoreのようなストアに公開することがマイナスに働くこともあります。 商材として価値の有る電子データをお持ちの商社さんとアプリ …

テキストファイル内の改行コード差異を見つけるワンライナー

こんなケースを想定。 ファイル内容は同じなのにdiffで違いが出るWeb上でソースレビューする時に同じ内容の行なのに差分が出て紛らわしい これらの原因はWindows、Mac、Linuxが入り混じった …

PWAストアの実現性についての考察

(*)この記事内では「Google Play」、「App Store」、「Microsoft Store」で公開されているアプリを「ストアアプリ」と呼んでいます。 先日B2Bアプリはストアアプリにする …

認証付きHTTPプロキシを認証無しで利用する下位プロキシをsquidで構築

目次1 はじめに2 環境3 手順3.1 squidをインストール3.2 /etc/squid/squid.confを設定4 squid起動4.1 3128ポート開放4.2 各種端末で上記プロキシを設定 …

 

Shingo Nakanishi
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。