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