Androidアプリの開発環境

Java言語を使用したAndroidアプリの開発で、それに必要な環境を以下に列挙します。
【1】JDK (Javaの開発環境): OracleのJava開発環境
【2】Android SDK
【3】Eclipse (Java のGUI開発環境)
【4】Eclipse用のADT(Android Development Tools)プラグイン

上記で示したJavaの開発環境で、Andoroidアプリをjavaで開発できます。
Android OSでは、Dalvik(ダルビック) と呼ばれるJavaの仮想マシンで動作するようになっているからです。
(Dalvik(ダルビック) Android OS用のJava言語で開発されたプログラムの仮想マシンです。)
Androidアプリケーションは『 .apkの拡張子』の形態になっています。それは、次のように作られます。
Javaのソースを作り、コンパイルしてJavaのバイトコードを作る手順で、次のように進められます。
  1. 開発対象の APIレベルを決めて、そのライブラリを利用するjavaのソース作成し、コンパイルする。
    (Android OSのバージョンにより使用するAPIレベルの番号が決められて、下位互換性があります。
    下記で示していますが、SDK Manager.exeでは、使う範囲のAPIレベルの番号をチェックしてインストールしておく必要があります。)
  2. Android SDKに含まれるビルドツール「dx」によって、Dalvikが実行できる「dex(Dalvik Executable Format)」というバイトコードに 再度コンパイルする。
  3. 上記のdexファイルや、AndroidManifest.xmlなどのXMLで記述された設定ファイル、リソースファイル(音楽や画像などの)を、 ZIPでまとめて.apkの拡張子のパッケージファイルを作成する。
こうして作られたパッケージファイルをAndroid実機や AVD(エミュレータ用の仮想デバイス)に転送してデバックして作り込みます。

Androidでは、「Just In Time Compiler(JIT) 」よって汎用的なdexのバイトコードがマシンコードに変換されます。
これにより、アプリとしてハードウェア固有のプログラムになって動作するのがDalvikの中の動作の仕組みです。

「Just In Time (JIT) Compiler」とは、 実行時コンパイラとも呼ばれてソフトウェアの実行時にコードのコンパイルを行い実行速度の向上を図るコンパイラのことです。
対して、事前コンパイラ (Ahead-Of-Timeコンパイラ、AOTコンパイラ)と呼ぶタイプがある(C言語などのコンパイルです)。
事前コンパイル方式と比べると、JIT方式ではコンパイル時間の分がオーバーヘッドとなります。 ですが、JIT方式では、表面上はインタプリタとして動作するが、内部でコンパイルを行い、メモリ上に生成した機械語のコードが実行されるため、 インタプリタと比べると実行速度を向上することができ、CPUやOSに依存しない実行形式を配布を可能にします。
つまりJIT方式は、OSに依存しないというインタプリタの利点を保ったまま、実行速度が遅いという欠点を克服しようとしたアプローチで、 それを可能にするように、設計したものが Dalvik の環境と言えます。

開発環境の準備 (Eclipse)

2013年8月〜2015年1月では、上記【2】、【3】、【4】をまとまめたzipファイル(Eclipse ADT Bundle版)を 『developer.android.com』のサイトからダウンロードできていました。
ですが、2014年12月8日に、次世代のAndroid開発環境であるAndroid Studioの正式版が公開され、 それに伴ってEclipse ADT Bundle版の配布を止めています。
(この最後で配布されたファイルは、 adt-bundle-windows-x86-20140702.zipでした。)
そして現時点(2015年2月)ではEclipse向けのADTプラグイン単独の配布だけになっています。

GoogleのEclipseサポートが将来的に、いつまで継続するか明確にしていませんが、 Googleとしては、Android Studioを使ってほしい意向なのでしょう。 その意味でこれから入門する場合、、Android Studioを開発環境を選択すべきかもしましれません。
(最新の技術は日進月歩の勢いで発展し、そのためかEclipseの開発環境自体が希望通りに動作しない状況に 対処するのが大変でした。その対処の一本化でAndroid Studioを選択してほしい意向を感じます。)
ですがEclipseを使い慣れており、Eclipseの便利なその他のプラグインを併用して使う私などは、 EclipseによるAndroidの開発を捨てがたい状況です。
そこで将来、Android Studioでも使える前提で、個人的にはもうしばらくEclipseを使って行く予定です。
(現時点でソースコードをutf-8にしておこないと、Android Studioでのインポートで文字化けするようで、 Eclipseのソース保存もutf-8にします。デフォルトでそうなっている環境は「Eclipse IDE for Java EE Developers」なので、 これをベースとする環境が良いでしょう。)

