Androidアプリケーション技術者認定試験ベーシックの試験範囲の知識をまとめた(11)

# 開発環境

※ 明らかに情報古いけどテスト範囲なのでそのまま学習。

## Eclipse

### Eclipseとは

オープンソースの統合開発環境。もとはIBNがJava用に開発。2001年にオープンソース化。
現在ではEclipse Foundationが取り仕切っている

### プラグイン

Eclipseにはプラグインという仕組みがあり、いろいろな機能拡張が出来る
AndroidではADT(Android Developer Tools)というプラグインを使用する。

### Eclipseの使い方

使うためにはJRE(Java Runtime Environment)が必要。
通常はJDK(Java SE Development Kit)を事前にインストールする。

#### Eclipseのダウンロードとインストール

サイトからダウンロードして解凍。展開し配置する。

#### Eclipseの起動

eclipse.exeを実行し、ワークスペースフォルダを指定すると起動する。

#### 日本語化プラグインの利用

Pleiadesという日本語化プラグインを利用すると日本語で表示されるようになる。
ダウンロードしたファイルをpluginsとfeaturesの各フォルダに配置して、
eclipse.iniファイルを編集する

Pleiades All in Oneという最初から組み込まれたものもダウンロードできる

## ADTプラグイン

### ADTとは

Eclipseで、Androidアプリケーション開発を行うためのプラグイン。
ADTプラグインを組み込むことで次の操作が可能となる

- Androidプロジェクトの生成、ビルド、パッケージ化、インストール、デバッグ
- Android SDKとAVDの管理、DDMS、adbなどのAndroid SDKのツールの利用
- JavaソースコードやXMLリソースの作成や編集

### ADTの使い方

#### ADTのインストール

ADTはEclipse上でインストールする。

#### Android SDK Manager

Android SDK Managerにより、Android SDKのインストールやアップデートができる。

#### AVD Manager

AVD ManagerによりAVD(Android Virtual Device)の作成編集削除ができる。
AVDはエミュレータを使うときに必要。

#### Androidプロジェクトの作成、ビルド、デバッグなど

ファイルメニューのプロジェクトからAndroidのプロジェクトやテストプロジェクトが作成できる

#### ソースコードやリソースの編集

いろいろ編集できる。CTRL+[SPACE]で入力補完とか
XMLファイルの編集も可能

#### Android SDK ツールの利用

Eclipseで利用可能なツール

|ツール|概要|
|---|---|
|adb|Androidアプリケーションの実行環境へのアクセスを可能とする|
|DDMS|Androidアプリケーションをデバッグするための各種機能を提供する|
|Hierarchy Viewer|Androidアプリケーションに含まれるViewの階層を表示する|
|Pixcel Perfect|Androidアプリケーションの画面を拡大表示し、画面の設計や構築支援を行う|
|ProGurard|ソースコードの最適化（リバースエンジニアリング対策）を行う|
|TraceView|Androidアプリケーションの実行ログを取得する|

## layoutopt

### layoutoptとは

レイアウトのXMLにおいて、実際に使われない無駄な定義がないかをチェックするためのツール

### layoutoptの使い方

コマンドラインツール。Android SDKのtoolsフォルダに格納されている。
レイアウトファイル名かレイアウトファイルを含むフォルダ名を引数として渡す。
問題があれば、ファイル名とその行と内容を表示する。
検出するだけで自分で直す必要がある。

#####　lintツール

ADT16以降で提供されているツール。アプリケーションの潜在的な問題を検出できる。
レイアウトの問題も検出できるため、layoutoptの代わりに使うこともできる

## Draw 9-patch

### Draw 9-patchとは

AndroidではPNG形式の画像を使う。画像をビューの背景とすると、ビューのコンテンツのサイズが変わった場合に
画像のサイズも変わってしまい、見た目が崩れる可能性がある。
NinePatchは画像のどこを拡大してよいかどこにコンテンツが入るかを指定可能なPNG形式の画像。
Draw 9-patchはNinePatch形式の画像を作成するツール

### Draw 9-patchの使い方

コマンドラインから起動する。toolsフォルダに入っており、draw9patchコマンドの実行で起動する。

#### 画像のオープン

ドラッグするかFileメニューから指定することで画像を開ける。
左側に元の画像、右側に画像を拡大した時のイメージが表示される。

#### 拡大領域の指定

拡大してよい領域を指定することが出来る。ボタンの端は拡大しないなど。

#### コンテンツ領域の指定

ボタンにテキストなどが入る場合コンテンツ領域を指定できる。Show contentボックスをONにすることで、コンテンツ領域のイメージが紫色で表示される。

#### NinePatch画像の保存

ファイルメニューのSaveより保存できる。NinePatch形式のファイルの拡張子は9.pngとなる。
ex. button.png -> button.9.pngとなる

## aapt

### aaptとは

コンパイルしたコードをapkファイルにまとめるツール
Android Asset Packaging Toolの略

### aaptの使い方

コマンドラインツールとしても利用できる。（通常はEclipse上で使う）

#### apkファイルの内容の一覧表示

aapt l[ist] コマンドで指定したファイル（zip, jar apk)の内容を表示できる

#### apkファイルの内容表示

aapt d[ump] コマンドで指定したapkファイルの内容を表示できる

