アンドロイド - Project構造を学ぶ

By JS | Last updated: August 17, 2017

プロジェクトファイル(Androidビュー)

図1に示す画面は、Android Studioの左側にProjectボタンを押すと、見ることができます。基本的にはAndroidviewを示しています。他のviewが設定されている場合は、左上のドロップダウンメニューをクリックしてAndroidに設定すると、Android viewに変更されます。

Androidviewで示されている構造は、実際のDirectory構造とは異なります。開発利便性のために必要なフォルダだけを示しています。

android project structure

GradleScriptsグループはbuildに関連するファイルがあります。 appグループは、appのsourceなどを含んでいて、下位に次のような内容を示しています。

manifest
AndroidManifest.xmlファイルが含まれています。 AppのSpecを示していると考えてください。

java
Java sourceとJunitファイルを含んでいます。

res
コードではなく、すべてのResource(Image、layout、Stringなど)のファイルが含まれています。

プロジェクトファイル(プロジェクトビュー)

図2は、Projectviewの画面です。左上のドロップダウンからProjectを選択すると、Project viewに切り替えることができます。 Project viewは、実際のDirectory構造を示しています。

android project structure

ここでは、DirectoryとFileの簡単な説明です。

build/
Build outputファイルがあります。

libs/
Private library(プライベートライブラリ)があります。

src/
このモジュールのすべてのcodeとresourceファイルがあります。

  • androidTest/

Android端末で実行されるinstrumentationテストのcodeがあります。詳細については、Androidテスト文書を参照してください。

  • main/

main sourceファイルがあります。 main sourceはAndroid codeとresourceがあります。

  • AndroidManifest.xml

アプリケーションの特性と各構成要素を説明します。詳細については、AndroidManifest.xml文書を参照してください。

  • java/

Java sourceがあります。

  • jni/

JNI(Java Native Interface)を使用しているnative codeがあります。詳細については、Android NDK文書を参照してください。

  • gen/

Android Studioで作成するJavaファイル(例えば、R.javaファイル)とAIDLファイルから生成されるインタフェースがあります。

  • res/

アプリケーションresource(例えば、drawable、layout file、UI stringなど)があります。詳細については、アプリケーションのリソースを参照してください。

  • assets/

.apkファイルの中に一緒にコンパイルする必要があるファイルがあります。この場所のファイルは、AssetManagerを介して使用することができます。

  • test/

ホストJVMで実行されるローカルテストのコードがあります。

build.gradle(module)
モジュール別のビルド構成を定義します。

build.gradle(project)
すべてのモジュールに適用されるビルド構成を定義します。このファイルは、プロジェクト内のすべてのモジュールのbuildに影響を与えるため、version管理をよくする必要があります。 詳細については、ビルド構成を参照してください。

AndroidManifest.xmlを発見

最初のApp作成で生成されたProjectを簡単に見てみましょう。 左Project fileは見やすくAndroidviewに設定してください。

App sourceを見たときに、最初に確認しなければならないことはAndroidManifest.xmlです。 このファイルは、Appのすべての設定とcomponentが定義されています。 DeviceにAppがインストールされるとDeviceは、このファイルを見てAppにどんな内容があるかがわかります。このファイルにActivityを定義しないと、Deviceは知らずに実行することができなくなります。 このファイルは、manifestsフォルダの下にあります。

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

内容を見ると、 <application>TagのAppの定義があります。 このApplication Tagの <activity>TagでActivityの定義があります。 Activityは、Application下位にあることを意味します。

Applicationの属性に対して調べてみると android:iconプロパティが@mipmap/ic_launcherになっているが、これ/res/mipmapフォルダのic_launcher.pngファイルを意味します。

android:label属性は、@string/app_nameに設定されているが/res/values/strings.xmlファイルからapp_name変数として定義されているstringを見つけることができます。直接stringを入力してもしますが、Androidでは変数に設定し、これを参照することをお勧めします。 最後に、android:theme@style/AppThemeに設定されているが、この内容は、/res/values/styles.xmlに定義されています。

Activityの定義を見ると、 android:nameは名前であると同時にPackage pathを表します。現在の位置は、package nameと同じです。 だから.MainActivitycom.example.xyz.myapplication.MainActivityになります。左Project fileで見つけ見ればこの場所に MainActivityを見つけることができます。 Android viewをProject viewに変え、実際の位置も確認してみてください。

<intent-filter>も定義されているが、これは後で調べてみましょう。

MainActivity.java出会う

次に、MainActivity.javaを開いて見ればMainActivityオブジェクトが定義されていることを確認することができます。 このオブジェクトは、AppCompatActivityを継承し実装しました。

package com.example.xyz.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

**onCreate()**関数を見ればsetContentView(R.layout.activity_main);というコードがありますが。 JavaコードでLayoutを構成せずにactivity_main.xmlファイルを参照して、ActivityのLayoutを構成するという意味です。 このファイルは、/res/layout/フォルダの下にあります。これもAndroid viewをProject viewに変え、実際の位置も確認してみてください。

activity_main.xml出会う

このファイルを開いて見れば次のようにLayout design viewを見ることができます。このToolは、直接xmlのコードを絞らずに、マウスでUIを変更することができる機能を提供します。そしてxmlコードがActivityからどのように見られるかpreview画面も提供しています。 右previewを見ればLayoutの境界線を見ることができます。

android project structure

左下のTextタブをクリックすると、xmlコードを直接変更することができます。 コードを見ると、ConstraintLayoutの中にTextViewが定義されています。 ConstraintLayoutのandroid:layout_widthandroid:layout_height属性が match_parent に設定されているため、デバイスの画面にいっぱいよう領域が設定されました。この領域は、Design viewで確認することができます。

TextViewの場合は、wrap_contentに設定されているので、layoutは文字サイズだけの領域が設定されました。そして、android:text属性に "Hello World!"が設定されてTextViewはこの文字を示しました。

ちなみにConstraintLayoutのtools:context属性に com.example.xyz.myapplication.MainActivityに設定されているが、Design viewでpreviewを示すときは、Classに設定されたThemeなどを参考にして見せてくれるという意味です。preview機能を使用しない場合は、設定は不要です。

android project structure

build.gradle出会う

Android studioはgradleを利用して、buildをします。 bulid.gradleはbuildの設定ファイルです。 下の図のように2つのbulid.gradleを見ることができるが、以下のような役割をします。

  • build.gradle (Project: MyApplication)

Project全体に適用される設定です。今では1つのMoudle(app)だけませんが、Libraryなど複数の Moduleを一緒にbuildすることができます。

  • build.gradle (Module: app)

app moduleに適用される設定です。

android project structure

build.gradle(Project:MyApplication)を開けてみると、dependenciesにgradle versionが定義されています。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

build.gradle(Module:app)を開けてみると、Sdkのversionなどが記載されていますね。 dependenciesにSdk以外のlibraryが宣言されていますね。上記のMainActivity.javaでAppCompatActivityを継承したことを確認したがbuildが可能だった理由は、 compile 'com.android.support:appcompat-v7:25.3.1'が定義されていたからです。

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.example.xyz.myapplication"
        minSdkVersion 19
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
}

まとめ

Project構造について調べ簡単最初のアプリのファイルを見てみました。

  • AndroidManifest.xml: Appのすべての設定とcomponentの定義
  • MainActivity.java: Activity의Javaコード
  • activity_main.xml: ActivityのLayoutの定義
  • /res/ファイル: resourceファイルの定義
  • build.gradle: build設定の定義

参考

Related Posts

codechachaCopyright ©2019 codechacha