AndroidとiPhoneに おける開発比較

Slides:



Advertisements
Similar presentations
1 プリミティブ Web サービスの 入出力データに関する一考察 2005 年 3 月 21 日 松江工業高等専門学校 情報工学科 奈良先端科学技術大学院大学 情報科学研究科 越田高志 電子情報通信学会 2005年総合 大会.
Advertisements

8-4 Google マップの利用 1.地図を表示 ( エミュレータでも可能 ) Android API キーを取得しておくこと。 【 AndroidManifest.xml 】 ・・・
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
開発者目線でAndroidとiPhoneを比較してみる
社会人学習講座 「Javaプログラミング概論」
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
Flashプレイヤーを使った動画配信 情報工学科 宮本 崇也.
Androidアプリを公開する方法.
Android:Service 小山 圭.
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
Applet 岡部 祐典 鈴木 敬幸.
Objective-Cでシューティングゲーム を作成してみる
Ex7. Search for Vacuum Problem
Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平.
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
Ex8. Search for Vacuum Problem(2)
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
Iアプリプログラミング その1  鳥居秀徳.
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング基礎I(再) 山元進.
技術トピックス 2014/08.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
JAVA.
JavaServlet&JSP入門 01K0018 中村太一.
アルゴリズムとデータ構造 2011年6月13日
Androidソースコード公開後のJNI
クラシック音楽普及プロジェクト KG:mao B3 wakutin.
第20章 Flyweight ~同じものを共有して無駄をなくす~
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
情報学部 プログラミング体験教室 (初級編)
PBLソフトウェア班 ~ペイントアプリケーション開発~ 安藤 貴哉 小木曽 太紀
プログラミング演習3 第2回 GUIの復習.
Titanium Studioを使った アプリ開発 Vol.1
Androidアプリの作成 07A1069 松永大樹.
補足説明.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
Windows PowerShell Cmdlet
マルチスレッド処理 マルチプロセス処理について
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
EclipseでWekaのAPIを呼び出す
プログラミング 4 記憶の割り付け.
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習3 第2回 GUIの復習.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
Jakarta Struts (2) ソフトウェア特論 第11回.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
Java8について 2014/03/07.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
Talkプログラムのヒント 1 CS-B3 ネットワークプログラミング  &情報科学科実験I.
Ex7. Search for Vacuum Problem
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
アルゴリズムとプログラミング (Algorithms and Programming)
ゲームプログラミング体験演習 :30-14:15 九州産業大学 情報科学部 米元.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとデータ構造 2012年6月11日
サブゼミ第7回 実装編① オブジェクト型とキャスト.
JAVA入門⑥ クラスとインスタンス.
コンパイラ 2012年10月11日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
C#プログラミング実習 第1回.
7-3 サービスの連携 1.サービスとは 画面を持たずに処理を行う【AndroidManifest.xmlへの追加】 …
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
プログラミング 2 静的変数.
Presentation transcript:

AndroidとiPhoneに おける開発比較 2014/01

0-1. 初めに 現在、スマートフォンアプリの開発と言えば、 Android or iPhoneがシェアの大半を独占 実際の開発に当たり、どのような違いがある かは気になるところ 今回は開発するに当たっての違いから、簡単 なアプリ作成までを検証 ゴールとして動作するアプリを見せます

0-2. 目次 以下の手順で比較していきます 1. 概要 2. 各種構文 3. 実際のアプリ作成

1-1. 概要(シェア) 世界と日本ではなぜか大きく異なる(2013年 までの数値で検証) 世界と日本ではなぜか大きく異なる(2013年 までの数値で検証) 世界で見るとスマートフォン保持者の8割が Android、1割がiPhone しかし、日本国内では約半分をiPhoneが占め る結果となっている 上記から現在開発シェアが高そうなのは iPhone開発となるが、世界の流れを受けて日 本のiPhoneシェアが縮小する可能性もあり

1-2. 概要(ビジネス) 仕事をする上において、採算が取れないと作 成する意味が薄れてきます 仕事をする上において、採算が取れないと作 成する意味が薄れてきます 利益を出すためには有料アプリ or アプリ内 科金が主な収入源です 現状ではどちらもiPhoneのほうが高いです なぜなら、iPhoneは無料アプリをダウンロード する際もクレジットカード登録が義務となって おり、その魔力で押してしまうのでしょう・・・

1-3. 概要(作りやすさ) 皆さん、どちらが作りやすいと思いますか?

1-3. 概要(作りやすさ) そうです。もちろん、iPhoneです。 何故なら、Androidは各メーカーが独自カスタ マイズをしているせいで、メーカーにより挙動 が違うというデメリットが発生しています

1-4. 概要(開発手法) 【言語】 AndroidはJavaで開発するのに対し、iPhoneは Objective-Cで開発 【開発端末】 AndroidはWindows、MACで開発できるが iPhoneはMACのみ 次はコーディングの違いに検証

2-1-1. 構文(変数定義) まずは変数定義について 【Android】 String message = “文字列”; 【iPhone】 NSString* message = @”test”; 基本的には「型 変数名 = 値」と構文は一緒 「@」は?と気になった人は技術者です!

2-1-2.構文(@) Objective-CはC言語を拡張した言語です →これを「コンパイラディレクティブ」と呼ぶ また、「NSString*」の「*」についてはC言語と 同様にポインタを表しています

