Download presentation
Presentation is loading. Please wait.
1
AndroidとiPhoneに おける開発比較
2014/01
2
0-1. 初めに 現在、スマートフォンアプリの開発と言えば、 Android or iPhoneがシェアの大半を独占
実際の開発に当たり、どのような違いがある かは気になるところ 今回は開発するに当たっての違いから、簡単 なアプリ作成までを検証 ゴールとして動作するアプリを見せます
3
0-2. 目次 以下の手順で比較していきます 1. 概要 2. 各種構文 3. 実際のアプリ作成
4
1-1. 概要(シェア) 世界と日本ではなぜか大きく異なる(2013年 までの数値で検証)
世界と日本ではなぜか大きく異なる(2013年 までの数値で検証) 世界で見るとスマートフォン保持者の8割が Android、1割がiPhone しかし、日本国内では約半分をiPhoneが占め る結果となっている 上記から現在開発シェアが高そうなのは iPhone開発となるが、世界の流れを受けて日 本のiPhoneシェアが縮小する可能性もあり
5
1-2. 概要(ビジネス) 仕事をする上において、採算が取れないと作 成する意味が薄れてきます
仕事をする上において、採算が取れないと作 成する意味が薄れてきます 利益を出すためには有料アプリ or アプリ内 科金が主な収入源です 現状ではどちらもiPhoneのほうが高いです なぜなら、iPhoneは無料アプリをダウンロード する際もクレジットカード登録が義務となって おり、その魔力で押してしまうのでしょう・・・
6
1-3. 概要(作りやすさ) 皆さん、どちらが作りやすいと思いますか?
7
1-3. 概要(作りやすさ) そうです。もちろん、iPhoneです。
何故なら、Androidは各メーカーが独自カスタ マイズをしているせいで、メーカーにより挙動 が違うというデメリットが発生しています
8
1-4. 概要(開発手法) 【言語】 AndroidはJavaで開発するのに対し、iPhoneは Objective-Cで開発 【開発端末】
AndroidはWindows、MACで開発できるが iPhoneはMACのみ 次はコーディングの違いに検証
9
2-1-1. 構文(変数定義) まずは変数定義について 【Android】 String message = “文字列”; 【iPhone】
NSString* message 基本的には「型 変数名 = 値」と構文は一緒
10
2-1-2.構文(@) Objective-CはC言語を拡張した言語です
→これを「コンパイラディレクティブ」と呼ぶ また、「NSString*」の「*」についてはC言語と 同様にポインタを表しています
11
2-2-1.構文(関数) 次に関数定義の違いを見ましょう
【Android】 public void func(String param1, int param2) { 【iPhone】 - (void) func : (NSString*) param: (NSInteger) param2 { パラメータ記述が大きく異なり、Objective-Cで は(型) 変数名:・・・のように「:」で区切る また、「-」を先頭に付けるは決まりです
12
2-2-2.構文(関数) ここで何か疑問感じませんか?
13
2-2-2.構文(関数) そうです。publicがないけどどういう意味と感 じないとやばいです。
→何も感じない人はソースコピー常習犯の可能 性が高い!! Objective-Cにおいて、基本的にはすべての関 数がpublicとなっています
14
2-3-1.構文(クラス定義) 続いてはクラス定義 【Android】
public class Animal {// Animalというクラス } 【iPhone】 @implementaion Animal : NSObject @end うおー、違いすぎて訳が分からない・・・、とい うことで詳細を見ていきましょう!
15
2-3-2.構文(Objective-Cクラス定義)
【ヘッダファイル】(拡張子を「.h」で作成) @interface Animal:NSObject { //赤部分は親クラ スを指定 // ここにクラスフィールドを定義 } // ここに関数を定義 @end 不思議に感じるかもしれないがクラス定義時
16
2-3-3.構文(Objective-Cクラス定義)
??疑問に感じましたか。ですよね・・。
17
2-3-4.構文(Objective-Cクラス定義)
じゃあ、interfaceはどうするのって感じますよ ね?? まったく同一機能ではないがObjective-Cにお いても、「protocol」を使用すれば、Java同様の インターフェースは実現できません。 説明が長くなるのでこの辺で・・・、興味があ れば調べてみてください。
18
2-3-2.構文(Objective-Cクラス定義)
話が少しそれましたが次に実装ファイル 【実装ファイル】拡張子を「.m」で作成 #import “xxx.h” // ヘッダファイル読込 @implementaion Animal : NSObject // ここに処理 @end
19
2-4.構文(最後に) あまり、説明できていませんが詳細に説明す ると2時間以上かかるので・・・ この辺で今回は構文説明を終了します
あまり、説明できていませんが詳細に説明す ると2時間以上かかるので・・・ この辺で今回は構文説明を終了します 次は簡単なアプリの説明に入ります。
20
3-1.アプリ説明 気分に合わせてランダムで曲を再生する、 簡単なアプリケーションを作成します。
21
3-2.作成するファイル ・画面遷移は無いので1ファイルで全て記述 ・以下の処理を実装する - 初期処理で使用する音楽ファイルを用意
- カテゴリ選択 - 音楽再生 - 音楽停止 1/13/14
22
iphone (初期処理) 使用するマップを初期化
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [self setComboBox]; [self setSadList]; [self setHappyList]; [self setExciteList]; [self setMapList]; } 1/13/14
23
Android (初期処理) 使用するマップを初期化し、ハンドラも定義しておく
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); InitializeList(); Button start = (Button)findViewById(R.id.button1); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ~ } }); 1/13/14
24
iPhone (初期処理詳細) 各マップ毎で使用するアイテムを追加している -(void)setComboBox {
[choiceMood atIndex:[choiceMood numberOfItems]]; [choiceMood [choiceMood } 1/13/14
25
Android (初期処理詳細) 同様にマップを初期化
同様にマップを初期化 exciteList = new ArrayList<Integer>(); happyList = new ArrayList<Integer>(); sadList = new ArrayList<Integer>(); exciteList.add(R.raw.excite1); ~ happyList.add(R.raw.happy1); sadList.add(R.raw.sad1); 1/13/14
26
iPhone (選択時のイベントハンドラ)
選択したカテゴリを保持しておく - (IBAction)controlTextDidBeginEditing:(id)sender { choiceStr = [(NSComboBox *)sender stringValue]; } 1/13/14
27
Android (選択時のイベントハンドラ)
Button start = (Button)findViewById(R.id.button1); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.excite1); mediaPlayer.start(); } }); 1/13/14
28
iPhone (音楽再生①) - (IBAction)startMusic:(id)sender {
if (self.choiceStr == nil || [self.choiceStr { [self return; } NSMutableArray *list = (NSMutableArray *)[self.mapList objectForKey:self.choiceStr]; if (list == nil) 1/13/14
29
iPhone (音楽再生②) int n = arc4random() % list.count;
NSString* select = [list objectAtIndex:n]; NSString *path = [[NSBundle mainBundle] pathForResource:select if (self.player != nil) { [self.player stop]; self.player = nil; } player = [[AVAudioPlayer alloc ] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; [self.player play]; 1/13/14
30
Android (音楽再生) メディアプレイヤーオブジェクトを生成し、 音楽ファイルを指定した後、再生
mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.excite1); mediaPlayer.start(); 1/13/14
31
- (IBAction)stopMusic:(id)sender { [self.player stop]; }
iPhone (音楽停止) - (IBAction)stopMusic:(id)sender { [self.player stop]; } 1/13/14
32
再生中だった場合、音楽を止める if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); }
Android (音楽停止) 再生中だった場合、音楽を止める if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } 1/13/14
33
全ソースはストレージにアップしてあります。
1/13/14
34
・Androidの方はJavaを使うため、 クラスも豊富で、扱いやすいので開発しやすい。
感想 ・Androidの方はJavaを使うため、 クラスも豊富で、扱いやすいので開発しやすい。 ・ただ、Androidはエミュレータの起動が とんでもなく遅いのでちょっとした動作確認にも 凄く時間がかかる。 (マシンスペックのせい?) 1/13/14
35
・挫折しないためのAndroidプログラミング 128のキホン
参考資料 ・挫折しないためのAndroidプログラミング 128のキホン ・詳解 Objective-C 2.0 第3版 1/13/14
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.