11.

Android アプリ開発完全ガイド — Kotlin/Compose/Jetpack/Room/Retrofit

編集
この記事の要点
  • 開発環境: Android Studio (IntelliJ ベース、公式 IDE) + Android SDK + Emulator
  • 言語: Kotlin が公式推奨 (Google が 2017 年に第一級サポート宣言)。Java も引き続き利用可能
  • UI: 旧来は Layout XML + View、新規開発は Jetpack Compose (宣言的 UI) が推奨
  • 主要コンポーネント: Activity / Fragment / Service / BroadcastReceiver / ContentProviderLifecycle の理解が必須
  • Jetpack ライブラリ: Room (DB)、Retrofit (HTTP)、Hilt (DI)、ViewModel / LiveData / Flow (状態管理)

Android アプリケーションとは

Android アプリは、Google が提供する Android OS 上で動作するモバイルアプリケーションです。世界のスマートフォン OS シェアの約 70% を占め、Play Store を通じて配信されます。

アプリの正体は .apk / .aab (Android App Bundle) というパッケージファイルで、内部に Dalvik bytecode (Android 5.0 以降は ART に変換) と各種リソース (画像 / レイアウト XML / 文字列) が含まれます。

開発環境

項目内容
IDEAndroid Studio (IntelliJ IDEA ベース、無料・公式)
SDKAndroid SDK (Android Studio に同梱)。API レベル別に切替可能
ビルドツールGradle (Kotlin DSL / Groovy DSL)
言語Kotlin (推奨) / Java
動作確認Android Emulator / 実機 (USB デバッグ ON)
デバッグADB (Android Debug Bridge)
配信Google Play Console (登録料 25 USD、買い切り)

主要コンポーネント

コンポーネント役割
Activity画面 1 枚を表す。最も基本的な UI 単位
FragmentActivity 内で再利用可能な UI 部品。タブ画面・大画面対応に
ServiceUI を持たないバックグラウンド処理 (再生・同期など)
BroadcastReceiverシステムイベント (起動、電源、通知) を受信
ContentProviderアプリ間データ共有 (連絡先、写真など)

典型的なアプリ構造 (Kotlin)

// MainActivity.kt
package com.example.myapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.foundation.layout.*
import androidx.compose.ui.unit.dp

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MaterialTheme {
                GreetingScreen()
            }
        }
    }
}

@Composable
fun GreetingScreen() {
    var name by remember { mutableStateOf("") }
    Column(Modifier.padding(16.dp)) {
        TextField(value = name, onValueChange = { name = it }, label = { Text("名前") })
        Spacer(Modifier.height(16.dp))
        Text("こんにちは、$name さん!")
    }
}

AndroidManifest.xml

アプリのメタ情報・宣言ファイル。Activity の登録、権限、最低 API レベルなどを指定します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 権限宣言 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <application
        android:label="MyApp"
        android:icon="@mipmap/ic_launcher"
        android:theme="@style/Theme.MyApp">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

    </application>
</manifest>

build.gradle (Module レベル)

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

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

    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 24                   // Android 7.0 以上
        targetSdk 34                // Android 14
        versionCode 1
        versionName "1.0"
    }

    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion "1.5.4"
    }
}

dependencies {
    implementation 'androidx.core:core-ktx:1.12.0'
    implementation 'androidx.activity:activity-compose:1.8.2'
    implementation platform('androidx.compose:compose-bom:2024.02.00')
    implementation 'androidx.compose.material3:material3'

    // Room (ローカル DB)
    implementation 'androidx.room:room-runtime:2.6.1'
    implementation 'androidx.room:room-ktx:2.6.1'
    kapt 'androidx.room:room-compiler:2.6.1'

    // Retrofit (HTTP)
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'

    // Hilt (DI)
    implementation 'com.google.dagger:hilt-android:2.50'
    kapt 'com.google.dagger:hilt-compiler:2.50'
}

API レベルと Android バージョン

AndroidAPI レベルリリース年
7.0 Nougat242016
8.0 Oreo262017
9 Pie282018
10292019
11302020
12 / 12L31 / 322021
13 Tiramisu332022
14 UpsideDownCake342023

