Androidとは:システムアーキテクチャとKotlin開発

著者: IT Sectr 公開日: 2026-02-07 読了時間: 11 分

Android は、Googleが開発したオープンソース(AOSP)のモバイルオペレーティングシステムで、Linuxカーネル上で動作します。Android開発はKotlinを使用し、Android Studio環境で行います。この記事では、OSアーキテクチャ、アプリケーションコンポーネント、Jetpack Compose、Google Playへの公開について解説します。

主要ポイント

  • Android — Linuxカーネル上のOSで、カーネル、HAL、Android Runtime、Application Frameworkの4層構造
  • Kotlin — ヌル安全性と非同期処理のためのコルーチンを備えた主要開発言語
  • Activity、Service、BroadcastReceiver、ContentProvider — Androidアプリケーションの4つの必須コンポーネント
  • Jetpack Compose — Googleが新規プロジェクトに推奨する宣言的UIフレームワーク
  • Google Play — 15~30%の手数料とPlay Integrityセキュリティチェックによる主要配信チャネル

Androidとは?

Android は、Linuxカーネルをベースにしたモバイルオペレーティングシステムで、2007年からGoogleによって開発されています。ソースコードはAndroid Open Source Project(AOSP)の一部としてApache 2.0ライセンスの下で公開されています。各メーカーはシステムを変更して自社のデバイスにインストールできます。

StatCounter(2026年)によると、Androidは世界のモバイルOS市場の約72%を占めています。主要メーカーはSamsung、Xiaomi、Oppo、Vivo、Google Pixelです。断片化はプラットフォームの主要な課題であり、異なるOSバージョンの数千ものモデルが同時に使用されています。

Androidのアーキテクチャはパーミッションの原則に基づいています。各アプリケーションは個別のLinux UIDで実行され、自身のデータにのみアクセスできます。システムリソース(カメラ、マイク、連絡先)へのアクセスは、Android 6(API 23)以降、実行時にAndroid Permissionsを介して要求されます。

Androidバージョン履歴

Android 1.0 は2008年にHTC Dreamでリリースされました。主要なマイルストーン:Android 4.0 Ice Cream Sandwich(スマートフォンとタブレットの統一UI)、Android 5.0 Lollipop(Material Design)、Android 6.0(ランタイムパーミッション)、Android 10(ダークテーマ、ジェスチャー)、Android 12(Material You)。2023年以降、Googleはデザート名なしの年次メジャーリリースに移行しました。

Androidバージョン主な革新
Android 1.02008HTC Dreamでの初リリース
Android 4.0(ICS)2011スマートフォンとタブレットの統一デザイン
Android 5.0(L)2014Material Design、DalvikからARTへ
Android 6.0(M)2015ランタイムパーミッション、Dozeモード
Android 8.0(O)2017Kotlinが公式言語に
Android 10(Q)2019Scoped Storage、ダークテーマ
Android 12(S)2021Material You、Privacy Dashboard
Android 152024Private Space、衛星通信

Androidアーキテクチャ:4つの主要層

Android のアーキテクチャは、ハードウェアをユーザーアプリケーションから分離する4つの主要層で構成されています。各層は、厳密に定義されたインターフェースを介して下位層のサービスを利用します。

LinuxカーネルとHAL

最下層は変更されたLinuxカーネル(LTS、Android 15ではバージョン6.x)です。メモリ管理、プロセス、ネットワークスタック、ドライバを処理します。Hardware Abstraction Layer(HAL)は、カメラ、Bluetooth、Wi-Fi、センサーなどのハードウェアとやり取りするための統一APIを提供します。メーカーは上位層に影響を与えずにHALモジュールを実装します。

Android Runtime(ART)

ARTはアプリケーションのDEXバイトコードを実行します。Android 5.0以降、ARTはDalvikに代わり、パフォーマンス向上のためにAhead-of-Time(AOT)コンパイルを使用しています。各アプリケーションは独自のプロセスと個別のARTインスタンスを持ちます。ガベージコレクション(GC)は最小限の一時停止で動作し、典型的なGC一時停止は2~4msです。

Application Framework

Frameworkは開発者が直接操作する層です。Activity Manager(画面スタック)、Content Providers(データアクセス)、Resource Manager(ローカライゼーション、リソース)、Notification Manager、Location Managerが含まれます。すべてのシステムサービスは、Androidのプロセス間通信メカニズムであるBinder IPCを介して呼び出されます。

kotlin
// AIDLインターフェースを介したBinder操作の例
interface IDataService : android.os.IInterface {
    fun getData(): List<DataItem>
    fun saveData(item: DataItem): Boolean
}

