【C2】Delphiテクニカルセッション「基礎から学ぶビジュアルAndroidアプリ開発
今日からあなたもAndroidデベロッパー」
株式会社シリアルゲームズ / エンバカデロ MVP
細川 淳

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

アジェンダ• Android とは• Android 開発の心得• Delphi で Android プログラム！

2

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

1
3

Android とは本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android とは• Google が制作・管理しているモバイル端末用OS– Linuxベース– 元は Android 社が開発していたのを Google が買収• 元々アンディー・ルービンは General Magic で Magic Capなどを作っていた• 全世界で、圧倒的なシェア– 低価格端末が制作可能なため– 日本では、iOS と拮抗• 高機能端末では価格競争が起きづらいため
4

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android とは• 最新版は 4.4 (KitKat)• 開発環境– IDE は、Eclipse や Android Studio (IntenlliJ IDEA)– SDK + Java + Dalvik VM• JVM を使わないので厳密には Java とは言えないとの話も– NDK + C/C++

5

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android とは• そこに颯爽と Delphi が！
– Delphi で Android 開発をするメリット• 楽！！！
– 特に GUI パーツの配置• 豊富なライブラリ– Java の場合 JAR などを自分でダウンロードして、インストール、さらにアプリケーションに自動的に組み込まれるように指示しないといけないなどなど• iOS と同時に開発– Style や FormFamily などを使って１ソースでビルド可能！
6

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android とは• Delphi で Android 開発をするデメリット– Delphi 言語• 使える人にはメリット。使えない人にはデメリット– 後は思いつかず……

7

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

28Android 開発の心得

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得• Delphi で開発しようと Java で開発しようと、同じ事が言えます。
– 特に今まで Windows アプリケーションを作っていたDelphi ユーザーに顕著かもしれません。

9

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得
Android はWindows じゃない！！

10

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得• Windows の知識はきれいさっぱり忘れてください– たとえば、一番多い質問「TOpenDialog は、どこにあるのですか？」ありません！！

11

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得• Android には Android の流儀があります。
– Activity• 画面を占有する TForm のような存在• ただし、Activity は、単独で完全に存在しうるため「Windows 風に言うと」Activity は Application に近い
１つ１つが Activity
それぞれ、単独で起動できる

Activity

Resource

複数の Activity や Resource が集まった物がApplication

Resource
Resource12

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得• Android には Android の流儀があります。
– Intent• Activity と Activity or Service とアプリケーション間通信する仕組み
Application A

Application B

Activity

Activity

Activity

intent同じアプリケーション間でも、別のアプリケーション間でも intent を使って通信（表示）する
13

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得• Android には Android の流儀があります。
– Storage• 内蔵 RAM / SD Card など– ディレクトリに役割があります» そのため OpenDialog などは意味がありません– センサーや、3G 通信などが使える• センサー– ユーザーの入力方法の多様性（キーボードとマウスだけではない！）• 常に Available な通信– オンラインならではのサービス

14

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得• とはいえ！
– Delphi では、Activity と Intent についてはあまり、関係ありません

15

SDK
Activity

DelphiTFormIntent自分 Show / ShowModal など
他者 Intent (Delphi からは JIntent として使用可能)

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Android 開発の心得• とはいえ！
– 仕組みを知っておいて損はありません• Windows API を知っていると、複雑なアプリケーションが組めたのと同じです。
• 今回は詳しくは語りませんが、調べればいくらでも情報は集まります。Android は本も多く出版されています。

– 習うより慣れろ！
• ぜひ、お金と心の余裕のある方は、日常生活で実機を使ってください！
16

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3
17

開発の準備

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備• ADB ドライバのインストール– Android 開発では、最初の最難関！！
• 各社が提供しているドライバを入れる– Google が Generic Driver を提供しているが、これは最後の手段

一番重要なことは……

18

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備
ここ、試験に出ます！

ウキウキしていきなり繋いじゃダメえええええ！！
手順があります19

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備• 手順通りにやらないと……

端末が ADB デバイスとして認識されねええ
ええええええ！！！

うわあぁぁぁぁぁぁ
こうなります20

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備• ADB ドライバのインストール
1. メーカー製の ADB ドライバをダウンロード＆インストールする
たとえば、このウェブはシャープの開発者向けサイト

ADB ドライバがダウンロードできる開発の準備• ADB ドライバのインストール
2. 端末の設定で「USB デバッグ」にチェックを入れる

22

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備• ADB ドライバのインストール
3. ここでやっと繋ぎます！
接続するとADBデバイスとして認識されます23

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備• では、そもそも ADB とは？
– Android Debugging Bridge• 端末から情報を取得したり、保存したりするソフトウェア• 名前からは想像も付かない多才ぶり！
– アプリのインストール・アンインストール– ログの表示– スナップショットの取得– シェル– etc.

24

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備• Android の開発ではログが非常に重要です– Delphi のデバッガまで戻らなくても情報を出力できます– 配布後も情報を出力可能です• ただし、セキュリティ上の観点から、最低限なログが望ましいでしょう– Java で開発した場合、エラー時のスタックとレースなども表示されます• Delphi のような NDK アプリケーションの場合は、ネイティブのエラー内容が出ます25

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備• ロガーを使いましょう！
– DDMS (Dalvik Debug Monitor Service)• SDK に同梱されています

