WebRTCを Androidネイティブアプリに実装する


ワイヤレスジャパン2015で、『メイドさんの吐息を地球の裏側に転送する』なんてタイトルで発表して、記事『メイドさんの吐息を感じて、タッチ――「日本Androidの会」秋葉原支部セッション』にしていただいた。

私が作成したデバイス『ソーシャルうちわ』は、1対多の通信を行うので、WebSocketを採用していたが、アクセサリ部のメンバーが作成した吐息を伝送するデバイスは1対1の通信であるため、WebRTCを採用している。
自分が作っているデバイスは必ずしも、インターネットのサーバ経由で通信しなくてもいい場合もあるので、AndroidのアプリにWebRTCを実装する必要性もあるので、実装方法を調査していた。実際やってみると、苦難の連続だったので、ここに覚書を示す。

Googleで実装方法を検索してみると、WebRTCの公式ページにサンプルがあるのでこれをベースにやっているようなので、サンプルがコンパイルでき、実機で動くまでをやってみる。

まず、躓いたことを先に書くと、Max OSX Yosemite上で、コンパイルしようとしたら、うまく行かなかった。
なので、WebRTCなAndroidネイティブアプリケーションについてに書いてあるように、Linux上でコンパイルすることにした。

まずは、自分が実際にやった環境のご紹介

Mac Book Air (2013 Mid)
OS X Yosemite(10.10.3)
Paralleses Desktop上で、Ubuntu 14.04.2 LTSをインストールして、ログイン後ターミナルを立ち上げた状態から、やったことを書いてみる。(メモリーは2GBを割り当てました)

まずは、お約束のアップデート

sudo apt-get update
sudo apt-get upgrade

ビルドする際に必要なパッケージをインストールする

sudo apt-get install git subversion openjdk-7-jdk
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

みたいなんですが、途中で、c++のコンパイラーが必要なので

sudo apt-get install g++

をやっておきましょう。

その後は

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=`pwd`/depot_tools:"$PATH"
export GYP_DEFINES="OS=android"
fetch webrtc_android

で、ソースコードを取得できます。この作業はめっちゃ時間(1時間以上)がかかりますので。忍耐強く待ちましょう。途中で止めたり(Ctrl+C)した場合は、

gclient sync

で、再開させましょう。

cd src
. build/android/envsetup.sh
export GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 libjingle_java=1 enable_android_opensl=0 $GYP_DEFINES"
gclient runhooks

で、コンパイルをすることになるのですが、よくある手段をやると、コンパイルが途中で止まるので、その前に必要なコンポーネントのインストールをしましょう。

./build/install-build-deps-android.sh

インストールが終わったら、忍者を呼びましょう

ninja -C out/Release -j2 AppRTCDemo

これで、コンパイルすることが出来ました。
サンプルアプリのapkファイルは、/src/out/Release/AppRTCDemo.apkから取得してください。
これを、OSX上に持ってきて、実機にインストールするとサンプルアプリを動かすことが出来ます。
2015/06/02現在で、apkできた方法を紹介しました!

ご参考までに