このサイトで紹介している図のほとんどは、Eclipse ADT Bundle版を使った時のもので、 日本語化が施されていない状態のままで使いました。 (日本語化する場合は、「http://mergedoc.sourceforge.jp/」より日本語化が施されているパッケージが入手できます。)

私が現在使っている開発環境の紹介

上記でも述べたように、開発中に陥った不具合がたくさんありました。その状況は、ここで紹介しています。
現状の結論として、「Android SDK」 は安易にアップデートするべきでないと感じます。
そして各開発ツールで使う通常の「Android SDK」用のフォルダは1つとして使うことです。
これは「Android Studio」や複数の「Eclipse」環境でで一つの「Android SDK」用のフォルダを共有できるからでです。
そうして置かないと、プロジェクトの移動で問題が起きやすいという経験からです。
(なお、アップデート用に「Android SDK」用フォルダを別途に用意して、 それを指定した確認後に 通常使う「Android SDK」用フォルダと入れ替えています。 つまり、以前の「Android SDK」環境に戻せる対策をした方がよいということです。 開発環境が一つであれば、このような手間は無用かもしれません。)

以下に現時点(2015年2月)の環境構築例を示します。(サーバと連携する作品作りも容易で、UMLのドキュメントを作れる環境)
  1. Eclipseの取得と初期設定
    「http://mergedoc.sourceforge.jp/」より日本語化されているフルパッケージ 「Eclipse 4.4.0 Luna ルナ SR1 for Windows ベース」が入手できるのでそれをダウンロード。 その解凍フォルダのpleiadesを『C:\Users\自身のユーザ名\Documents\R』に入れている例で示します。
    この中に、『workspace』のフォルダを新規作成で作っておきます。
    つまりRのフォルダにまとめて管理する例です。この中に次の2つがある状況です。

    pleiades
    workspace
    (なお、http://www.eclipse.org/downloads/から 「Eclipse IDE for Java EE Developers(eclipse-jee-luna-SR1a-win32.zip)」をダウンロードして、 別途に日本語化用に http://mergedoc.sourceforge.jp/」より「pleiades_1.5.0.zip」のプラグインだけダウンロード して設定する方法もあります。)
    『eclipse』の中にある『eclipse.exe』を開くと、初めに『workspace』を問い合わせるダイアログがでます。
    『workspace』は各作品を、プロジェクトと言う単位で管理するもので、この中に各種ファイルを作って開発します。
    この最初の指定で、開発環境の初期化が行われます。
    その後で、関連フォルダを移動すると不具合が生じことがあり、 『workspace』のフォルダの移動は避けた方がよいでしょう。
    個人的には、USBメモリで持ち歩きたく、その環境は、 (USBメモリ入れてに開発環境を持ち運ぶ方法の紹介)を参照してください。

    私の場合は、UMLのドキュメントもEclipseで作成しており、以下の追加をしています。
    1. グラフィカル編集フレームワーク GEF SDKのインストール(後述のUMLプラグインに必要)
      Eclipseを起動して、「ヘルプ」の「新規ソフトウェアのインストール」を選択し、 そこで「http://download.eclipse.org/tools/gef/updates/releases/」を入力してEnterする。 これで出現する 「 GEF (グラフィカル編集フレームワーク)」をチェックして「次へ」進み、 同意のチェックをして完了する。(この時Eclipseの再起動)
    2. 軽量なUMLプラグインAmaterasUMLのインストール
      「AmaterasUML_1.3.4.zip」を「http://sourceforge.jp/projects/amateras/releases/」から探してダウンロードして、 そのzipファイル内部にあった3つの「.jar」ファイルを Eclipseのプラグインフォルダ「eclipse\plugins」」にコピーする。 その後にEclipseを再起動する。 これで「新規」の「その他」で「AmaterasUML」が選択できるはずです。
  2. Android 開発用SDKの取得とアップデート、AVDの作成
    http://developer.android.com/sdk/index.htmlのページで、「stand-alone SDK Tools」 (android-sdk_r24.0.2-windows.zip)をダウンロードして解凍し、 そのフォルダ『android-sdk-windows』をeclipseと同様にRにコピーします。 この内容を示します。
    android-sdk-windows
    pleiades
    workspace
    (Android SDKのフォルダがすでに存在していれば、それを使ってよい。)
    そして、この中の『SDK Manager.exe』を起動して、アップデートします。 その例をここで示します。
    また、エミュレータ用の AVD(仮想デバイス)を『AVD Manager.exe』で作成しておきます。 その例をここで示します。
  3. EclipseのAndroid 開発用プラグイン追加
    pleiades内のEclipseを起動して、「ヘルプ」メニューの「新規ソフトウェアのインストール」項目を選択し、
    そこで、「https://dl-ssl.google.com/android/eclipse」を入力してEnterします。
    すると現れる「開発ツール」にチェックして「次へ」をクリックし、同意のチェックをして完了させます。 
    (Eclipseの再起動が促され、再起動します。)
    再起動後、「ウインドウ」メニューの「設定」項目から、androidをクリックします。
    そこで現れる「SDKのロケーション」で、上記で配置した「android-sdk-windows」を指定します。
    以上で、ファイルメニューの「新規」から「androidアプリケーションプロジェクト」が選択できます
後述のandroid-studio環境も含めた環境例をここに示します。

開発環境の準備 (android-studio)

Android SDKを取得してアップデート、AVDを作成
Android SDK のダウンロード は、上記説明の Android 開発用SDKの取得とアップデート、AVDの作成に 記述した内容と同じように行います。 すでにEclipse用であればあれば必要ありません。
(なお、All Android Studio Packagesというの全てを一括して入手する方法もあるようです。)

android-studioの取得と初期設定
http://developer.android.com/sdk/index.html から android-studioの「android-studio-ide-135.1641136-windows.zip」ダウンロードします。
そして、これを解凍した「android-studio」フォルダをRに配置すます。 (その例

「コントロールパネル」内の「システムとセキュリティのシステム」を選択して、 「システム詳細設定」から「環境変数」を選び、 「JAVA_HOME」の環境変数にJDKの位置(例「C:\Program Files\Java\jdk1.7.0_25」)を設定します。
それから「android-studio\bin」内のstudio起動ファイル(stdio.exeまたは、studio64.exe)のショートカットを作り、起動します。

次へのボタンで進みます。 上記のように、customを選択して進むと、Android SDKのフォルダを指定できます。
また過去に、android-studioを使ったことがあるマシンの場合は、次のダイアログが出ます。 それを無視して、新規にインストールする場合は、次のように選択します。



SDK Manager.exe(eclipse起動後の最初の設定)

Androidにはすでにたくさんのバージョンがあります。
(バージョンによるライブラリはAPI番号で指定します。)
そこで、どのRev環境で作成し、どのバージョンandorid機器用の作品を作れるようにするかの設定行うのが SDK Managerの役割です。
eclipseからは、『window』メニューの『Android SDK Manager』を選択することで起動します。
(最初の起動は時間がかかります。「R:\SDK Manager.exe」の起動でも可能ですが、eclipseから呼び出した方がよいでしょう。)
ネットからダウンロードされて設定されるのですが、 安易に全ての環境、全ての機器用に設定しようとすると、インストールに膨大な時間が必要となります。 (フル設定は10ギガ以上のサイズが必要と思われます。よって最少に止めるのがよいでしょう。)
以下ではデフォルトに対して、API 17API 20のいくつかのチェックを追加指定している例です。

この設定が正しくないと、希望の作品が作れないし、次のエミュレータが起動しないので注意が必要です。
私の場合は、上記のように、デフォルトのAndoroid 4.4W (API 20)と、 特別 にAndoroid 2.2 (API 17) の作品を作れるように追加設定しました。

エミュレータ用の AVD(仮想デバイス)作成

eclipseからは、『window』メニューの『Android Virtual Device Manager』を選択することで起動します。
上記の SDK Manager に指定した API 17 をターゲットにした「WVGA_480_800_API_17」(4 WVGA(Nexus S) 480×800:hdpiデバイス)を作成した例で、 「Details...」ボタンをクリックした状況でう。

上記の「start...」ボタンをクリックして、「WVGA_480_800_API_17」のAVDを起動した画面を以下に示します。

以下に、操作用ショートカットキーを示す。
キー操作
HOMEHome
Page Up または F2Menu (左ソフトキー)
Page DownStar (右ソフトキー)
ESCBack
F3通話 ボタン
F4終話 ボタン
F5検索
F7電源 ボタン
Ctrl-F5音量UP
Ctrl-F6音量DOWN
Ctrl-F3カメラ ボタン
Ctrl-F11 または KEYPAD_7 前のレイアウトに変更(向き変更)
Ctrl-F12 または KEYPAD_9 次のレイアウトに変更(向き変更)
F8ネットワークON/OFFのトグル
F9コードプロファイリングのトグル (-trace 起動オプションの場合)
Alt-Enterフルスクリーンモードのトグル
F6トラックボールモードのトグル
Deleteトラックボールモード(キー押下中)
KEYPAD_4/8/6/2左/上/右/下キー
KEYPAD_5中央キー

USBメモリ入れてに開発環境を持ち運ぶ方法の紹介

「eclipseやsutudio」を含めたフォルダRの内容(例)は次のようになります。

上記の「Rドライブへ.bat」の内容は、 subst R: 上記Rフォルダの絶対パスを実行させます。
この実行で、仮想の「R:」ドライブを作っています。(その内容がRという訳です。)
そしてこのバッチファイルの実行後の仮想ドライブR:で、『R:\pleiades\eclipse』のEclipseを動作させます。
(substはWindowsの仮想ドライブ作成用のコマンドで、上記を解除する場合は、subst R: /Dと入力します。)

これは、複数のバージョンの開発環境でも同一の開発環境(上記のRフォルダの内容をR:ドライブの直下にする)にする細工です。
これにより、『このRフォルダ』を移動した場合でも、その位置を仮想ドライブのR:直下へ割り当てをし直せば、 以前と同じ環境での開発が可能になります。 また、バージョンが変っても、別途のEclipse環境を重複させた場合でも同じ操作で済みます。
(これは仮想ドライブになっている分だけ少し遅くなります。
  開発環境の移動の必要がないなら、使った後でフォルダ移動をしない使い方が良いでしょう。)

上記のRフォルダをUSBメモリに入れて、 持ち運ぶこともできます。動作したいマシンで、仮想で同じドライブを割り当てて、 そこで開発ツールを起動すればよい訳です。
なお、この方法は仮想デバイス(AVD)の環境の移動をしていません。移動先のマシンでも別途に用意する必要があります。
仮想デバイスは、アンドロイド「sdk」フォルダ内の「AVD Manager.exe」を使って開発者が作成しますが、 その位置は、開発者のユーザディレクトリ内に記憶されます。
Windows7の場合であれば、「C:\Users\(ユーザー名)\.android\avd」の位置に仮想デバイスが作られます。
この位置は環境変数「ANDROID_SDK_HOME」で変更できるようです。

補足

addroid.bat のコマンドがあります。これを使うとEclipse の開発環境がない状態でも、 コマンドプロンプトで作品を作ることが可能です。
ここで このフォルダ内に『platform-tools』のフォルダがあって、 その中に adb.exe コマンド(Android Debug Brige) で R:\sdk\extras\google\usb_driver\android_winusb.inf を確認するとよいでしょう。

なお、 Android NDK(Native Development Kit)と呼ばれるキットがありますが、 これはAndroidアプリケーションの一部をCやC++などネイティブコードで記述することが出来るようにするためのものです。
(つまり Dalvikでは、JNI(Java Native Interface)を使用することが可能で、C++で書かれたネイティブコードを呼び出すことができます。)

(さて グーグルで開発したART(Android RunTime)では、JITの代わりに「Ahead Of Time (AOT) 」というコンパイラを使っている。 AOTコンパイラは、アプリがデバイスにダウンロードされた時点でバイトコードをマシンコードに変換する。 このマシンコードはデバイスの記憶装置をより多く必要とするが、アプリの起動は早くなり、動作もスムーズになとされ、今後注目される。)

AndroidのEclipse開発で陥った不具合経験のまとめ

こちらに移動しました。