SlideShare a Scribd company logo
神原 健一
SIerにもテクノロジーの冒険はある!
∼Android編∼
Androidのマルチバージョン・マルチデバイス対応
NTTソフトウェア株式会社
ソフトウェア生産技術センター
Developers Summit 2013 Summer
#natsumiB2
Summit
Developers
2013.8.1
■業務
-社内Androidプロジェクト技術支援
■業務外
-Google Play向けアプリ開発(セカイフォン等)
-書籍①Androidプログラミング入門改訂2版
-書籍②Android API プログラミングリファレンス
-書籍③Androidアプリテスト技法
■共通
-Android関連講演活動(Droidcon Paris 2013、Droidcon London 2012等)
Developers Summit 2013 Summer
Summit
Developers
2
自己紹介
•NTTソフトウェア株式会社
 テクニカルプロフェッショナル(Android)
•神原 健一
Developers Summit 2013 Summer
Summit
Developers
3
セカイフォン(講演題材紹介)
2.x
3.x 4.x
スマホ タブレット
翻訳電話サービス(プライベート開発)
人生が変わる1分間の深イイ話(日テレ)
→2013/7/29(月)放送にて紹介
Developers Summit 2013 Summer
Summit
Developers
4
使い方①
通話モード
(話した言葉が相手の母国語に自動変換)
フランス語 日本語
こんにちは!
Merci! ありがとう!
Bonjour!
Developers Summit 2013 Summer
Summit
Developers
5
フランス語英語
会話モード
(話した言葉をその場で自動翻訳)
使い方②
Developers Summit 2013 Summer
Summit
Developers
6
アジェンダ
•背景
•アプリ開発の課題
•アプリ開発の対策
•最後に
Developers Summit 2013 Summer
Summit
Developers
7
2.x 3.x 4.x
Androidと言っても
複数のデバイス・複数のバージョン
スマホ タブレット
Developers Summit 2013 Summer
Summit
Developers
8
This data by Google on July 8, 2013
ICS
JB
Eclair
Froyo
Gingerbread
Honeycomb
OSのバージョン分布
Developers Summit 2013 Summer
Summit
Developers
9
画面サイズと画面密度
This data by Google on July 8, 2013
Normal
Small
Xlarge
Large
hdpi
xhdpi
ldpi
mdpi
xxhdpi
tvdpi
10
アプリ開発の課題
Developers Summit 2013 Summer
Summit
Developers
11
アプリ開発の課題
マルチバージョン・マルチデバイス対応
UI関連 API関連
①UIの設計・実装 ②APIの利用
•画面サイズの違い
•画面密度の違い
•その他
•パッケージング方針
•APIの互換性
•その他
12
アプリ開発の対策
13
スマホ タブレット (7’’) タブレット (10’’)
①UIの設計・実装
Developers Summit 2013 Summer
Summit
Developers
14
アプローチ①
layout-small/normal/large/xlargeの利用
l Android 1.6でも動作
l 幾つか問題あり
画面サイズ
layout-<hoge>
Developers Summit 2013 Summer
Summit
Developers
15
アプローチ②
layout/
main.xml
layout-sw600dp/
main.xml
スマホ タブレット(‘’7)
l 本家でも推奨
l Android 3.2以上でのみ動作
dp(Density-Independent pixel)の利用
Developers Summit 2013 Summer
Summit
Developers
16
①と②の組み合わせ
l Android1.6もサポート
l ①や②と比較してより多くの端末をサポート
l 幾つかの問題が…
l res/layout-sw600dp/main.xml <- 3.2+タブレット
l res/layout-xlarge/main.xml <- 3.0/3.1タブレット
l res/layout/main.xml <- その他(スマホ)
アプローチ③
l res/layout-sw600dp/main.xml <- 3.2+タブレット
l res/layout-xlarge/main.xml <- 3.0/3.1タブレット
l res/layout/main.xml <- その他(スマホ)
l 同じファイルを別フォルダに格納
Developers Summit 2013 Summer
Summit
Developers
17
メンテナンス性は?
アプローチ③
l ソースのロジックが複雑
Developers Summit 2013 Summer
Summit
Developers
18
if ([xlargeである] or [横幅・縦幅の両方600dp以上])
// codes for tablets
}else{
// codes for others
}
アプローチ③
メンテナンス性は?
19
より良いアプローチは?
Developers Summit 2013 Summer
Summit
Developers
20
アプローチ④
今回は時間の都合で、省略m(__)m
valuesフォルダの活用 Layout-Aliasの活用
•Multi-Versioning Android Apps
 http://goo.gl/qx86qs