aapt dumpコマンドに指定する表示内容

|指定|表示内容|
|---|---|
|badging|apkファイル内のラベルとアイコン|
|permissions|apkファイル内のパーミッション|
|resources|apkファイル内のリソース|
|configurations|apkファイル内の設定|
|xmltree|apkファイル内のコンパイル済みXMLファイル|
|xmlstrings|apkファイル内のコンパイル済みXMLファイルの文字列|

#### apkファイルのパッケージ化

aapt p[ackage]でapkファイルを作成する。

#### apkファイルからのファイルの削除

aapt r[emove]でapkファイル（zip,jarも可）から指定したファイルを削除する。

#### apkファイルへのファイルの追加

aapt a[dd]ででapkファイル（zip,jarも可）に指定したファイルを追加する。

#### その他のコマンド

aaptのみで実施するとヘルプが表示される。aapt vでバージョン情報が表示される

## AIDL

### AIDLとは

AIDL（Android Interface Definition Language）という。
Androidアプリケーションは独立したプロセス上で実行されている。
そのプロセス間通信を利用する場合のインタフェースを定義するツール

### AIDLの使い方

1. 他のアプリケーションからアクセス可能なフィールドとメソッドを含むインターフェースを定義し、aidlファイルとして保存する
1. aidlコマンドで作成したaidlファイルからJavaのインタフェースを作成する（Eclipseの場合、aidlファイルを自動的にJavaのソースコードに変換してくれる）
1. サービスで、作成されたインターフェースの内部クラスであるStubクラスを継承してaidlファイルで定義したメソッドを実装する
1. サービスで、Stubクラスのインスタンスを返すようにonBindメソッドをオーバーライドする

#### aidlファイルの作成

次のデータ型を利用してフィールドやメソッドを定義する。

- Javaの基本型
- Stringクラス、Listインターフェース、Mapインターフェース、CharSequenceインタフェース
- AIDLによって定義したインターフェース（import文でインポートする必要がある）
- Parcelableインターフェース(import文でインポートする必要がある)

#### aidlコマンドによるJavaインターフェースの作成

作成したaidlファイルからaidlコマンドでJavaのインターフェースを作成する（Eclipseの場合は自動的にできる）
aidlコマンドはtoolsフォルダに格納されている。

#### 定義したメソッドの実装とonBindメソッドのオーバーライド

サービスを継承するクラスを作成し、AIDLで定義したインタフェースのメソッドを実装する。
その際、作成されたインターフェースの内部クラスであるStubクラスを継承する必要がある。
さらにonBindメソッドをオーバーライドして、前述のStubクラスのインスタンスを返すようにする

#### AIDLで定義したメソッドの呼び出し

1. AIDLで定義したインターフェースのインスタンスを宣言する
1. ServiceConnectionインターフェースを実装する
1. bindServiceメソッドを呼び出す際に、サービスのクラスを指定したインテントと実装したServiceConnectionのインスタンスを渡す
1. ServiceConnectionインターフェースのonServiceConnectedメソッド内で、AIDLで定義したインタフェースのStubクラスのasInterfaceメソッドを呼び出す。asInterfaceメソッドには、onServiceConnectedメソッドの引数として渡されるIBinderオブジェクトを指定する
1. asInterfaceメソッドはAIDLで定義したインターフェースのオブジェクトを返すため、このオブジェクトを使ってメソッドを呼び出す。

## sqlite3

### sqlite3とは

SQLiteを利用する為のコマンドラインツール。SQL文の発行もできるほか、各種情報を表示できる

### sqlite3の使い方

toolsフォルダに格納されている。
通常は、adb shellコマンドでエミュレータもしくは実機にアクセスしている状態で、データベースを操作する。

#### sqlite3を単独で実行

単独で実行することもできるので、試しにいろいろする場合に便利につかえる。

#### 各種コマンドの実行

主なコマンド

|コマンド|概要|
|---|---|
|.database|データベースの一覧を表示する|
|.tables|テーブルの一覧を表示する|
|.schema|テーブルを作成したCREATE TABLE文を表示する|
|.dump|データベースの内容をSQLの形式で表示する|
|.header on/off|ヘッダを表示する／しない|
|.show|sqlite3の現在の設定を表示する|
|.help|sqlite3のヘルプを表示する|
|.exitまたは.quit|sqlite3を終了する|

#### SQL文の実行

直接SQLも実行可能。末尾に;をつける

## dx

### dxとは

AndroidアプリケーションのソースはJavaだが、Dalvik仮想マシンで実行するにはJava->Classファイル->dexファイル（Dalvikバイトコード）に変換する必要がある。これを行うのがdxツールである。
Eclipseの場合は自動で行われるため、単独で使う場合はほとんどない。

### dxの使い方

dxツールはコマンドラインで実行する。platform-toolsフォルダに格納されている。
dx --helpでヘルプが表示される

## zipalign

### zipalignとは

apkファイルを最適化するツールである。具体的には、apkファイル内の圧縮されていないファイル（画像ファイルなど）を４バイト境界に合わせる。これをapkファイルのアラインメントという。
Eclipseを利用している場合、自動的に実行されるためあまり単独で実行する必要はない。

### zipalignの使い方

コマンドラインから実行する。toolsフォルダに格納されている。