📱

Androidアプリ開発の基本概念まとめ

に公開

Androidアプリ開発で使用する基本概念

  • build.gradle
  • compileSdk
  • targetSdk
  • AndroidManifest.xml
  • themes.xml
  • string.xml
  • Activity
  • Fragment
  • Activityライフサイクル
  • Fragmentライフサイクル

build.gradle

build.gradleは、Androidアプリで使用されるビルド設定ファイルで、プロジェクトをどのように構築・依存管理するかを定義します。

記載例
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    namespace 'com.example.myapp'
    compileSdk 34

    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 21
        targetSdk 34
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation 'androidx.core:core-ktx:1.13.1'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.11.0'
}

セクション解説

セクション 説明
plugins 使用するプラグイン(例:KotlinやAndroidアプリ)を指定
android Android特有の設定を記述
defaultConfig アプリの基本情報(アプリID、SDKの最低バージョン、バージョンコード等)を記述
buildTypes リリース/デバッグなどのビルドモードに応じた設定を記述
dependencies 使用するライブラリを記述

Androidプロジェクトには、プロジェクト全体とモジュール(アプリケーション、ライブラリ)ごとにbuild.gradleファイルがあります。

プロジェクトレベル build.gradle

プロジェクト全体に関する設定や共通プラグインを管理します。ルートディレクトリに配置されています。

モジュールレベル build.gradle

各アプリ/ライブラリモジュールのビルド設定を管理します。各モジュールディレクトリに配置されています。(例:app/build.gradle)

compileSdk

compileSDKはAndroidアプリをコンパイルする際に使用される、AndroidSDKバージョンを指定する項目です。アプリが最新のAPIに対応できるよう、できるだけ最新のバージョンを指定します。

記載例
android {
    compileSdk 34
}

この例では、APIレベル34(Android14)のSDKを使用して、アプリがビルドされることを示しています。

targetSdk

targetSDKは、Androidアプリが実行される際に使用される、AndroidSDKバージョンを指定する項目です。

記述例
android {
    targetSdk 34
}

この例では、アプリがAPIレベル34(Android14)のSDKに最適化されて実行されることを示しています。

compileSDKとの違い

compileSDKは、Androidアプリをビルドする際のAndroidSDKバージョンを指定するのに対し、targetSDKは、Androidアプリを実行する際に最適なAndroidSDKバージョンを指定します。

用語 説明
compileSDK ビルド対象のAndroidSDKバージョン
targetSDK アプリ実行に最適なAndroidSDKバージョン

Google Playの要件

Googleプレイにアプリを公開する場合、最新のSDKバージョンをtargetSDKに指定しなければいけません。古いAPIで公開し続けることは不可能となっています。
例えば、2024年8月31日以降に公開する新規アプリまたはアップデートは、Android 14(API レベル 34)を対象にする必要があります。

https://support.google.com/googleplay/android-developer/answer/11926878?hl=ja

AndroidManifest.xml

AndroidManifest.xmlはAndroidアプリを構成するのに必須となる設定ファイルです。アプリの構成や、パーミッション(権限)、アクティビティ、サービス[1]、レシーバ[2]などを定義します。

記載例
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <!-- アプリで使用する権限(例: インターネット) -->
    <uses-permission android:name="android.permission.INTERNET" />

    <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/Theme.MyApp">

        <!-- 起動時に表示する Activity(ランチャー) -->
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <!-- 他の Activity の定義例 -->
        <activity android:name=".SettingsActivity" />

        <!-- サービスの定義例 -->
        <service android:name=".MyBackgroundService" />

        <!-- ブロードキャストレシーバの定義例 -->
        <receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

    </application>
</manifest>

themes.xml

themes.xmlは、Androidアプリのデザイン(見た目)を統一・管理するための設定ファイルです。ボタンや文字、背景色などの見た目のルールを定義し、全体のUIに統一性を持たせる役割を持っています。

記載例
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- アプリ全体の背景色 -->
        <item name="android:windowBackground">@color/background</item>

        <!-- ボタンの色 -->
        <item name="colorPrimary">@color/blue_500</item>
        <item name="colorSecondary">@color/green_500</item>

        <!-- アクションバーを非表示 -->
        <item name="windowActionBar">false</item>
    </style>
</resources>

string.xml

string.xmlは、Androidで利用される文字列リソースを管理するファイルです。これを利用することで、ソース内でのハードコーディングを避けることができます。

記載例
string.xml
<resources>
    <string name="app_name">My Application</string>
    <string name="hello_world">Hello, world!</string>
    <string name="button_submit">Submit</string>
</resources>

Activity

Activityとは「Androidの画面単位」のプログラムソースです。画面があるAndroidアプリの場合、最低一つでもActivityが存在しないといけません。
Activityは、ユーザが入力したデータを処理したり、別のActivityへの画面遷移やFragmentの切り替えなどを行います。また、ActivityははFragmentより多くのリソースを使用します。(ActivityのライフサイクルはFragmentより複雑なため)

Fragment

FragmentはActivityとは異なり、それだけで画面を構成することはできず、Activityの上に設定することで、画面を表示することができます。
Fragmentは親子関係を持つこともでき、同一のFragmentを親、別々のFragmentを子として設定することもできます。
Activityよりリソース消費量は少ないです。

Activityライフサイクル

AndroidのActivityのライフサイクルは、Activityが作成、表示、終了されるまでの一連の過程を示すものである。
Activityの状態によって、onCreate(),onResume(),onPause()などのメソッドがコールされ、アプリケーション動作やリソース管理を効率的に行います。

https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ja

メソッド 説明
onCreate() 初回に一度だけ呼ばれる。UIの初期化などをここで行う
onStart() Activityが画面に表示される直前に呼ばれる
onResume() Activityがフォアグラウンドになり、ユーザー操作が可能になる
onPause() 他のActivityがフォアグラウンドに来たときなどに呼ばれる。UIは見えているが操作不可になる可能性あり
onStop() Activityが完全に見えなくなるときに呼ばれる
onDestroy() Activityが破棄されるときに呼ばれる

Fragmentのライフサイクル

Fragmentは、Activity上に表示される小さなUIコンポーネントとして機能します。そのため、Fragmentは独自のライフサイクルを持ちますが、それはActivityのライフサイクルに連動しています。
また、独立したコンポーネントでもあるため、複数のActivityから同一のFragmentが呼ばれることもあります。

https://github.com/xxv/android-lifecycle

メソッド 説明
onAttach() FragmentをActivityに紐づけ
onCreate() Fragmentの非UIロジックの初期化
onCreateView() UIを作成する。LayoutInflater[3]でXMLからViewを作成
onViewCreated() onCreateViewの直後に呼ばれ、Viewのセットアップをするのに便利
onStart() Fragmentが見える直前
onResume() ユーザーと対話できる状態
onPause() フォーカスを失うなど、一時停止状態
onStop() フラグメント非表示
onDestroyView() Viewを破棄
onDestroy() Fragment自体の破棄
onDetach() Activityから切り離されるとき
脚注
  1. 画面を持たないバックグラウンド処理用のコンポーネント ↩︎

  2. システム・アプリのイベントを受け取るためのコンポーネント ↩︎

  3. アプリのUIはテキストであるXMLで定義され、実際に表示するためには、それに対応するViewオブジェクトに変換する必要があります。この変換処理をLayoutInflater(レイアウトインフレーター)と呼びます ↩︎

Discussion