LoginSignup
6
3

More than 3 years have passed since last update.

Android Studio で Empty Activity を選択したときに作成されるファイルについて調べてみた

Posted at

Android Studio で、Start a new Android Studio project からプロジェクトを新規作成するとテンプレート一覧が表示されます。
よく使うのが Empty Activity なのですが、テンプレートは色々役立つものを最初から用意しておいてくれるのでありがたい反面、正直ナニコレ?というファイルが多いので調べてみました。要するに備忘録です。

環境

  • macOS 10.14.3 (Mojave)
  • Android Studio 3.4

ファイル構成

1つ疑問に思ったのが、Java と Kotlin はテンプレートからして何か違う点があるのかということ。
ということで Java 版を myapplication1、Kotlin 版を myapplication2 として作成しました。

ちなみに com.sirius.software は私個人が使っているパッケージ名でございます。

configure_your_project.png

テンプレートで作成される項目を全部展開してみた結果が以下の通り。
左が Java 版、右が Kotlin 版です。

java_kotlin.png

パッと見て大きな違いは無いようですが、
Kotlin 版だけ generatedJava という項目が最初からありました。
Java 版でもビルドしたら項目として表示されたので、推測するに Kotlin 版は最初に一度ビルドしているのでしょうね。

app 配下のファイル

app/manifests/AndroidManifest.xml

Android アプリに関する情報が記述されています。
Android システムから見たアプリの概要っていうところでしょうか。
主にアクティビティの追加・変更・削除のとき、編集することになりそうです。

Java / Kotlin で差異はありません。
タグと各要素についての説明(個人で調べたもの)をコメントで書いてみました。

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>

<!--
<manifest> AndroidManifest.xml のルート要素
・xmlns:android = Android 用の xml ファイルであることを表す
・package       = パッケージの名称
-->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sirius.software.myapplication1">

    <!--
    <application> アプリケーション全体の設定要素
    ・android:allowBackup = GoogleDrive 等にアプリのデータをバックアップするか
    ・android:icon        = アプリアイコンのリソースを指定する
    ・android:label       = アプリの表示名を指定する
    ・android:roundIcon   = Android 7.1 以降対応の丸型アイコンのリソースを指定する
    ・android:supportRtl  = アラビア語など右から左に文章を表示するレイアウトに対応するか
    ・android:theme       = アクティビティのデフォルトテーマを指定する
    -->

    <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 = アクティビティのリソース名
        -->

        <activity android:name=".MainActivity">

            <!--
            <intent-filter> 処理できる暗黙的インテントの種類を指定する
            例えば、このアプリは電話をかけることができると Android システムに
            示したいなら android.intent.action.CALL を追加する
            -->

            <intent-filter>
                <!-- .MainActivity がアプリ起動時に表示されることを表す -->
                <action android:name="android.intent.action.MAIN" />

                <!-- ホームのアイコンから起動可能であることを表す -->
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

app/java/com.sirius.software.myapplication1/MainActivity.java

メインアクティビティのソースコード。
これが無いと、アプリを起動しても何も表示されないということです。
アクションバーっていうのはアクティビティの一番上に表示されるタイトル表示っぽい場所のことです。

Java 版は行の最後にセミコロンを付けないといけません。

MainActivity.java
// パッケージの宣言
package com.sirius.software.myapplication1;

// アクションバー付きのアクティビティを作るときに必要
import android.support.v7.app.AppCompatActivity;

// アクティビティの状態を Android システムに管理してもらうために必要
import android.os.Bundle;

// エントリーポイント(ここから開始)
public class MainActivity extends AppCompatActivity {

    // onCreate イベントハンドラ
    // アクティビティが開始されたときに呼び出される
    // Override アノテーションにより既存の onCreate が再利用される
    // アクティビティの基本的なおまじないを書かなくて良いから便利
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        // スーパークラスの onCreate を呼び出す
        // savedInstanceState はアクティビティの状態を格納する
        super.onCreate(savedInstanceState);

        // レイアウトファイルを読み込んで表示する
        setContentView(R.layout.activity_main);
    }
}

app/java/com.sirius.software.myapplication2/MainActivity.kt

こちらは Kotlin 版のメインアクティビティ。セミコロンは不要です。

MainActivity.kt
package com.sirius.software.myapplication2

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

// public は省略され、extends キーワードは : に変わった
class MainActivity : AppCompatActivity() {