// サービスの実装
class DataService : Service() {
    private val binder = object : IDataService.Stub() {
        override fun getData(): List<DataItem> = repository.getAll()
        override fun saveData(item: DataItem): Boolean = repository.save(item)
    }

    override fun onBind(intent: Intent?): IBinder = binder
}

システムアプリ

最上位層は標準的なシステムアプリケーションです。電話、連絡先、カメラ、設定、ブラウザなどです。これらはユーザーアプリケーションより高い権限を持ちませんが、サードパーティのアプリケーションに置き換えることができます。Android 15では、システムアプリケーションはメーカーのOTAアップデートとは独立してGoogle Play System Updatesを介して更新されます。

Kotlin — Android開発の主要言語

Kotlin はJetBrainsが開発した静的型付けプログラミング言語で、JVM上で動作します。Googleは2017年のGoogle I/OでKotlinをAndroidの公式言語として発表しました。KotlinはJavaと完全に互換性がありますが、その欠点(null-safety、データクラス、拡張関数、コルーチン)を解消します。

Null Safetyと型

Kotlin の主な特徴は、NullPointerExceptionに対する組み込みの保護です。型はnullable(String?)とnon-null(String)に分けられます。コンパイラはビルド時にnullableアクセスをチェックします。Safe call(?.)とElvis演算子(?:)は、ネストされたチェックなしでオプショナル値の操作を簡素化します。

kotlin
// コルーチンとFlowを使用したKotlinコードの例
data class User(
    val id: Long,
    val name: String,
    val email: String
)

class UserRepository(
    private val api: UserApi,
    private val dao: UserDao
) {
    suspend fun getUser(id: Long): Result<User> {
        return try {
            val cached = dao.getUser(id)
            if (cached != null) {
                return Result.success(cached)
            }
            val remote = api.fetchUser(id)
            dao.insertUser(remote)
            Result.success(remote)
        } catch (e: Exception) {
            Result.failure(e)
        }
    }

    fun observeUsers(): Flow<List<User>> {
        return dao.observeAll()
            .map { list -> list.sortedBy { it.name } }
            .flowOn(Dispatchers.Default)
    }
}

この例では、非同期ネットワークとデータベースアクセスのためのコルーチン(suspend関数)、データ変更のリアクティブ監視のためのFlow、安全なエラー処理のためのResultを示しています。コルーチンはスレッドオーバーヘッドなしでコールバックとRxJavaを置き換えます。

KotlinコルーチンとFlow

Kotlinのコルーチンは、共有スレッドプールで実行される軽量スレッドです。ネットワークとディスクにはDispatchers.IO、UIにはDispatchers.Main、CPU負荷の高いタスクにはDispatchers.Defaultを使用します。viewModelScopeとlifecycleScopeは、コンポーネントが破棄されると自動的にコルーチンをキャンセルします。

kotlin
// コルーチンとStateFlowを使用したViewModel
class UserViewModel(
    private val repository: UserRepository
) : ViewModel() {

    private val _users = MutableStateFlow<List<User>>(emptyList())
    val users: StateFlow<List<User>> = _users.asStateFlow()

    private val _loading = MutableStateFlow(false)
    val loading: StateFlow<Boolean> = _loading.asStateFlow()

    init {
        viewModelScope.launch {
            repository.observeUsers().collect { userList ->
                _users.value = userList
            }
        }
    }

    fun refresh() {
        viewModelScope.launch {
            _loading.value = true
            repository.getUser(42).onSuccess { user ->
                _users.value = listOf(user)
            }
            _loading.value = false
        }
    }
}

Android Studioと開発ツール

Android Studio はIntelliJ IDEAベースの公式IDEで、Googleが開発しています。コードエディタ、Layout Inspector、デバイスエミュレータ、APK Analyzer、Profiler(CPU、メモリ、ネットワーク、エネルギー)、Firebase統合が含まれます。Android Studio 2024(Ladybug)はマルチプラットフォームKMPモードでKotlin 2.0をサポートしています。

Androidエミュレータ

Androidエミュレータは、ハードウェアアクセラレーションにKVM(Linux)またはHyper-V(Windows)を使用します。GPS、センサー、カメラ、通話、SMSのシミュレーションをサポートしています。Google Pixel 9 Proは、API 35と8GBのエミュレータRAMでのテストに推奨される構成です。

Android Profilerとデバッグ

ProfilerはCPU負荷、メモリアロケーション、ネットワークリクエスト、エネルギー消費をリアルタイムで表示します。Memory Profilerはヒープダンプと参照ツリーによるリーク分析を可能にします。Network Inspectorはボディとヘッダーを含むすべてのHTTP/HTTPSリクエストを記録します。詳細な分析にはAndroid Studio Canaryが使用されます。

Androidアプリケーションのコンポーネント

