ことのおこりは
以前WebRTCを自前でビルドしていた時から数えて幾千年(そんな前じゃない?)、久しぶりにWebRTCのビルドをしてみました。相変わらずのWebRTCのビルドの苦労は今更の話なので置いといて、今回はサンプルプロジェクトについて書きます。
WebRTCのリポジトリにはネイティブAPIを使ったAppRTCMobileというサンプルアプリが入っています(昔はAppRTCという名前だったような)。テスト用のサーバーも用意してあって至れりつくせりでデモアプリ動かすのは楽勝\(^o^)/
なはず。
ついカッとなって
楽勝なはず、たぶん、そのはずなのですが実際に動かしてみようとすると、今のAndroid Studio(以下AS)ではサンプルアプリそのままではビルドが通りませんでした?。暫く頑張ったものの最新のAS3.1.2だと簡単にはいきそうにないのでうがぁーとなっていたところ、オフィシャルのプレビルドライブラリがjCenterにあることがわかったので、カッとなってオフィシャルAppRTCアプリをプレビルドライブラリを使うように書き換えてみました。
作ったサンプルアプリはGitHubで公開しています。動作自体はWebRTCオフィシャルAppRTCMobileアプリと同じです、すくなくとも作った時点では。
GitHubのリポジトリへのリンクはこれ
↓↓↓↓↓
AppRTCMobile
もう少し細かく
以前はWebRTC自体のビルドと一緒にAppRTCのapkも生成されるようになっていましたが、いつのまにかWebRTC自体のビルド時にはAppRTCのASのプロジェクトを生成するだけになっていました。WebRTCのwebサイトの下部にあるNATIVE CODEセクションのAndroidを選択すると詳しい手順が載っていので興味がある人は試してくだされ(ビルド通らない可能性が高いけど)。
WebRTCのwebサイトでの手順によれば、AS用のプロジェクトを生成したあとASへインポートして使えということになっています。インポートまでは(相対的に)簡単にいきました。しかしいざビルドして実行しようとするとAS様が色々いちゃもんを付けてくるのです(T T)
問題は、
- ASの標準的なプロジェクト構成ではない?ガーン
- WebRTCのJNIラッパー周りのコード&AppRTCMobile固有のコードが混在
- カッとなって何のエラーだったか記憶が飛んでしまっていますが(忘れたい過去ってだれにでもあるやん(*ノω・*)テヘ)、依存関係がうまく解決できなかったか、クラスが重複していたとかそんな感じ
ということで、ここ最近のAS3.xでの変更に対応できていないみたいでした。この時点では、エラーの感じ的にはAS2.3.3だったらビルド通るのかもと思いつつ、いまさらAS2.xじゃあるめぇと自前でネイティブAPI周りのaarをビルドするように作り変えるしかないかなぁと思っていました。
???ところが???
ふてくされて瞑想にふけっていたところ(ようはお昼寝してた?Zzz)、突然jCenterにあるんじゃね?と電波を受信したのです?
調べてみるとありました。jCenter/google-webrtc
おぉ~~~(@@)
ということで、jCenterのオフィシャルプレビルドライブラリを参照するAS3.1.xサンプルプロジェクトを作るに至ったのです。
以前とはそれなりに変更されているとはいえ、昔苦労した記憶を元に現行のオフィシャルサンプルアプリからAppRTCMobile固有コードをコピペニアンすること約2時間、楽勝じゃん?
(オフィシャルのサンプルアプリをビルド&実行しようとする試みで半日以上溶かしたけど)
中身は本家AppRTCMobileほぼそのものなので今回はコードと解説はなしです^^;
いやぁ~素晴らしい(自画自賛)
WebRTC自体を自前でビルドするのは、以前に比べるとかなり楽になっていたとはいえ依然として茨の道です。それなりに基本的人権のあるLinux機とネット環境と下調べをしないとAndroidやiOSでネイティブAPIを動かすところまではたどりつけません。現に今回もオフィシャルサンプルアプリのビルドが通りませんでした。
でもオフィシャルのプレビルドライブラリを使うと、普通のASプロジェクトとしてアプリを作れるので、そこそこ高スペックなLinux機を用意しなくても、あるいはLinuxやWebRTCのビルド関係の知識がなくてもJavaとAndroidのアプリの知識だけでWebRTCを使ったビデオチャット機能が組み込めるようになったのです?
ということでたいして中身のない記事でした、チャンチャン?
(次はjanus-gatewayへ繋いでみた、を書くじょぉー)