読者です 読者をやめる 読者になる 読者になる

Delphi XE5 で Android アプリ開発をするまでの道のり

delphi

 Delphi XE5 で Android アプリを開発できる環境を整えるまでの道のり。さっと入れてぱっと動かしたらどーんと出来るかなと思っていたら、意外とハマりポイントがあったので、以下整理します。

作業の概要

 Delphi XE5 で Android アプリを開発するまでには、以下のステップがあります。

(1)RAD Studio XE5 (Delphi XE5)をインストールし起動
(2A)実機デバイスを接続して、認識させる。
(2B)エミュレータの動作環境を整える。

(1)RAD Studio XE5 (Delphi XE5)をインストールし起動

  1. RAD Studio XE5 (Delphi XE5) を買う。あるいは30日体験版を入手する。
  2. RAD Studio XE5 (Delphi XE5) をインストールする
  3. Delphi XE5 を起動する。
  4. プロジェクトを作成(ファイル−新規作成−Fire Monkey モバイルアプリケーション(Delphi)−空のアプリケーション

あまりに真っさらだと、実機やエミュレータで動かしたときに、動いているのかどうかよく分からないので、何か適当にアプリっぽいものを作ってしまいましょう。以下は例です。

  1. TButton と TCheckbox を画面上に配置。
  2. TButton(Button1) の Click イベントに、下例のようなコードを記述

CheckBox1.IsChecked := not CheckBox1.IsChecked;

(2A)実機デバイスを接続して、認識させる。

 Windowsの「デバイスマネージャ」と、Delphi IDE の「プロジェクトマネージャ」を使います。
目指すゴールは、Delphiのプロジェクトマネージャの「ターゲット」欄に、接続した実機の名前が出ていることです。

  • 1. Windows のデバイスマネージャを起動
  • 2. 実機デバイスを、ケーブルでPCに接続。その際、実機は「USBデバッグ」モードにしておくこと。
  • 3. デバイスマネージャ上に、そのデバイスが「ADB」という何やらキーワードとともに表示されていればOK
  • 4. その状態で、Delphiのプロジェクトマネージャの「ターゲット」欄に、該当デバイスが表示されているはずです。(表示されてていなかったら「ターゲット」を右クリックして「更新」)


なんと言っても
ハマりどころは、3の部分です。なかなか出てこない。いくつかの端末で試した履歴です。


(a)GalaxyNote(SC-05D) の例
端末:USBデバッグにしてケーブル接続
 ・PC:デバイスマネージャで見ると「!」付きの「Android」になっている
 ・PC:以下のサイトからドライバをダウンロード(KIESを入れたくないので。これが正しいドライバである保証はないけれども、これで動きました)
http://www.samsung.com/us/support/owners/product/SGH-I717ZBAATT?CID=AFL-hq-mul-0813-11000170
 ・いったんケーブルをはずして再接続すると、PC:デバイスマネージャで SAMSUNG Android ADB Interface が見えるようになった
 ・PC: Delphiを立ち上げて簡単なアプリ作成(ボタン配置等)→プロジェクトマネージャの「ターゲット」に「SC-05D」が表示された!
 ・実行 (F9)したら、デバイス上で動いた!

(b)Xperia Z(SO-02E) の例
 ・ケーブルを接続したときにデバイス側に「ソフトウェアをPCにインストールしますか?」と尋ねられるのでそれに従ってPCにソフト(with ドライバ)をインストール。これで、デバイスマネージャに表示されるようになり、無事実機動作確認できるようになりました。


以下のURLからドライバを落としてきて、デバイスマネージャで「ドライバソフトウェアの更新」をする方法では、Win7 64bit ではそもそもエラーとなってインストールできず、Win7 32bit ではインストールできた風なのに正しく(Delphiのプロジェクトマネージャで)認識できませんでした。
http://developer.sonymobile.com/downloads/drivers/xperia-z-driver/

 (追記:2014/01/30)
 後日、新規マシンのDelphi開発環境で Xperia Z(SO-02E)を認識させようとしたら、Delphiの「ターゲット」のところに出てきてくれませんでした。
 上記「ソフトウェアをPCにインストールしますか?」も聞いてくれなかったのは、Xperia上の設定アイコンから「Xperia−USB接続設定−PC Companion のインストール」のチェックマークがはずれていたことが原因だったので、オンにしてからインストールしたのですが、それでもDelphiからは認識せず。
 上記「以下のURLからドライバ」を落としてきて、デバイスマネージャのSO-02Eで右クリックからドライバを更新したら、認識されるようになりました。認識しないときはデバイスマネージャ上で、「ほかのデバイス」の中に「!」つきで表示されていたり、「ポータブルデバイス」の中にXperiaZが表示されていたりしますが、正しくドライバを入れた後では、上の画像のように 「sa0107」の中に表示されます。
 (追記おわり)

(c)GalaxyTab(SC-01C)の例
 ・以下のものを入れようとしたら、「すでにある」と言われた。GalaxyNoteでの確認を先にしていたせいかもしれない。
 http://www.samsung.com/jp/support/usefulsoftware/KIES/JSP#versionInfo
 SAMSUNG_USB_Driver_for_Mobile_Phones_v1.5.25.0-retail.exe

 実機で、「開発者機能」がどこにあるかわかりにくかったけど、「アプリケーション−開発」の中にありました。

(d)Nexus7(2013) (本項 2014/02/13追記)
・Androido Tools(Android SDK manager)を起動
・Extrasの中の、「Google USB Driver」 をインストール
・コントロールパネルのデバイスマネージャを起動
・Nexus7が「?」マークになっているので、右クリックして「ドライバーソフトウェアの更新」
・「コンピュータを参照してドライバソフトウェアを検索」のほうを選んで、フォルダ名として、android sdk の extras ディレクトリを指定。android sdk ディレクトリは、Android SDK Manager の上部に「SDK Path:」として表示されています。
・デバイスマネージャで、Nexus 7 が正常動作表示となりました。

(e)Nexus7(2012) (本項 2014/03/04追記)
・Nexus7(2013)と同様に、Nexus7が「?」マークになっているので、右クリックして「ドライバーソフトウェアの更新」して、
・「コンピュータを参照してドライバソフトウェアを検索」のほうを選んで、フォルダ名として、android sdk の extras ディレクトリを指定。
・としたものの、ドライバがないと言われてしまった。
・デバイスマネージャで、「?」マークがついているNexus7を右クリックして「プロパティ」内、詳細タブの「ハードウェアID」を確認
・extra ディレクトリ下の、google\usb_driver\android_winusb.inf を編集。動作させているWindowsに応じて、[Google.NTamd64]または[Google.NTx86]セクションの ; Google Nexus 7 をコピーして、Nexus7(2012)用の記述をする。このとき、パラメタ部分を先ほど確認したハードウェアIDに置き換える。
例:


;Google Nexus 7
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01

;Google Nexus 7(2012)
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_D002
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_D002&MI_01
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_D002&MI_01



その他、端末を認識される方法には、以下のページが役に立つかもしれません。

(2B)エミュレータの動作環境を整える。

 デバイスを接続しない状態だと、Delphi の「プロジェクトマネージャ」の「ターゲット」には、esxe5_android(5554) というエミュレータが表示されています。実態は、C:\User\<自分>\.android にあります。
(Win7 32bit では上記のとおりなのですが、Win7 64bitのマシンでは、このディレクトリ内がカラッポになっていて、当然「ターゲット」にも表示されませんでした)。

 しかし、このエミュレータでは Delphi で作ったアプリを動作させることはできませんでした。長時間待たされた後「Project1 isn't responding. Doyou want to close it?」とエミュレータ側に表示されてしまいました。


 そこで、自分でエミュレータ環境の設定を行います。Android Tools (スタートメニューの、XE5 の中にあります)を選んで Android SDK Manager を立ち上げ、
1.「Deselect All」で既存チェックマークを全部外す
2. 最新Android(今回は Android 4.3(API 18))の ARM EABI v7a System Image をチェック
3. Install 1 package... ボタンをクリック、インストール
4. インストールが終わったら Tools-Manage AVDs を選択してサブ画面を開く
5. New を押して設定項目を入力。
    名前は任意(例:Android_for_XE5)
    Deviceも好きなのを(大きすぎると作業しにくいので 480x800 サイズのを選びました)
    Targetは最新のを(Android 4.3 - API Level 18)
    そして Emulation Options の Use Host GPU にチェック


エミュレータの設定が完了したら、Delphi XE5 に戻って、プロジェクトマネージャの「ターゲット」を右クリックして「更新」すると、今追加した名前が見えます。ダブルクリックして、ボールド(太字)にしておきましょう。


 これで、Delphiでビルドするとエミュレータ上で動作の確認をできるようになります。解像度やメモリサイズなどが異なる色々なエミュレータを試したければ、Android SDK Manager で、そのぶんだけエミュレータを作成すれば、Delphi上で切り替えながら試すこともできるかと思います。
エミュレータの起動に、えらく時間はかかりますが、、、)



 以上、Delphi XE5 で Android アプリ開発をはじめる際にハマりがちなポイントについて、まとめてみました。皆さんの

なお、今回の問題解決にあたっては、Facebook 上のコミュニティ、Delphi Talks ( https://www.facebook.com/groups/delphitalks/ ) で、シリアルゲームズの細川淳さんに多大なるご教示をいただきました。末筆ながらこの場にて感謝の意を表します。


Delphiでかんたん iOSアプリプログラミング 土木建築エンジニアのプログラミング入門
Delphiでかんたん iOSアプリプログラミング
土木建築エンジニアのプログラミング入門