Play Store に出すアプリは毎年 targetSdk を最新付近に保つ義務があります (例: 2024 年から targetSdk 34 以上が必須)。

Lifecycle (Activity)

onCreate ─→ onStart ─→ onResume ─→ [実行中] ─→ onPause ─→ onStop ─→ onDestroy
                                       ↑           ↓
                                  onResume ←── onPause (戻ってきた場合)

- onCreate     : 1 回だけ。View 構築・データ取得初期化
- onStart      : 画面が見えるようになった
- onResume     : フォアグラウンドに来た (操作可能)
- onPause      : 別画面が手前に来た (まだ見える)
- onStop       : 完全に裏に行った
- onDestroy    : 破棄される直前 (回転や finish() で発生)

Jetpack ライブラリ群

ライブラリ用途
Jetpack Compose宣言的 UI ツールキット (React に近い感覚)
RoomSQLite ラッパー、コンパイル時チェック付き ORM
ViewModelUI 状態保持、画面回転で破棄されない
LiveData / Flow非同期データのリアクティブ伝搬
Navigation画面遷移の宣言的管理
WorkManagerバックグラウンド非同期ジョブ
HiltDagger ベースの DI フレームワーク
Paging 3無限スクロール/ページング
DataStoreSharedPreferences 後継、型安全

Retrofit による HTTP 呼び出し

data class User(val id: Int, val name: String, val email: String)

interface ApiService {
    @GET("users")
    suspend fun getUsers(): List<User>

    @GET("users/{id}")
    suspend fun getUser(@Path("id") id: Int): User

    @POST("users")
    suspend fun createUser(@Body user: User): User
}

val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(MoshiConverterFactory.create())
    .build()

val api = retrofit.create(ApiService::class.java)

// 利用 (Coroutines)
lifecycleScope.launch {
    val users = api.getUsers()
    Log.d("API", users.toString())
}

Play Store 配信フロー

  1. 署名鍵生成: keytool で keystore 作成
  2. リリースビルド: Android Studio → Build → Generate Signed Bundle/APK.aab 出力
  3. Play Console: 25 USD のデベロッパー登録 (1 回のみ)
  4. アプリ作成: ストア掲載情報、スクリーンショット、説明文を準備
  5. 内部/クローズド/オープン/製品版のテスト段階を経て公開
  6. 審査: 通常数時間〜数日 (新規アカウントは長め)

FAQ

Q: Kotlin と Java、どちらで始めるべき?
A: Kotlin 一択です。Google 公式ドキュメント・サンプル・Jetpack ライブラリのすべてが Kotlin 前提で書かれており、コード量も Java の 30〜50% 減ります。

Q: Compose と XML レイアウト、どちらを学ぶべき?
A: 新規プロジェクトは Compose。ただし既存アプリ保守では XML + View もまだ多数現役なので、両方知っておくと有利です。

Q: iOS と同時開発したい (クロスプラットフォーム)
A: Kotlin Multiplatform Mobile (KMM) / Flutter (Dart) / React Native (JS) の 3 択。UI 共有度は Flutter > React Native > KMM、ネイティブ感は逆順です。

編集
Post Share
子ページ
  1. リソース (Android アプリケーション)
  2. アクティビティ (Android アプリケーション)
  3. メッセージの表示
  4. データベースの操作 (Android アプリケーション)
同階層のページ
  1. プラットホーム
  2. 環境構築
  3. 文法
  4. API
  5. Servlet(サーブレット)
  6. JSP
  7. Applet(アプレット)
  8. デザインパターン
  9. フレームワーク
  10. ライブラリ
  11. Androidアプリケーション
  12. Project Jigsaw
  13. エラー一覧
  14. 日付の加算、減算
  15. 文字列の数字チェック
  16. 改行コードの削除
  17. 先頭と末端の文字の削除
  18. warファイルの中身を確認する方法
  19. nullもしくは空文字の判定
  20. beanの中身を確認する方法
  21. org.apache.log4j.Logger のログ出力で printStackTrace() のエラー内容を出力する方法
  22. Javaのバージョン確認方法

最近更新/作成されたページ