2-2-1.構文(関数) 次に関数定義の違いを見ましょう 【Android】 public void func(String param1, int param2) { 【iPhone】 - (void) func : (NSString*) param: (NSInteger) param2 { パラメータ記述が大きく異なり、Objective-Cで は(型) 変数名:・・・のように「:」で区切る また、「-」を先頭に付けるは決まりです

2-2-2.構文(関数) ここで何か疑問感じませんか?

2-2-2.構文(関数) そうです。publicがないけどどういう意味と感 じないとやばいです。 →何も感じない人はソースコピー常習犯の可能 性が高い!! Objective-Cにおいて、基本的にはすべての関 数がpublicとなっています

2-3-1.構文(クラス定義) 続いてはクラス定義 【Android】 public class Animal {// Animalというクラス } 【iPhone】 @implementaion Animal : NSObject @end うおー、違いすぎて訳が分からない・・・、とい うことで詳細を見ていきましょう!

2-3-2.構文(Objective-Cクラス定義) 【ヘッダファイル】(拡張子を「.h」で作成) @interface Animal:NSObject { //赤部分は親クラ スを指定 // ここにクラスフィールドを定義 } // ここに関数を定義 @end 上記のように@interface~@endまでに記述 不思議に感じるかもしれないがクラス定義時 に「@interface」を使用する

2-3-3.構文(Objective-Cクラス定義) ??疑問に感じましたか。ですよね・・。

2-3-4.構文(Objective-Cクラス定義) じゃあ、interfaceはどうするのって感じますよ ね?? まったく同一機能ではないがObjective-Cにお いても、「protocol」を使用すれば、Java同様の インターフェースは実現できません。 説明が長くなるのでこの辺で・・・、興味があ れば調べてみてください。

2-3-2.構文(Objective-Cクラス定義) 話が少しそれましたが次に実装ファイル 【実装ファイル】拡張子を「.m」で作成 #import “xxx.h” // ヘッダファイル読込 @implementaion Animal : NSObject // ここに処理 @end 「@implementaion」の後にクラス名で定義 最後に「@end」は必須です

2-4.構文(最後に) あまり、説明できていませんが詳細に説明す ると2時間以上かかるので・・・ この辺で今回は構文説明を終了します あまり、説明できていませんが詳細に説明す ると2時間以上かかるので・・・ この辺で今回は構文説明を終了します 次は簡単なアプリの説明に入ります。

3-1.アプリ説明 気分に合わせてランダムで曲を再生する、 簡単なアプリケーションを作成します。

3-2.作成するファイル ・画面遷移は無いので1ファイルで全て記述 ・以下の処理を実装する - 初期処理で使用する音楽ファイルを用意 - カテゴリ選択 - 音楽再生 - 音楽停止 1/13/14

iphone (初期処理) 使用するマップを初期化 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [self setComboBox]; [self setSadList]; [self setHappyList]; [self setExciteList]; [self setMapList]; } 1/13/14

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

iPhone (初期処理詳細) 各マップ毎で使用するアイテムを追加している -(void)setComboBox { [choiceMood insertItemWithObjectValue:@"Sad" atIndex:[choiceMood numberOfItems]]; [choiceMood insertItemWithObjectValue:@"Happy" [choiceMood insertItemWithObjectValue:@"Excite" } 1/13/14

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

iPhone (選択時のイベントハンドラ) 選択したカテゴリを保持しておく - (IBAction)controlTextDidBeginEditing:(id)sender { choiceStr = [(NSComboBox *)sender stringValue]; } 1/13/14

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

iPhone (音楽再生①) - (IBAction)startMusic:(id)sender { if (self.choiceStr == nil || [self.choiceStr isEqualToString:@""]) { [self showDialog:@"注意" message:@"カテゴリを選択して下さい"]; return; } NSMutableArray *list = (NSMutableArray *)[self.mapList objectForKey:self.choiceStr]; if (list == nil) message:@"存在するカテゴリを選択して下さい"]; 1/13/14

iPhone (音楽再生②) int n = arc4random() % list.count; NSString* select = [list objectAtIndex:n]; NSString *path = [[NSBundle mainBundle] pathForResource:select ofType:@"m4a"]; 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

Android (音楽再生) メディアプレイヤーオブジェクトを生成し、 音楽ファイルを指定した後、再生 mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.excite1); mediaPlayer.start(); 1/13/14

- (IBAction)stopMusic:(id)sender { [self.player stop]; } iPhone (音楽停止) - (IBAction)stopMusic:(id)sender { [self.player stop]; } 1/13/14

再生中だった場合、音楽を止める if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } Android (音楽停止) 再生中だった場合、音楽を止める if (mediaPlayer.isPlaying()) {   mediaPlayer.stop(); } 1/13/14

全ソースはストレージにアップしてあります。 1/13/14

・Androidの方はJavaを使うため、 クラスも豊富で、扱いやすいので開発しやすい。 感想 ・Androidの方はJavaを使うため、 クラスも豊富で、扱いやすいので開発しやすい。 ・ただ、Androidはエミュレータの起動が とんでもなく遅いのでちょっとした動作確認にも 凄く時間がかかる。 (マシンスペックのせい?) 1/13/14

・挫折しないためのAndroidプログラミング 128のキホン 参考資料 ・挫折しないためのAndroidプログラミング 128のキホン http://www.shuwasystem.co.jp/products/7980html/3292.html ・詳解 Objective-C 2.0 第3版 http://www.sbcr.jp/products/4797368277.html 1/13/14