狠狠撸

狠狠撸Share a Scribd company logo
niconico Android
株式会社ドワンゴ 松本明浩
niconico Android は2チーム構成
niconico Androidは
? クライアントチーム
? サーバチーム
の2チーム構成。
はじめに
Q. niconico Androidって何?
A. ニコニコ動画?生放送を視聴するための
Androidアプリです。
Q. Webじゃダメなんですか
A. AndroidはOS4.0以降からFlash Playerが提供さ
れなくなりました
▽ 縦画面
▽ 横画面
ニコニコAndroid開発 – アプリ?サーバサイド両面から見た開発事情 クライアント編
開発言語
Java
Android Java
? Dalvik VM上で動作
? Javaのクラスファイルをdexに変換
? Cとの連携(JNI)をサポート
? etc...
…Android Javaってどうなの
個人的な感想
? 多少の特殊仕様はありつつも、違いを気にせず
書ける
? Javaのライブラリ?コードが流用できる嬉しさ
安定性?信頼性
汎用性
ライブラリの豊富さ
規模?ユーザ数
GUIとしての実績
開発プラットフォーム
としての
実用性
Android開発ってどうなの
Androidの特性にあわせた開発?運用が必要
今日話したいこと
? Androidアプリの開発方針
? Androidアプリの運用方針
础苍诲谤辞颈诲アプリ开発の方针
大まかな開発方針
? Javaだけで完結するコアな層とViewに関与する
層で分離する
? セキュリティ上重要なロジックは極力サーバに
任せる
? FragmentやActivityで全てのビューを管理する
中央集権型の構造にする
Androidといえば
機種依存
機種依存問題について
? 各ベンダーが各々独自実装を加える
? 改変場所の予想はつかない
? 基本的には全ての機種の違いを吸収したい
? 商品としてアプリを開発する時の大きな壁
どう対応するか
Androidに任せない
事例1 動画プレイヤー
? とある端末でのみ動画の描画がカクつく
? 報告にあがった端末ではたしかに起きた
? 調査したところ再生時間を表示するために
MediaPlayer#getCurrentPosition()
を複数回呼ぶと特定端末で描画がカクつくこと
が分かった。
事例1 解決策
時間管理をMediaPlayerに任せずに
自前で管理する方式に変更
0:00 3:00
現在時間との差分を計って再
生時間を計算
事例2 タイムシフトプレイヤー
? 複数種類の端末でHLSのシークが出来ない
? タイムシフトはHLSで配信されている
? 調査してみるとHLSを読み込んだ際の
MediaPlayer#seekTo()
は各端末で各々独自の動きをしていることが分
かった
HLSとは
? Appleの開発した映像ストリーミング用プロトコ
ル
? 中身は数秒単位のTSファイルのURLリスト
ヘッダ
tsファイルのパス
tsファイルのパス
tsファイルのパス
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
------------------------------------------------------
http://devimages.apple.com/iphone/samples
/bipbop/gear1/fileSequence0.ts
------------------------------------------------------
http://devimages.apple.com/iphone/samples
/bipbop/gear1/fileSequence1.ts
------------------------------------------------------
http://devimages.apple.com/iphone/samples
/bipbop/gear1/fileSequence2.ts
調査した結果
端末A 端末B 端末X
シーク完全不可 巻き戻し不可 正常動作
HLS形式では生放送のような受動的な再生しか出来ない
事例2 解決策
動画のシーク処理をAndroidに任せずに
自前で管理する方式に変更
ヘッダ
tsファイルのパス1
tsファイルのパス2
tsファイルのパス3
tsファイルのパス4
tsファイルのパス5
tsファイルのパス6
tsファイルのパス7
プロキシサーバ
MediaPlayer
ヘッダ
tsファイルのパス2
tsファイルのパス3
tsファイルのパス4
シーク時間を通
知
Playerは受動的に
再生するだけ
指定された場所から
tsファイルを取り出す
機種依存のバッドノウハウは様々…
? 画面解像度を考慮した文字配置
? WebViewは出来る限り使わない
? メモリの貧弱な端末への対応
? Media Playerの自由度
……など
共通して対策出来ること
? 実装前に仕様?ドキュメントを読む
→ がっつり調査しておいた方が良い
? 重要な機能のデバッグは複数端末で行う
? ヒントが無かったらOSのソースを読んでみる
今後Android Javaに期待すること
? 非同期処理のコードの冗長さへの対応
→ 匿名関数が解決してくれる?
→ Annotation Programming?
础苍诲谤辞颈诲アプリ开発のチーム运用
開発メンバー
? 開発メンバーは5人 + デザイナー 1人
? 個別の担当はなく、全領域カバーする
開発スケジュール
設計
実装
テスト
設計
実装
テスト
設計
実装
テスト
タスクタスク タスク
2週間
イテレーション
? 2週に1度イテレーションMTGで全体の進捗を
確認
? 毎朝10分のMTGで個別のタスクの進捗を確認
? 毎回フィードバックを行いタスクを调整
開発のためのツール
? チケット?タスク管理:JIRA
? コードレビュー: fisheye もしくは github:e
? テストツール:Jenkins
テスト落ちるとパトランプが回る
バグはどうやって見つかるか
? ユーザが新しいバグを発見することも多い
? Google 笔濒补测のバグレポートが役に立つ
Androidアプリのリリース
? アップデートはユーザにダウンロードの負担を
かけさせないため、なるべく間を空ける
? 現状は2週間程度
? 自动ビルドツールでデプロイ
Android開発について
? まだデファクトになっていない部分も多々ある
→ テストやフレームワーク、UI部品など
? Androidの特性にあわせた開発ペース?開発方
針が必要
ご清聴ありがとうございました

More Related Content

ニコニコAndroid開発 – アプリ?サーバサイド両面から見た開発事情 クライアント編