Droidcon Paris 2013 講演資料
21
別のアプローチだと?
Developers Summit 2013 Summer
Summit
Developers
22
柔軟なレイアウト
• 両方で適用可能なレイアウト
スマホ タブレット
Fragmentを使わない
23
Android
2.x
Android
3.x
Android
4.x
②APIの利用
Developers Summit 2013 Summer
Summit
Developers
24
マルチバージョン対応
開発難易度?メンテナンス性能?
Single APK Multiple APK
2.x
3.x
4.x
2.x
3.x
4.x
Developers Summit 2013 Summer
Summit
Developers
25
最新APIを含むアプリを1つのAPKで実現
Reflection
Configuring Lint
Lazy Loading
Single APKアプローチ
オーソドックスな方式
デザインパターンの1つ
Lintの活用
Developers Summit 2013 Summer
Summit
Developers
26
“Configuring Lint”の利用例
	 @SuppressLint("NewApi")
	 private void setActionBarStyle() {
	 	 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
	 	 	 ActionBar actionBar = this.getActionBar();
	 	 actionBar.setDisplayHomeAsUpEnabled(true);
	 	 }else{
	 	 	 ...
	 	 }
	 }
	 @TargetApi(11)
	 private void setActionBarStyle() {
	 	 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
	 	 	 ActionBar actionBar = this.getActionBar();
	 	 actionBar.setDisplayHomeAsUpEnabled(true);
	 	 }else{
	 	 	 ...
	 	 }
	 }
基本的にOK
マルチバージョン対応
Developers Summit 2013 Summer
Summit
Developers
27
“Lazy loading”の利用例
public	
 abstract	
 class	
 NotificationUtilAbstract	
 {
	
 	
 public	
 static	
 NotificationUtilAbstract	
 newInstance()	
 {
	
 	
 	
 	
 NotificationUtilAbstract	
 instance	
 =	
 null;
	
 	
 	
 if	
 (Integer.parseInt(Build.VERSION.SDK)>=	
 16)	
 {
	
 	
 	
 	
 	
 	
 instance	
 =	
 new	
 NotificationUtilJB();
	
 	
 	
 }	
 else	
 {
	
 	
 	
 	
 	
 	
 instance	
 =	
 new	
 NotificationUtilDefault();
	
 	
 	
 }
	
 	
 	
 return	
 instance;
	
 	
 	
 }
	
 	
 	
 public	
 abstract	
 void	
 showCaller;
}
1st step
マルチバージョン対応
Developers Summit 2013 Summer
Summit
Developers
28
public	
 class	
 NotificationUtilJB
extends	
 NotificationUtilAbstract{
@Override
public	
 void	
 showCaller(){
	
 	
 	
 	
 	
 	
 //	
 Code	
 by	
 Jelly	
 Bean	
 (API	
 16)
	
 	
 	
 }
}
public	
 class	
 NotificationUtilDefault
extends	
 NotificationUtilAbstract{
@Override
public	
 void	
 showCaller(){
	
 	
 	
 	
 	
 	
 //	
 Code	
 by	
 Old	
 API
	
 	
 	
 }
}
1.6でもOK
2nd step
マルチバージョン対応
Developers Summit 2013 Summer
Summit
Developers
29
最後に)自分のアプローチ
SIerにおけるエンジニアの生き方の1つ
プライベート 会社
両方の活動による相乗効果
•プロダクト開発
•ノウハウ蓄積・展開
•コミュニティ活動
•社内開発支援
•ノウハウ蓄積・展開
•活動バックアップ
30
ご清聴ありがとうございました。
•Facebook:http://fb.com/kanbara.kenichi
•Google+:+Kenichi Kambara
•Twitter:@korodroid

