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アプリケーションなどに比べると非常に単純な構成となっているが、アプリが大きくなるとファイルが増え、管理が難しくなりがち。だがディレクトリ構成の原則に従いアプリを作成することで、誰にでも分かりやすい、無論のこと自分自身にも分かりやすい管理しやすい構成にできる。