    // アノテーションが省略されて onCreate がスッキリした
    // Bundle? のハテナは、値が Null でも良い(nullable である)ことを表す
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

app/generatedJava/com.sirius.software.myapplication*/BuildConfig

Debug ビルドと Release ビルドで何か処理を分けたい場合に
BuildConfig に定数や処理を追加するという使い方ができるようです。
その時が来たら編集することでしょう。

app/generatedJava/com.sirius.software.myapplication*.test/BuildConfig

ユニットテスト等でもビルド時に処理を分けられるということでしょうか。
まだよく分かっていないので後日調べてみます。

app/java/com.sirius.software.myapplication*/ExampleInstrumentedTest.*

実機もしくはエミュレータ上で実行できるテストのサンプルファイル。

app/java/com.sirius.software.myapplication*/ExampleUnitTest.*

Android Studio + Java 仮想マシン(JVM)上で実行できるテストのサンプルファイル。
これらサンプルファイルの扱いに明示的な決まりは無さそうです。

app/res/drawable/ic_launcher_background.xml

アダプティブ アイコンを作成するときに背景を設定します。

app/res/drawable/ic_launcher_foreground.xml

アダプティブ アイコンを作成するときに前景を設定します。
アダプティブ アイコンとは、アプリアイコンの形を揃える(統一する)仕組みのことです。

app/res/layout/activity_main.xml

アクティビティのレイアウトです。
画面に表示されるボタンやビューなどを配置します。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>

<!--
<android.support.constraint.ConstraintLayout> 自動的にレイアウトを最適化する
・xmlns:android         = Android 用の xml ファイルであることを表す
・xmlns:app             = XML の名前空間を定義し、app 属性を利用可能にする
・xmlns:tools           = XML の名前空間を定義し、tools 属性を利用可能にする
・android:layout_width  = 幅の調整(match_parent: 表示領域いっぱいに表示)
・android:layout_height = 高さの調整(match_parent: 表示領域いっぱいに表示)
・tools:context         = レイアウトがどのアクティビティで利用されるか
-->

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!--
    <TextView> ラベルを表示する
    ・android:layout_width  = 幅の調整(wrap_content: 文字列の場合はその長さに合わせる)
    ・android:layout_height = 高さの調整(wrap_content: 文字列の場合はその長さに合わせる)
    ・android:text          = 表示する文字列
    ・app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"
      app:layout_constraintTop_toTopOf="parent"
      → 自動レイアウトで、隣接するビューに対して自身をどのように配置するか指定する
    -->

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

app/res/mipmap/ic_launcher/ic_launcher.png

アプリアイコンのリソース(画像)ファイルです。
ラスター画像で以下のサイズを用意すれば良いみたいです。

解像度 画像サイズ
hdpi 72x72
mdpi 48x48
xhdpi 96x96
xxhdpi 144x144
xxxhdpi 192x192

app/res/mipmap/ic_launcher/ic_launcher.xml

アダプティブ アイコンの定義ファイル。以下のファイルを読み込んでます。
ic_launcher_background.xml
ic_launcher_foreground.xml

app/res/mipmap/ic_launcher_round/ic_launcher_round.png

丸型アプリアイコンのリソース(画像)ファイルです。
ic_launcher.png との違いはアイコンの形状が丸型なだけでしょう。

app/res/mipmap/ic_launcher_round/ic_launcher_round.xml

ic_launcher.xml と同じ内容です。
これもアイコンの形状が丸型なだけでしょう。

app/res/values/colors.xml

色の名前とカラーコードを定義します。

colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>     <!-- アクションバーの背景色 -->
    <color name="colorPrimaryDark">#00574B</color> <!-- ステータスバーの背景色 -->
    <color name="colorAccent">#D81B60</color>      <!-- コントロールの基本色 -->
</resources>

app/res/values/strings.xml

アプリ内で使用する文字列を定義します。
最初はアプリの表示名しかありません。

strings.xml
<resources>
    <string name="app_name">My Application1</string> <!-- アプリの表示名 -->
</resources>

app/res/values/styles.xml

アプリのアクティビティやビューにテーマを設定します。
Theme.AppCompat.Light.DarkActionBar が親のテーマで、ここから独自に拡張していけるらしいです。

styles.xml
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

gradle 配下のファイル

Gradle はアプリをビルドするために使用します。
データバインディングなどの開発ツールを利用したい人や、色々カスタマイズしたい人はここを編集するようです。
今のところ、よほどのことがない限り編集する機会は無いと思うので、とりあえず概要だけ調べました。

Gradle Scripts/build.gradle

Groovy という言語により、ビルドの手順を定義したファイル。

Gradle Scripts/gradle-wrapper.properties

Gradle でビルドを実行するために必要な設定ファイル。

Gradle Scripts/proguard-rules.pro

アプリのリバースエンジニアリングを防止するための定義ファイル。

Gradle Scripts/gradle.properties

Gradle で使用する独自のプロパティファイル。

Gradle Scripts/settings.gradle

ビルドするときにどのプロジェクトを含めるかを指定します。
単体のプロジェクトでは特に使用することはないでしょう。

Gradle Scripts/local.properties

リポジトリに残したくないテキスト情報を管理するために利用されます。
開発環境固有の設定などがこれに該当するようです。

まとめ

様々な役割を持ったファイルが最初から揃っていて、至れり尽くせりな感じですが
普通にアプリを作るだけなら以下のファイルを編集したり、独自に追加すれば良さそうです。

app/manifests/AndroidManifest.xml
app/java/com.sirius.software.myapplication1/MainActivity.java
app/java/com.sirius.software.myapplication2/MainActivity.kt
app/res/drawable/ic_launcher_background.xml
app/res/drawable/ic_launcher_foreground.xml
app/res/layout/activity_main.xml
app/res/mipmap/ic_launcher/ic_launcher.png
app/res/mipmap/ic_launcher_round/ic_launcher_round.png
app/res/values/colors.xml
app/res/values/strings.xml
app/res/values/styles.xml

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3