Android 6.0でChromium WebViewがソースビルドされなくなったので、自前でChromiumをビルドをする


あれ、external/chromium_org どこいった?

Android 6.0のソースが検索サービスに現れた。
さて、ブラウザやWebViewがどうなったか見てみるか、と思った次の瞬間・・・

なに???

https://android.googlesource.com/platform/external/chromium-webview/+/2773fff0a2927264eb37d9e532315aea0ba0ff20/README

Building the Chromium-based WebView in AOSP is no longer supported. WebView can
now be built entirely from the Chromium source code.

【意訳】
もうAOSPではChromiumをソースバンドルしないよん〜
改造するならじぶんで勝手にやってね〜♪

 
 
まじかーーーーー!!!!!!!!

とりあえずソースを落としてみる

とはいえ、親切にREADMEに、いろいろ書いてるので… (とはいっても、Chromiumプロジェクト内でドキュメントによって言ってることが違っていたりするので、このへんを参考にしつつ)

Chromiumソースコードを取得
mkdir ~/Chromium
cd ~/Chromium
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
./depot_tools/fetch --nohooks android

で、

ビルド
PATH=`pwd`/depot_tools:$PATH gclient runhooks

実行した。

すると、エラーがでました

Updating projects from gyp files...
Error while checking Android SDK extras versions. Could not find the "extra-google-google_play_services" package in /home/yi01/Chromium/src/third_party/android_tools/sdk//extras/google/google_play_services. Please run build/install-android-sdks.sh to download it.
gyp: Call to 'python             ../../build/check_sdk_extras_version.py             --package-id extra-google-google_play_services             --package-location /home/yi01/Chromium/src/third_party/android_tools/sdk//extras/google/google_play_services' returned exit status 1 while in /home/yi01/Chromium/src/third_party/android_tools/android_tools.gyp.
Error: Command '/usr/bin/python src/build/gyp_chromium' returned non-zero exit status 1 in /home/yi01/Chromium
Hook '/usr/bin/python src/build/gyp_chromium' took 20.86 secs

ということで、

pushd src
./build/install-android-sdks.sh
./build/install-build-deps-android.sh #ついでに
popd

PATH=`pwd`/depot_tools:$PATH gclient runhooks

と再度ためしたら、通りました。ここまでが前準備。

ビルド

READMEに書いてあるのを参考に

cd src

build/gyp_chromium -DOS=android -Dtarget_arch=arm -Drelease_unwind_tables=0 -Dbuildtype=Official -Dchrome_build_id='2e7c7a0f-c733-4b9a-9c8e-d3cf0938369b'
PATH=`pwd`/../depot_tools:$PATH ninja -C out/Release system_webview_apk

を実行。

out/Release/SystemWebView.apk というAPKが出来上がります。

$ adb root
$ adb remount
$ adb shell rm -r /system/app/webview/*
$ adb shell mkdir -p /system/app/webview/lib/arm/
$ adb push SystemWebView.apk /system/app/webview/
$ 7z x SystemWebView.apk lib/armeabi-v7a/libwebviewchromium.so
$ adb push lib/armeabi-v7a/libwebviewchromium.so /system/app/webview/lib/arm/
$ adb reboot

で、ブラウザを起動すると・・・

何の変哲もないブラウザですね。
#いちおうAndroid 6.0のFloating ActionModeアピールw
 
  
  

気になる点

version_codeが未指定

10-21 19:11:56.375   807   881 W PackageManager: Downgrade detected: Update version code 1 is older than current 246011900

ってかんじで「おぉ?」となることがあります。

APKをバラして見てみると、

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.webview" platformBuildVersionCode="23" platformBuildVersionName="6.0-2166767">

version_codeの定義がありませんね…

android_webview/apk/java/AndroidManifest.xml あたりが使われているんじゃないかなーと予想。(未検証)

  

おまけ

Android SDKについて

24.0.1やりました。

wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar xzvf android-sdk_r24.4.1-linux.tgz

export ANDROID_HOME=$HOME/android-sdk-linux
export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH

ビルド環境について

AOSPのときはDebianでもビルドできてたのに、Chromiumプロジェクトのやつをビルドしようとすると、
Ubuntu 12.04/14.04/14.10/15.04 じゃないとビルドができない という最大の罠があります。
(私はDebian大好き人間なので、このためだけにUbuntuの環境を用意するはめになったw)

なんとなくこのへんをみて、apt-getで以下のパッケージは入れました。

sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-7-jdk openjdk-7-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev

sudo apt-get install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev