開発者目線で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を比較してみ る
© Copyright 2024 ExpyDoc