More Related Content

PDF
181220_ Visual Studio 2019 (Connect 2018)
PDF
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
PDF
5分でわかる Unity Forma
PDF
MRTK V2.3 Spatial Awareness
PDF
Azure の App Center でアプリの 使用状況を分析する
PDF
UnityによるHoloLensアプリケーション入門
PDF
サーバーレス・スクラム開発の速効性とは
PDF
Pickup WWDC2020
181220_ Visual Studio 2019 (Connect 2018)
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
5分でわかる Unity Forma
MRTK V2.3 Spatial Awareness
Azure の App Center でアプリの 使用状況を分析する
UnityによるHoloLensアプリケーション入門
サーバーレス・スクラム開発の速効性とは
Pickup WWDC2020

What's hot (6)

PDF
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
PDF
ARコンテンツ作成勉強会:使ってみようSmartAR 基礎から支援ツール活用まで
PPTX
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例
PDF
Looking glass + leap motionアプリ開発メモ
PDF
Unity MARS導入セミナー(7月8日号) - Unityステーション
PDF
Androidアプリ入門
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
ARコンテンツ作成勉強会:使ってみようSmartAR 基礎から支援ツール活用まで
【Unity道場 自動車編】空間再現ディスプレイの概要と活用事例
Looking glass + leap motionアプリ開発メモ
Unity MARS導入セミナー(7月8日号) - Unityステーション
Androidアプリ入門
Ad

Similar to [DevSummit2013S]Android_Multi-Version_Multi-Device (20)

PDF
Android Studioの魅力
PDF
AndroidでDIxAOP
PDF
Android Lecture #01 @PRO&BSC Inc.
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
PDF
もう怖くないモバイルアプリ開発!
PDF
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
PDF
Android Studio開発講座
PDF
A Framework for LightUp Applications of Grani
PDF
「Windows 8 ストア アプリ開発 tips」 vsug day 2012 winter (2012年12月15日)
PDF
Android Wear Apps
PPTX
Windows 8 ストア アプリ 開発 Tips
PDF
Line Creators Studio Android With Kotlin
PDF
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
PPTX
Androidのアプリ内課金
PDF
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
PDF
cocos2d-xにおけるBox2Dの利用方法および便利なツール
PDF
Cocos2d-xによる最新ゲーム開発
PDF
Android 11 update notes
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
PDF
Android App Development with Gradle & Android Studio
Android Studioの魅力
AndroidでDIxAOP
Android Lecture #01 @PRO&BSC Inc.
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
もう怖くないモバイルアプリ開発!
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Android Studio開発講座
A Framework for LightUp Applications of Grani
「Windows 8 ストア アプリ開発 tips」 vsug day 2012 winter (2012年12月15日)
Android Wear Apps
Windows 8 ストア アプリ 開発 Tips
Line Creators Studio Android With Kotlin
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
Androidのアプリ内課金
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
cocos2d-xにおけるBox2Dの利用方法および便利なツール
Cocos2d-xによる最新ゲーム開発
Android 11 update notes
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
Android App Development with Gradle & Android Studio
Ad

More from Kenichi Kambara (20)