Androidアプリケーションは、4種類のコンポーネントで構成され、それぞれが独自のエントリポイントとライフサイクルを持ちます。コンポーネントはAndroidManifest.xmlファイルに登録されます。

コンポーネント目的エントリポイント
Activityユーザーとの対話のためのUI画面Action.MAINとLAUNCHERカテゴリのIntent
ServiceUIなしでのバックグラウンドタスク実行startService()またはbindService()
BroadcastReceiverシステムまたはカスタムイベントの受信マニフェストまたはコードでの登録
ContentProvider構造化データへのアクセス管理ContentResolverを介したURI

ActivityとIntent

Activityはユーザーインターフェースの基本コンポーネントです。各画面は個別のActivity、またはActivity内のFragmentです。画面間の遷移はIntent(アクション(ACTION_VIEW、ACTION_SEND)とデータ(URI)を含むオブジェクト)を介して行われます。Jetpack Navigation Graphでは、ナビゲーションはXMLで記述されます。

ServiceとWorkManager

Serviceはバックグラウンドタスクを実行しますが、Android 8以降、バックグラウンドサービスは制限されています。WorkManagerは、チェーン、制約(充電時のみなど)、クラッシュ後の再起動をサポートする、遅延実行および保証付きバックグラウンドタスクのための推奨ライブラリです。

Jetpack Compose vs XML Layouts

Jetpack Composeと従来のXMLレイアウトの選択は、Androidプロジェクト開始時の主要なアーキテクチャ上の決定です。XML Layouts(RecyclerView、ConstraintLayout、FrameLayout)は2008年からの標準です。Jetpack Composeは2021年に宣言的代替として導入されました。

基準XML LayoutsJetpack Compose
パラダイム命令型(Viewツリー)宣言型(@Composable関数)
最小バージョン任意(API 1+)API 21+(Android 5.0)
レイアウトXML + data binding / ViewBindingModifierを使用したKotlinコード
RecyclerView類似RecyclerView + Adapter + ViewHolderLazyColumn / LazyGrid
プレビューAndroid StudioでのXMLプレビューインタラクティブな@Previewアノテーション
再コンポーズnotifyDataSetChanged(完全)自動、細粒度(DiffUtil)
相互運用性完全(全ライブラリ)XMLでのComposeView / ComposeでのAndroidView

Googleはすべての新規プロジェクトにJetpack Composeを推奨しています。XML Layoutsは、レガシープロジェクトのサポートや、Viewの最大限のカスタマイズ(Canvas、SurfaceView)が必要な場合に関連性を保っています。Composeコードは同等のXML + ViewBindingよりも平均40%短くなります。

kotlin
// Jetpack Compose — ユーザープロフィール画面
@Composable
fun ProfileScreen(
    user: User,
    onEditClick: () -> Unit,
    modifier: Modifier = Modifier
) {
    Column(
        modifier = modifier
            .fillMaxSize()
            .padding(16.dp),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        AsyncImage(
            model = user.avatarUrl,
            contentDescription = "ユーザーのアバター",
            modifier = Modifier
                .size(120.dp)
                .clip(CircleShape)
        )

        Spacer(modifier = Modifier.height(16.dp))

        Text(
            text = user.name,
            style = MaterialTheme.typography.headlineMedium
        )

        Text(
            text = user.email,
            style = MaterialTheme.typography.bodyLarge,
            color = MaterialTheme.colorScheme.onSurfaceVariant
        )

        Spacer(modifier = Modifier.height(24.dp))

        Button(onClick = onEditClick) {
            Icon(Icons.Default.Edit, contentDescription = null)
            Spacer(modifier = Modifier.width(8.dp))
            Text("プロフィールを編集")
        }
    }
}

@Preview(showBackground = true, showSystemUi = true)
@Composable
fun ProfileScreenPreview() {
    MaterialTheme {
        ProfileScreen(
            user = User(1, "アンナ・ペトロワ", "anna@example.com"),
            onEditClick = {}
        )
    }
}

ProfileScreen関数は@Composableとして宣言されています。Viewインスタンスを作成せずに宣言的にUIを記述します。Composeはuserが変更されると自動的に画面を更新します。@Previewは、ビルドやエミュレータでの実行なしでIDEに直接結果を表示します。

ActivityとFragmentのライフサイクル

Androidの各Activityは、onCreate、onStart、onResume、onPause、onStop、onDestroyの6つのライフサイクル状態を経ます。FragmentはonAttach、onCreateView、onViewCreatedを追加します。ライフサイクルの理解は、メモリ管理とリーク防止に重要です。

Activityの主要状態