ここにログ

26

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

開発の準備
ステマじゃないです！

• お勧めのロガーがあります– SERIALGAMES Android LogViewer です！！

• 標準でロガーを持たない Delphi のためにあるともいえます• http://www.serialgames.co.jp/androidlogviewer/manual/ja-jp/index.html
ログ表示以外にも、ファイルビューアやアプリインストーラ、簡易GCMテスターなどなど

ログ

GCMSender

アプリインストーラ
27

ファイルビューア

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

328

Delphi で Androidプログラム！

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• 「ビジュアル Android アプリ開発」ということなので– できるかぎりコードを書かずにアプリを作ってみます。
– まずは、カメラアプリを作ってみましょう。
• コードはたったの1行だけです！

29

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• アプリケーションの新規作成

まずは、ファイル→新規作成→FireMonkey モバイルアプリケーション
をクリックします。
次に、表示されるテンプレートの一覧より、「空のアプリケーション」を選びます。

30

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• 作成されたフォーム
すると！
モバイルフォームが表示されます
右上のドロップダウンでフォームの種類を変更できます。

31

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• 作成されたプロジェクト
正しく ADB ドライバが認識されていればここにターゲットデバイスが表示されます

32

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
フォームに• TActionList•TTakePhotoFromCameraAction• TImage• TStyleBook• TToolBar• TButtonを配置してあります。
StyleBook では Android.Dark スタイルを読みこんでいます。
また、下記のように Style 関連のプロパティが設定されています。
Form.StyleBook に StyleBook1
Button1.StyleLookup に cameratoolbutton

33

Style ファイルはデフォルトの場合、下記にインストールされています。
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。
C:¥Users¥Public¥Documents¥RADStudio¥12.0¥Styles¥

Delphi で Android プログラム！
• アクションの追加– TActionList を Form にドロップしたら、ダブルクリック！

標準アクションのメディアライブラリからTTakePhotoFromCameraAction を選択！
34

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• アクションの設定
Button1 の Action プロパティにTakePhotoFromCameraActon1 を追加。
すると、ボタンを押したときにTakePhotoFromCameraAction1 が自動的に実行されます。

35

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• カメラアプリ起動– TakePhotoFromCameraAction» カメラアプリを起動します。

– 写真が撮れると OnDidFinishTaking が呼ばれる

36

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• 画像の取得– DidFinishTaking には取得できた画像が Image という引数で渡ってくるので、それを適切に設定してやります。
procedure TForm1.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
begin
Image1.Bitmap.Assign(Image);end;

たったこれだけ！！
37

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• 「ビジュアル Android アプリ開発」ということなので– できるかぎりコードを書かずにアプリを作ってみます。
• 次に全く同じですが、今度は端末内の画像を取得します

38

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• 配置したコントロールは1つ以外同じです– 1つとは TTakePhotoFromLibraryAction です。

ここでは、Buttonの StyleLookup プロパティはorganizetoolbutton に設定しています
39

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• ボタンを押して TTakePhotoFromLibraryActionを実行すると画像選択アプリが起動します40

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• 画像選択アプリから画像を選択するのでTOpenDialog は不要！！！ということが、判ります！

Delphi で Android プログラム！
• 「ビジュアル Android アプリ開発」ということなので– ログを出してみましょう……ビジュアル関係なくない！？
• というのも、ログクラスにちょっと癖があるので、知っておかな
いと難しいのです。
※Log クラスは FMX.Types ユニットに記述されています。

42

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• Android の場合、Delphi の Log クラスは、デフォルトの文字コードを指定しなければなりません。
procedure TForm1.Button1Click(Sender: TObject);beginLog.d('あわわ');end;procedure TForm1.FormCreate(Sender: TObject);
begin{$IFDEF ANDROID}
System.DefaultSystemCodePage := 65001;{$ENDIF}
end;

43

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

UTF-8 を指定

Delphi で Android プログラム！
• Log.d は Log.i として出力されます。
• 本物の Log.d や Log.w, Log.e などを使いたい– Androidapi.Log ユニットの関数を呼びます。

44

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
{$IFDEF ANDROID}
uses
Androidapi.Log;{$ENDIF}
procedure TForm1.Button2Click(Sender: TObject);var
M: TMarshaller;
begin// 毎回マーシャリングするのは面倒だし、IFDEF も面倒
LOGW(M.AsAnsi('ワーニングや★').ToPointer);end;
procedure TForm1.FormCreate(Sender: TObject);begin// ２つ併せてクラス化しておくと良いでしょう{$IFDEF ANDROID}
System.DefaultSystemCodePage := 65001;{$ENDIF}
end;
45

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Delphi で Android プログラム！
• ログの注意点– Delphi がアプリケーションを配置する際に ADB をリセットしてしまうので、ロガーはアプリ実行後に実行を開始します。

このボタンで・ストップ・スタートが切り替えられます

46

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

447

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

まとめDelphi で Android まとめ• まずは、ADB ドライバのインストール！
• Android の流儀、重要！！
• Delphi でプログラムすると、プログラムしない！
• Log 出して！

48

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。