PDF
Hello Flutterの次におさえたい Flutterのポイント その6 (レイアウト編)
PDF
Hello Flutter”の次におさえたい Flutterのポイント その5
PDF
[ABC2018Spring]Flutterアプリ開発入門
PDF
“Hello Flutter”の次におさえたい Flutterのポイント その4
PDF
[Google I/O 2018 Highlights] Sandbox
PDF
[Google I/O 2018 Highlights] Flutter / WearOS
PDF
"Hello Flutter"の次におさえたいFlutterのポイントその3
PDF
Hello Flutterの次におさえたいFlutterのポイントその2
PDF
I/Oへの期待+海外渡航持ち物Tips
PDF
Hello Flutterの次におさえたいFlutterのポイント
PDF
Developing Android Apps for Google Assistant
PDF
Google Assistant対応アプリ開発3つのポイント
PDF
10分で作るGoogle Assistant対応アプリ
PDF
[Kotlin勉強会] Hello Kotlinの次におさえたいKotlinの勘所
PDF
Android O (Picture In Picture)入門+実装例
PDF
AndroidアプリのKotlin移行時に遭遇した問題と対処例
PDF
Android O (Beta) Topics
PDF
Publishing Android Wear 2.0 Apps
PDF
Android Studio 2.3 New Features
PDF
Android 7.0 Nougat マルチウィンドウ解説+α
Hello Flutterの次におさえたい Flutterのポイント その6 (レイアウト編)
Hello Flutter”の次におさえたい Flutterのポイント その5
[ABC2018Spring]Flutterアプリ開発入門
“Hello Flutter”の次におさえたい Flutterのポイント その4
[Google I/O 2018 Highlights] Sandbox
[Google I/O 2018 Highlights] Flutter / WearOS
"Hello Flutter"の次におさえたいFlutterのポイントその3
Hello Flutterの次におさえたいFlutterのポイントその2
I/Oへの期待+海外渡航持ち物Tips
Hello Flutterの次におさえたいFlutterのポイント
Developing Android Apps for Google Assistant
Google Assistant対応アプリ開発3つのポイント
10分で作るGoogle Assistant対応アプリ
[Kotlin勉強会] Hello Kotlinの次におさえたいKotlinの勘所
Android O (Picture In Picture)入門+実装例
AndroidアプリのKotlin移行時に遭遇した問題と対処例
Android O (Beta) Topics
Publishing Android Wear 2.0 Apps
Android Studio 2.3 New Features
Android 7.0 Nougat マルチウィンドウ解説+α

