Androidプロジェクト
Androidプロジェクトの中身を簡単にまとめます。
ネタ元はAndroid SDKのドキュメントと、EclipseのAndroid SDK Pluginで自動生成された雛形の動作検証です。
ネタ元はAndroid SDKのドキュメントと、EclipseのAndroid SDK Pluginで自動生成された雛形の動作検証です。
プロジェクトのディレクトリ構成
Androidアプリを作るなら、ごく当たり前の知識として知っておく必要があります。
プロジェクトルート
- src ソースコード用ディレクトリ
- gen ADTが自動生成したファイル用ディレクトリ。R.javaやAIDLファイルから生成されたファイルが該当。
- assets 生のデータファイルを保存する。ビルド時にapkファイルへ組み入れられ、ファイルシステムと変わりない方法でアクセスできる。
- bin ビルドされたファイル用ディレクトリ
- res ビルドされたリソースファイル用ディレクトリ
- libs ライブラリファイル用ディレクトリ
- res リソースファイル用ディレクトリ
- drawable-**** 画像ファイルや、レイヤー定義などを記載した描画用定義XMLファイルを保存する。画面解像度ごとにディレクトリが分かれているモヨウ。
- layout レイアウト定義XMLファイル用ディレクトリ
- menu メニュー定義XMLファイル用ディレクトリ
- values 文字列や設定情報等用のディレクトリ。resディレクトリ内の他のXMLファイルはファイル名ベースでアクセスするのに対し、XML要素を解析し、それぞれの要素名をR.javaファイルに展開しアクセスする点に違いがある。
- raw 生のデータファイルを保存する。assetsディレクトリとの違いはアクセス方法で、こちらはR.javaファイルを通じてリソースファイルとしてアクセスする。
- AndroidManufest.xml アプリの基本情報を定義する。アプリバージョン、製作者、対応・必要APIバージョン、必要な外部ライブラリなどなど、様々な情報を定義する。奥が深い。
リソースファイル用ディレクトリと、マニフェストファイルは、特に勉強が必要。
詳細が知りたければSDK Managerでドキュメントをインストールし読んでみると良い、全部英語だけども。
詳細が知りたければSDK Managerでドキュメントをインストールし読んでみると良い、全部英語だけども。
雛形プロジェクトの動作
ADTでプロジェクトを作成すると、HelloWorldが表示される簡単なアプリが出来上がった状態になっている。
その動作の細かな点をつついて、それぞれのディレクトリに格納されたファイルが
どのように連携するかを調べてみた。
その動作の細かな点をつついて、それぞれのディレクトリに格納されたファイルが
どのように連携するかを調べてみた。
- AndroidManifest.xmlを解析しアプリを起動、アクティビティの定義を読み込む。
XMLファイル中では「@」を用いることでリソースにアクセスすることができ、アプリケーション名やスタイル定義の指定に使用されている。
<application
android:icon="@drawable/ic_launcher" <<<res/drawable-****/ic_launcher.pngファイルを参照
android:label="@string/app_name" <<<res/valus/strings.xml内の文字列を参照
android:theme="@style/AppTheme" > <<<res/valus/style.xml内の定義を参照
<activity
android:name=".MainActivity" <<<ここで起動するアクティビティを指定
android:label="@string/title_activity_main" > <<<res/valus/strings.xml内の文字列を参照
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
- binディレクトリ内のデフォルトアクティビティを起動する。
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); <<<レイアウト定義ファイルを指定
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu); <<<メニュー定義ファイルを指定
return true;
}
}
- レイアウト定義ファイル res/layout/activity_main.xml
- メニュー定義ファイル res/menu/activity_main.xml
Activityの動作に従い読み込まれる。
それぞれの定義ファイルにはリソースへのアクセスが指定されている。
それぞれの定義ファイルにはリソースへのアクセスが指定されている。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/hello_world"
tools:context=".MainActivity" />
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_settings"
android:title="@string/menu_settings"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
以上が簡単な動作解説です。
マニフェストファイルが起点となり、アクティビティが実際の動作を担っており、
動作時に様々な箇所でリソース内の定義ファイルが読み込まれているのが分かる。
マニフェストファイルが起点となり、アクティビティが実際の動作を担っており、
動作時に様々な箇所でリソース内の定義ファイルが読み込まれているのが分かる。
Webアプリケーションなどに比べると非常に単純な構成となっているが、アプリが大きくなるとファイルが増え、管理が難しくなりがち。だがディレクトリ構成の原則に従いアプリを作成することで、誰にでも分かりやすい、無論のこと自分自身にも分かりやすい管理しやすい構成にできる。


