Android*iPhone

開発者目線でAndroidとiPhone
を比較してみる
豆蔵 藤田泰介
技術情報
• iPhone
iPhone Dev Center
iPhone Dev Center(日本語)
• Android
Android - An Open Handset Alliance Project
Android - Open Handset Alliance プロジェクト
OS
• iPhone
Mac OS Xベース
• Android
Linuxベース
開発言語/開発環境
• iPhone
Objective-C 2.0(ガベージコレクションなし)
Xcode
Interface Builder(画面デザイン用の開発環境)
• Android
Java SDK 1.5または1.6相当のもの(SunのJavaと
VMが違うのでこのような書き方をしています)
Eclipse
ADT(Eclipseプラグイン)
動作環境
• iPhone
Mac OS X 10.5.4以上
Toolchainというオープンソースの開発環境
だとUnix/Linux系OSで開発可能
• Android
Windows
Mac
Unix/Linux
アーキテクチャ
• iPhone
• Android
フレームワーク
• iPhone
Cocoa Foundation(Mac OS X共通)
UIKit
• Android
Java SDK相当のもの
Android Framework
MVCパターンからみた違い(iPhone)
• Model
任意(Model用の仕組みがない)
• View
UIKitライブラリ、UIViewのサブクラス
Interface Builerを使ってデザイン
デザインの情報はxibファイルに保存される(中はXML)
• Controller
UIViewController
UINavigationController
UIImagePickerController
UITabbarController
UITableViewController
MVCパターンからみた違い(Android)
• Model
ContentProvider
• View
android.view,android.widgetパッケージにある部品群
レイアウトXMLにデザイン定義を書く
デザインの情報はxmlファイルに保存される
• Controller
Activity
ListActivity
MapActivity
ExpandableListActivity
TabActivity
Viewの実装方法
• AndroidとiPhoneのViewの実装方法を比較する
イベントの仕組み
• iPhone
Target Action
Responder Chain
• Android
イベントリスナー
イベントの実装方法
• AndroidとiPhoneのイベントハンドラの実装方
法を比較する
ライフサイクル
• iPhone
loadView
viewDidLoad
viewWillAppear
viewDidAppear
viewWillDisappear
viewDidDisappear
• Android
onCreate
onStart
onResume
onPause
onStop
onDestroy
メモリ領域圧迫時のイベント
• iPhone
didReceiveMemoryWarning
• Android
onLowMemory
データ保存の仕組み
• Androidの場合SQLiteに保存したデータをContent
Provider化することで他のアプリとデータベースを共有
することができます。iPhoneは今のところデータベース
がアプリごとに独立しているので他のアプリと共有す
ることはできないようです。
• iPhone
オブジェクトのシリアライズ
プロパティリスト(XML)
SQLite
• Android
SQLite
バックグラウンドプロセス
• iPhone
不可(音楽など一部例外あり)
• Android
Service
グラフィック
•
iPhone
2D
Quartz 2D(Mac OS X共通)
Core Image(Mac OS X共通)
3D
OpenGL ES
ベクターグラフィック
対応
• Android
2D
SGL
android.graphicsパッケージにある部品群
3D
OpenGL ES
ベクターグラフィック
非対応(代わりに9-patchを使う)
アニメーション
• iPhone
Core Animation(Mac OS X共通)
• Android
android.view.animationパッケージにある部
品群
加速度計
• iPhone
UIAccelerometer(加速度計の管理)
UIAccelerometerDelegate(加速度イベント)
• Android
加速度計に限らずあらゆるセンサーを管理する
SensorManagerクラスがありそこで管理されている
SensorManager(センサーの管理)
SensorListener(センサーイベント)
• 詳細
AndroidとiPhoneの加速度計アプリの実装方法を比
較してみる
リソース(iPhone)
• Resourcesフォルダ以下に保存
• NSBundleクラスからmainBundleオブジェクトを
取得する
// 画像のパスを取得する
NSString *imagePath = [NSBundle mainBundle] pathForResource:@"Hoge"
ofType:@"png"];
UIImage *image = [UIImage imageAtPath:imagePath];
リソース(Android)
• Resourcesフォルダ以下に保存
• Rクラスの定義を使って取得する
// Activityクラスでの取得方法
Drawable drawableb = getResources().getDrawable(R.drawable.hoge)
国際化(iPhone)
• 言語.lproj(例:Japanese.lproj)フォルダを作成
しそこにLocalizable.stringsファイルを格納する
• Localizable.stringsファイルにローカライズした
メッセージを格納する
• 文字以外にもプロパティリストやnibファイル、
SQLiteデータベースなどもローカライズできる
国際化(Android)
• 各言語ごとに/res/valuesフォルダを作成し
strings.xmlファイルを格納する
• 今のところ文字列以外はローカライズできな
いみたいです。
res
|--values-en
| `--strings.xml
`--values-ja
`--strings.xml
ロケーション
• iPhone
Core Location
CLLocationManager
CLLocationManagerDelegate
CLLocationManagerを直接インスタンス化できる
• Android
android.locationパッケージのクラス群
LocationManager
LocationListener
LocationManagerを直接インスタンス化することができない。
Context.getSystemService(Context.LOCATION_SERVICE)メソッドを
使ってインスタンスを取得する
参照
• 開発者目線でAndroidとiPhoneを比較してみ
る