[DevSummit2013S]Android_Multi-Version_Multi-Device

  • 2. ■業務 -社内Androidプロジェクト技術支援 ■業務外 -Google Play向けアプリ開発(セカイフォン等) -書籍①Androidプログラミング入門改訂2版 -書籍②Android API プログラミングリファレンス -書籍③Androidアプリテスト技法 ■共通 -Android関連講演活動(Droidcon Paris 2013、Droidcon London 2012等) Developers Summit 2013 Summer Summit Developers 2 自己紹介 •NTTソフトウェア株式会社  テクニカルプロフェッショナル(Android) •神原 健一
  • 3. Developers Summit 2013 Summer Summit Developers 3 セカイフォン(講演題材紹介) 2.x 3.x 4.x スマホ タブレット 翻訳電話サービス(プライベート開発) 人生が変わる1分間の深イイ話(日テレ) →2013/7/29(月)放送にて紹介
  • 4. Developers Summit 2013 Summer Summit Developers 4 使い方① 通話モード (話した言葉が相手の母国語に自動変換) フランス語 日本語 こんにちは! Merci! ありがとう! Bonjour!
  • 5. Developers Summit 2013 Summer Summit Developers 5 フランス語英語 会話モード (話した言葉をその場で自動翻訳) 使い方②
  • 6. Developers Summit 2013 Summer Summit Developers 6 アジェンダ •背景 •アプリ開発の課題 •アプリ開発の対策 •最後に
  • 7. Developers Summit 2013 Summer Summit Developers 7 2.x 3.x 4.x Androidと言っても 複数のデバイス・複数のバージョン スマホ タブレット
  • 8. Developers Summit 2013 Summer Summit Developers 8 This data by Google on July 8, 2013 ICS JB Eclair Froyo Gingerbread Honeycomb OSのバージョン分布
  • 9. Developers Summit 2013 Summer Summit Developers 9 画面サイズと画面密度 This data by Google on July 8, 2013 Normal Small Xlarge Large hdpi xhdpi ldpi mdpi xxhdpi tvdpi
  • 11. Developers Summit 2013 Summer Summit Developers 11 アプリ開発の課題 マルチバージョン・マルチデバイス対応 UI関連 API関連 ①UIの設計・実装 ②APIの利用 •画面サイズの違い •画面密度の違い •その他 •パッケージング方針 •APIの互換性 •その他
  • 13. 13 スマホ タブレット (7’’) タブレット (10’’) ①UIの設計・実装
  • 14. Developers Summit 2013 Summer Summit Developers 14 アプローチ① layout-small/normal/large/xlargeの利用 l Android 1.6でも動作 l 幾つか問題あり 画面サイズ layout-<hoge>
  • 15. Developers Summit 2013 Summer Summit Developers 15 アプローチ② layout/ main.xml layout-sw600dp/ main.xml スマホ タブレット(‘’7) l 本家でも推奨 l Android 3.2以上でのみ動作 dp(Density-Independent pixel)の利用
  • 16. Developers Summit 2013 Summer Summit Developers 16 ①と②の組み合わせ l Android1.6もサポート l ①や②と比較してより多くの端末をサポート l 幾つかの問題が… l res/layout-sw600dp/main.xml <- 3.2+タブレット l res/layout-xlarge/main.xml <- 3.0/3.1タブレット l res/layout/main.xml <- その他(スマホ) アプローチ③
  • 17. l res/layout-sw600dp/main.xml <- 3.2+タブレット l res/layout-xlarge/main.xml <- 3.0/3.1タブレット l res/layout/main.xml <- その他(スマホ) l 同じファイルを別フォルダに格納 Developers Summit 2013 Summer Summit Developers 17 メンテナンス性は? アプローチ③
  • 18. l ソースのロジックが複雑 Developers Summit 2013 Summer Summit Developers 18 if ([xlargeである] or [横幅・縦幅の両方600dp以上]) // codes for tablets }else{ // codes for others } アプローチ③ メンテナンス性は?
  • 20. Developers Summit 2013 Summer Summit Developers 20 アプローチ④ 今回は時間の都合で、省略m(__)m valuesフォルダの活用 Layout-Aliasの活用 •Multi-Versioning Android Apps  http://goo.gl/qx86qs Droidcon Paris 2013 講演資料
  • 22. Developers Summit 2013 Summer Summit Developers 22 柔軟なレイアウト • 両方で適用可能なレイアウト スマホ タブレット Fragmentを使わない
  • 24. Developers Summit 2013 Summer Summit Developers 24 マルチバージョン対応 開発難易度?メンテナンス性能? Single APK Multiple APK 2.x 3.x 4.x 2.x 3.x 4.x
  • 25. Developers Summit 2013 Summer Summit Developers 25 最新APIを含むアプリを1つのAPKで実現 Reflection Configuring Lint Lazy Loading Single APKアプローチ オーソドックスな方式 デザインパターンの1つ Lintの活用
  • 26. Developers Summit 2013 Summer Summit Developers 26 “Configuring Lint”の利用例 @SuppressLint("NewApi") private void setActionBarStyle() { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ActionBar actionBar = this.getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); }else{ ... } } @TargetApi(11) private void setActionBarStyle() { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ActionBar actionBar = this.getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); }else{ ... } } 基本的にOK マルチバージョン対応
  • 27. Developers Summit 2013 Summer Summit Developers 27 “Lazy loading”の利用例 public abstract class NotificationUtilAbstract { public static NotificationUtilAbstract newInstance() { NotificationUtilAbstract instance = null; if (Integer.parseInt(Build.VERSION.SDK)>= 16) { instance = new NotificationUtilJB(); } else { instance = new NotificationUtilDefault(); } return instance; } public abstract void showCaller; } 1st step マルチバージョン対応
  • 28. Developers Summit 2013 Summer Summit Developers 28 public class NotificationUtilJB extends NotificationUtilAbstract{ @Override public void showCaller(){ // Code by Jelly Bean (API 16) } } public class NotificationUtilDefault extends NotificationUtilAbstract{ @Override public void showCaller(){ // Code by Old API } } 1.6でもOK 2nd step マルチバージョン対応
  • 29. Developers Summit 2013 Summer Summit Developers 29 最後に)自分のアプローチ SIerにおけるエンジニアの生き方の1つ プライベート 会社 両方の活動による相乗効果 •プロダクト開発 •ノウハウ蓄積・展開 •コミュニティ活動 •社内開発支援 •ノウハウ蓄積・展開 •活動バックアップ