Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Copyright © 日本システム開発株式会社 All Rights Reserved
Android開発ノウハウ、 一部おしえます
2012年2月8日 青森県Android技術セミナー
日本システム開発 第2事業部 石原正樹(@ishihara_twit)
p2 p2
目次
1.はじめに
2.アプリケーション開発におけるノウハウ(1)
3.アプリケーション開発におけるノウハウ(2)
4.プラットフォーム開発におけるノウハウ
5. Android4.0に関連したその他の話題
p3 p3
1. はじめに
p4 p4
1. はじめに
Android4.0が登場し、Google社の公約どおりソースコードも公開され、Androidは新しい時代に突入しようとしています
本稿では、弊社がいままでのAndroid開発で蓄積した開発ノウハウを紹介するとともに、これからのAndroid4.0の話題もからめて紹介します
p5 p5
1. はじめに
本稿で紹介する要素
アプリケーションのUIパフォーマンスに関する基本的な技術要素の紹介
プラットフォーム開発の事例として動画再生アクセラレートの紹介
Android3.x/Android4.0の一部新機能の概要紹介
RenderScript
マルチスクリーン
p6 p6
2. アプリケーション開発におけ るノウハウ(1)
p7 p7
2. アプリケーション開発におけるノウハウ(1)
Androidアプリケーションの開発で今も昔も変わらず存在する問題点といえば「UIの速度」
Android4.0ではUIがさらに拡張されており、UIに対する要求は留まることを知りません
Android2.3 Android4.0
p8 p8
2. アプリケーション開発におけるノウハウ(1)
AndroidアプリケーションのUIパフォーマンスを向上させるには、Androidアプリケーションが基本として「シングルスレッド・モデル」であるということを理解しなければなりません
p9 p9
2. アプリケーション開発におけるノウハウ(1)
「シングルスレッド・モデル」とは?
アプリケーション内の全てのコンポーネントは mainスレッド と呼ばれる、単一のスレッドで実行されることを指します
Androidアプリケーション コンポーネント
Activity
Broadcast Receiver
Service
Activity
mainスレッド
p10 p10
2. アプリケーション開発におけるノウハウ(1)
シングルスレッド・モデルであることについて意識しておくべきこと
1つのアプリケーションの中に同時に実行したいコンポーネントが多数存在すると、UIへの影響が顕著に表れます
UIの表示はActivityを処理しなければなりません
多数のコンポーネントが存在するということは、mainスレッドがActivityの処理に割ける時間が少なくなるということです
対策
アプリケーション内でプロセスを分割すること
ワーカースレッドを適切に利用すること
p11 p11
2. アプリケーション開発におけるノウハウ(1)
Android3.x/4.0では…
並列処理フレームワーク「Loader」の導入
Android2.3までは、ワーカースレッドを扱う「AsyncTask」というフレームワークが存在していましたが、さらに拡張が行われています
分散処理フレームワーク「RenderScript」の導入
(後述します)
p12 p12
3. アプリケーション開発におけ るノウハウ(2)
p13 p13
3. アプリケーション開発におけるノウハウ(2)
AndroidアプリケーションのUIパフォーマンス向上のためにもう1点、ViewHierarchyのロック時間を説明します
p14 p14
3. アプリケーション開発におけるノウハウ(2)
ViewHierarchyとは?
AndroidのUIを表現するViewのツリーのこと
RelativeLayout
TextView
Activity
ListView LinearLayout
Button Button
p15 p15
3. アプリケーション開発におけるノウハウ(2)
ViewHierarchyのロック時間とは?
画面更新の開始から完了までの時間のこと
画面更新の際はViewHierarchy全体がロックされ、各Viewの画面が更新、その後ViewHierarchyのロックを解除します
p16 p16
3. アプリケーション開発におけるノウハウ(2)
ViewHierarchyのロック時間のイメージ
(最悪ケースの場合)
RelativeLayout
TextView
Activity
ListView LinearLayout
Button Button
Lock
Draw
Draw
Draw Draw Draw
Draw Draw
p17 p17
3. アプリケーション開発におけるノウハウ(2)
ViewHierarchyのロック時間
ViewHierarchyの階層が深いほどロック時間が長くなります
ViewHierarchyのツリーが大きいほどロック時間が長くなります
ViewHierarchyの各Viewの描画要素(ex.背景画像が設定されている)が多いほどロック時間が長くなります
ViewHierarchyのロック時間が長いほどUIパフォーマンスは下がります(画面更新のFPSが下がる)
p18 p18
3. アプリケーション開発におけるノウハウ(2)
対策
hierarchyviewer/layoutoptを使いViewHierarchyの分析/最適化をおこなう
SurfaceViewを用いて高速描画をおこなう
p19 p19
3. アプリケーション開発におけるノウハウ(2)
hierarchyviewer/layoutoptとは?
Android SDKに付属するツール
hierarchyviewerはViewHierarchyを可視化
layoutoptはViewHierarchyの冗長な部分を検出
各種ツールは
Android SDKの
バージョンアップで
徐々に進化しています
(右図はR16の
hierarchyviewer)
p20 p20
3. アプリケーション開発におけるノウハウ(2)
SurfaceViewとは?
ViewHierarchyのSurface(描画バッファ)とは別のSurfaceを独自に用意する特殊なView
ViewHierarchyの中に通常のViewと同じように組込むが、ViewHierarchyとは別レイヤとなる
ViewHierarchyの描画とは連動しないため、描画ロックの対象外となる(ロック時間がない)
mainスレッドで描画を行わない(独自のスレッドで描画処理を実行する)
結果、SurfaceViewのみの高速な描画が実現できる
p21 p21
SurfaceViewのイメージ
ViewHierarchyの一部に穴を空けたようなかたちでSurfaceViewレイヤを見せる
SurfaceView
3. アプリケーション開発におけるノウハウ(2)
ViewHierarchy
p22 p22
3. アプリケーション開発におけるノウハウ(2)
SurfaceViewの注意事項
特徴を理解せずに使うことは障害のもと
SurfaceViewで全画面を占有する場合は問題になることは少ないが、ViewHierarchyに組込んで使う場合は注意が必要
ViewHierarchyの階層上では前面にあるはずでも、実際のレイヤでは背面に位置するため、レイヤ管理が直感的ではなくなる(特殊な構成となる)
特に複数のSurfaceViewを扱う場合のレイヤ管理は問題が多発する
p23 p23
4. プラットフォーム開発におけ るノウハウ
p24 p24
4. プラットフォーム開発におけるノウハウ
Androidプラットフォーム開発とは
ここでは、AndroidのOS部分を製品に搭載しカスタマイズする開発のことを指しています
p25 p25
4. プラットフォーム開発におけるノウハウ
Androidプラットフォーム開発の現状
オープンソースであることが功を奏して、プラットフォーム開発に関する技術情報も広く出回るようになりました
Androidを載せる・動かすことはそこまで敷居の高いことではなくなっています
p26 p26
4. プラットフォーム開発におけるノウハウ
Androidプラットフォーム開発の1つの課題
既にAndroidが動いていることは珍しくなく、要求は高度化する傾向にあります
高度化する要求を叶えるため、ハードウェアのアクセラレーションが1つの課題事項として挙げられます
p27 p27
4. プラットフォーム開発におけるノウハウ
弊社の取り組み事例
Renesas Electronics社製 新統合SoC「R-Mobile A1」における動画再生アクセラレート
R-Mobile A1 引用元:ルネサスエレクトロニクス http://japan.renesas.com/products/soc/
assp/mobile/r_mobile/a1/index.jsp
(参考) Armadillo-800 EVA 引用元:アットマークテクノ http://armadillo.atmark-techno.com/armadillo-800-EVA
p28 p28
4. プラットフォーム開発におけるノウハウ
「R-Mobile A1」とは?
ARM Cortex-A9コア(アプリケーション・プロセッサ)、および SH4Aコア(リアルタイム・メディア処理・プロセッサ)を搭載した統合SoC
グラフィックスコアとして高性能3Dグラフィックスエンジン PowerVR SGX 540 を搭載する
フルHD動画記録・再生、地上波デジタル放送再生に対応
R-Mobile A1
ARM Cortex-A9 800MHz
(Application Processor)
PowerVR SGX540 (3D GPU)
SH4A 600MHz
(Realtime/Media Processor)
p29 p29
4. プラットフォーム開発におけるノウハウ
取り組み内容
R-Mobile A1上で動作するAndroid(2.3)に動画再生アクセラレート機能を追加し、フルHD動画コンテンツのスムーズな再生を可能とする
動画再生のアクセラレートには OpenMAX を使用する
OpenMAXとは?
OpenGLと同じく Khronos Group が策定したロイヤリティフリーのマルチメディア処理API
Big Buck Bunny images courtesy of ©
copyright 2008, Blender Foundation /
www.bigbuckbunny.org
p30 p30
4. プラットフォーム開発におけるノウハウ
Androidの動画再生処理のアーキテクチャ
StageFright を利用したアーキテクチャ
Android 2.3
Linux
MediaPlayer 通常アプリケーション
StageFright
Software Codec/Renderer
SurfaceFlinger
SGX (GPL module)
SGX (user module/ OpenGL ES)
Frame Buffer
Software Renderer
p31 p31
4. プラットフォーム開発におけるノウハウ
この構成の問題点
Android Open Source Project のソースコードを中心に構成すると、ソフトウェアでのコーデック/レンダリング処理が多くなってしまう
動画再生に必要な処理の流れ
動画のサイズに応じて処理コストも増大
フルHD(1920×1080)ともなると多大な負荷が予想される
デコード リサイズ 画面描画
動画 ファイル/ ストリーム
p32 p32
4. プラットフォーム開発におけるノウハウ
ソフトウェアでのデコード/レンダリングによる出力性能は?
概ね3秒~5秒に1コマの再生
(約0.2~0.3FPSの性能) ※ まだ正確なフレーム数は確認できていないため目視による 想定値です
※ ソフトウェアの実装、および動画フォーマット /ビット レートなどにより変動する可能性があります
p33 p33
4. プラットフォーム開発におけるノウハウ
OpenMAXによるアクセラレートを有効にした動画再生アーキテクチャ
Android 2.3
Linux
MediaPlayer 通常アプリケーション
StageFright
StageFright用 プラグイン
OpenMAX サービス
libstagefrighthw
liboverlay
Video4Linux2 SH4A通信
(メディア処理)
SurfaceFlinger
SGX (GPL module)
SGX (user module/ OpenGL ES)
Frame Buffer
Software Renderer
p34 p34
4. プラットフォーム開発におけるノウハウ
OpenMAXによりアクセラレートされたデコード/レンダリングの出力は?
コマ落ちのないスムーズな動画再生が実現(25FPS以上の性能)
※ まだ正確なフレーム数は確認できていないため目視による 想定値です
※ ソフトウェアの実装、および動画フォーマット /ビット レートなどにより変動する可能性があります
p35 p35
4. プラットフォーム開発におけるノウハウ
Android3.x/Android4.0では…
OpenGL ESによる画面描画アクセラレート拡大
Android2.3までは、アプリケーションからの画面描画操作の一部しかアクセラレートされていませんでした
Android3.x/Android4.0では、それらの画面描画操作がOpenGL ESを経由しハードウェアアクセラレートするように改善が行われています
Android3.x/Android4.0ではOpenGL ESによるアクセラレートの重要度が高くなっています
分散フレームワーク「RenderScript」の導入
(後述します)
p36 p36
5. Android4.0に関連したその他
の話題
p37 p37
5. Android4.0に関連したその他の話題
5-1. 分散フレームワーク(RenderScript)
5-2. マルチスクリーンの時代
p38 p38
5-1. 分散フレームワーク(RenderScript)
RenderScriptとは?
Android3.0から導入された分散処理フレームワーク
主に3Dやアニメーションの描画処理に使われる
C99の記法に似た独自定義のスクリプト言語(RenderScript)を使用する
マルチコアCPU/GPU/DSPを分散の対象とする
プラットフォームはもちろん、一般のAndroidアプリケーションでも利用することが可能
p39 p39
5-1. 分散フレームワーク(RenderScript)
RenderScriptの重要性は?
ARMプロセッサはマルチコア化の流れができつつある
ARM Cortex-A9 MPCoreでは最大4コアが実装可能
ARM Cortex-A15 MPCoreでは最大8コアが実装可能
Tegra3(Kal-El)では既にCortex-A9による4コアが実現
最新SoCではヘテロジニアス・マルチコアの流れが加速
DSPやGPUなどを内蔵するSoCが急速に増加中
TI社最新SoCの OMAP5 は ARM/DSP/GPU を総計すると合計6コア以上のスペックとなる
前述のR-Mobile A1も ARM/SH(DSP含む)/GPU のヘテロジニアスマルチコアの一種と言える
p40 p40
5-1. 分散フレームワーク(RenderScript)
RenderScriptは実行環境に合わせて最適な分散/並列処理を実行することを目的としています
実行環境によりコア数は変化する
1コア/2コア/4コア/8コア/continued...
DSP無し/有り
GPU無し/有り(シェーダ性能の違いも影響)
スクリプト言語であるため実行時に最適な実行(分散)方法を決定することができる
コンパイラ言語だとコンパイル時に実行内容が固定化されてしまう
p41 p41
5-1. 分散フレームワーク(RenderScript)
RenderScriptの影響(アプリケーション)
既存のマルチスレッドプログラミングでは、これからのプロセッサの進化(マルチコア化)による恩恵(フリーランチ)を得ることが難しいため、新たな並列化の手法として期待される
ただし、現状ではRenderScriptの適用範囲はデータ演算、グラフィックス描画に限られているため全ての処理に適用できるわけではない
p42 p42
5-1. 分散フレームワーク(RenderScript)
RenderScriptの影響(プラットフォーム)
Android3.x/Android4.0で多様されるUIアニメーションの一部にRenderScriptが使われはじめている
今後はRenderScript実行フレームワークの最適化可否によりパフォーマンスの違いが出る可能性あり
p43 p43
5-1. 分散フレームワーク(RenderScript)
分散フレームワークについて
Android以外に目を向ければ分散/並列処理系は他にも研究されている言語/フレームワークが多数存在しています
OpenCL/OpenMP/Erlang/Scala Actor/etc…
RenderScriptはその中の1つと考えることもできます
今後スタンダードになるかはまだ未知数と言えます…
p44 p44
5-2. マルチスクリーンの時代
Androidがターゲットとするデバイスは急速に拡大しつつあります
スマートフォン
タブレット
テレビ(GoogleTV)
etc…
p45 p45
5-2. マルチスクリーンの時代
どのデバイスにもAndroidMarketが搭載されていることを考えると、1つのアプリケーションは多種多様なデバイスで実行される可能性があります
大きな違いはスクリーンサイズの違い
(物理的なサイズ、解像度も異なる)
アプリケーションは複数のスクリーン(マルチスクリーン)に対応できればマーケットが広がる可能性あり
p46 p46
5-2. マルチスクリーンの時代
Android3.x/Android4.0では…
マルチクリーン定義の拡張
マルチスクリーン向けフレームワーク「Fragment」の導入
p47 p47
5-2. マルチスクリーンの時代
Fragmentとは?
Activityに配置するUI部品を集約しモジュール化することができるUIフレームワーク
Fragmentの単位でUIを動的配置することができる
引用: http://developer.androi
d.com/guide/topics/fun
damentals/fragments.
html
p48 p48
5-2. マルチスクリーンの時代
他に注意すべき事項
使用可能なインプットデバイスも異なる
スマートフォン/タブレット
タッチパネルを使用する
テレビ(GoogleTV)
タッチパネルは使用しない
リモコン(コントローラ)のみを使用する
p49 p49
5-2. マルチスクリーンの時代
リモコン(コントローラ)はD-Padでの操作がメイン
テレビでは、スマートフォン/タブレットを前提としたUIでは問題が発生する場合があります
テレビの場合、リストに100個のアイ テムがあると「決定」ボタンに到達す るためには、D-Padを100回押さなけ ればならない
スマートフォ ン/タブレッ トではタッチ 操作のため特 に問題はなし
p50 p50
5-2. マルチスクリーンの時代
マルチスクリーンの問題
Fragmentをスクリーンの種類に合わせて動的配置することである程度解決は可能です
しかし、自動で問題を解決してくれるわけではないのでターゲット毎の作り込みは必要となります
今後もAndroidのバージョンアップで、マルチスクリーンに関する拡張は行われていくものと予想されます
p51 p51
ご清聴ありがとうございました。
ご不明な点がありましたら下記までどうぞ。
日本システム開発株式会社 http://www.nskint.co.jp/
石原 正樹 [email protected]
名古屋本社
〒450-0002
名古屋市中村区名駅4丁目2番地28号
名古屋第二埼玉ビル7F
TEL: 052-551-1861
東京本社
〒163-0637
東京都新宿区西新宿1丁目25番1号
新宿センタービル37階
TEL: 03-5324-0123
twitter: @ishihara_twit