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
は私個人が使っているパッケージ名でございます。

テンプレートで作成される項目を全部展開してみた結果が以下の通り。
左が Java 版、右が Kotlin 版です。
パッと見て大きな違いは無いようですが、
Kotlin 版だけ generatedJava
という項目が最初からありました。
Java 版でもビルドしたら項目として表示されたので、推測するに Kotlin 版は最初に一度ビルドしているのでしょうね。
app 配下のファイル
app/manifests/AndroidManifest.xml
Android アプリに関する情報が記述されています。
Android システムから見たアプリの概要っていうところでしょうか。
主にアクティビティの追加・変更・削除のとき、編集することになりそうです。
Java / Kotlin で差異はありません。
タグと各要素についての説明(個人で調べたもの)をコメントで書いてみました。
<?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 版は行の最後にセミコロンを付けないといけません。
// パッケージの宣言
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 版のメインアクティビティ。セミコロンは不要です。
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
アクティビティのレイアウトです。
画面に表示されるボタンやビューなどを配置します。
<?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
色の名前とカラーコードを定義します。
<?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
アプリ内で使用する文字列を定義します。
最初はアプリの表示名しかありません。
<resources>
<string name="app_name">My Application1</string> <!-- アプリの表示名 -->
</resources>
app/res/values/styles.xml
アプリのアクティビティやビューにテーマを設定します。
Theme.AppCompat.Light.DarkActionBar
が親のテーマで、ここから独自に拡張していけるらしいです。
<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