onCreate — Activity作成時に1回呼び出されます。ここで初期化(setContentView、アダプター設定、LiveDataサブスクリプション)を行います。onResume — Activityがフォアグラウンドにあり、ユーザーと対話しています。onPause — Activityがフォーカスを失います(ダイアログ、別のActivity)。onStop — Activityが表示されなくなります。onDestroy — Activityが破棄されます。

kotlin
// LifecycleScopeを使用したライフサイクル管理付きActivity
class MainActivity : ComponentActivity() {
    private val viewModel: UserViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            MaterialTheme {
                lifecycleScope.launch {
                    repeatOnLifecycle(Lifecycle.State.STARTED) {
                        viewModel.users.collect { users ->
                            updateUi(users)
                        }
                    }
                }
            }
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("last_search", searchQuery)
    }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        searchQuery = savedInstanceState.getString("last_search", "")
    }
}

repeatOnLifecycleを使用すると、Activityがバックグラウンドに移動したときにデータ収集が一時停止し、フォアグラウンドに戻ったときに再開されます。これによりリークと不要なネットワークリクエストを防ぎます。onSaveInstanceStateは画面回転時に一時的な状態を保存します。

Google Play:公開と要件

Google Play は公式のAndroidアプリストアです。デベロッパーアカウント登録は25ドルの一回限りです。各アプリケーションは、悪意のあるコード、ポリシー違反、不正なパーミッション使用について自動的なGoogle Play Integrityチェックを受けます。

公開要件

GoogleはAndroid App Bundle(AAB)またはAPKによるアプリ署名を要求しています。AABは推奨形式で、各デバイス構成に最適化されたAPKを生成できます。アプリケーションは有効な証明書を持つキー(keystore)で署名する必要があります。Google Play App SigningはGoogle側でのオプションのキー暗号化です。

プライバシーポリシー

個人データへのアクセスを要求するすべてのアプリケーションは、プライバシーポリシーを提供する必要があります。2024年以降、Googleは収集するデータの種類と処理目的を指定するData Safety宣言を義務付けています。Android 14+を対象とするアプリケーションは、パーミッションを宣言するためにDeclarations APIを使用する必要があります。

要件説明
Android App Bundle最適化された配信のためのAAB形式
Data Safety個人データの収集と処理に関するフォーム
Target SDKアプリは最新のAndroid APIレベルをターゲットにする必要があります
コンテンツレーティング年齢評価アンケート
ストアリスティング名前、アイコン、スクリーンショット、説明

よくある質問

Android開発に最適な言語は?

Kotlin — Googleが公式に推奨するAndroid言語です。Javaもレガシープロジェクトではサポートされています。Kotlinはヌル安全性、コルーチン、拡張関数を提供し、Javaと比較してコード量を30~40%削減します。

Jetpack ComposeとXML Layoutsのどちらを選ぶべき?

Jetpack Composeは、宣言的構文と自動再コンポーズ最適化により、すべての新規プロジェクトに推奨されます。XML Layoutsはレガシープロジェクトや、CanvasやSurfaceViewの細かいカスタマイズが必要な場合に残っています。

Google Playへの公開にはいくらかかりますか?

Google Playデベロッパー登録は25ドルの一回限りです。ストア手数料は最初の100万ドルの収益まで15%、その後30%です。サブスクリプションの手数料は初日から15%です。Apple Developer Programとは異なり、年会費はありません。

Android Jetpackとは?

Android Jetpack は公式SDKに含まれるGoogleライブラリ群です:Navigation、Room(コンパイル時クエリチェック付きSQLite ORM)、WorkManager(保証付きバックグラウンドタスク)、ViewModel(状態管理)、LiveDataとStateFlow(リアクティビティ用)など。

Androidアプリの最小要件は?

新規プロジェクトの最小サポートバージョンはAPI 24(Android 7.0)です。AndroidManifest.xmlでアプリケーションのコンポーネントと権限を記述します。APK/AABはkeystoreで署名されます。Target SDKは公開時の最新APIレベルに一致する必要があります。

まとめ

  • Android — Linuxカーネル上のオープンモバイルOS、世界市場シェア72%、メーカーによるカスタマイズが可能
  • Kotlin — null-safety、コルーチン、100%のJava互換性を備えた主要Android開発言語
  • Androidアーキテクチャは4層で構成:Linuxカーネル、HAL、Android Runtime、Application Framework
  • Activity、Service、BroadcastReceiver、ContentProvider — マニフェストに登録される4つのコンポーネント
  • Jetpack Compose — 自動再コンポーズを備えたGoogle推奨の宣言的UIフレームワーク
  • Google Play — 一回限りの25ドル支払い、AAB形式、必須のData Safetyとプライバシーポリシー
  • WorkManager — 実行保証と制約付きバックグラウンドタスクのための推奨API

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください