Android は、Googleが開発したオープンソース(AOSP)のモバイルオペレーティングシステムで、Linuxカーネル上で動作します。Android開発はKotlinを使用し、Android Studio環境で行います。この記事では、OSアーキテクチャ、アプリケーションコンポーネント、Jetpack Compose、Google Playへの公開について解説します。
主要ポイント
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 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.0 | 2008 | HTC Dreamでの初リリース |
| Android 4.0(ICS) | 2011 | スマートフォンとタブレットの統一デザイン |
| Android 5.0(L) | 2014 | Material Design、DalvikからARTへ |
| Android 6.0(M) | 2015 | ランタイムパーミッション、Dozeモード |
| Android 8.0(O) | 2017 | Kotlinが公式言語に |
| Android 10(Q) | 2019 | Scoped Storage、ダークテーマ |
| Android 12(S) | 2021 | Material You、Privacy Dashboard |
| Android 15 | 2024 | Private Space、衛星通信 |
Android のアーキテクチャは、ハードウェアをユーザーアプリケーションから分離する4つの主要層で構成されています。各層は、厳密に定義されたインターフェースを介して下位層のサービスを利用します。
最下層は変更されたLinuxカーネル(LTS、Android 15ではバージョン6.x)です。メモリ管理、プロセス、ネットワークスタック、ドライバを処理します。Hardware Abstraction Layer(HAL)は、カメラ、Bluetooth、Wi-Fi、センサーなどのハードウェアとやり取りするための統一APIを提供します。メーカーは上位層に影響を与えずにHALモジュールを実装します。
ARTはアプリケーションのDEXバイトコードを実行します。Android 5.0以降、ARTはDalvikに代わり、パフォーマンス向上のためにAhead-of-Time(AOT)コンパイルを使用しています。各アプリケーションは独自のプロセスと個別のARTインスタンスを持ちます。ガベージコレクション(GC)は最小限の一時停止で動作し、典型的なGC一時停止は2~4msです。
Frameworkは開発者が直接操作する層です。Activity Manager(画面スタック)、Content Providers(データアクセス)、Resource Manager(ローカライゼーション、リソース)、Notification Manager、Location Managerが含まれます。すべてのシステムサービスは、Androidのプロセス間通信メカニズムであるBinder IPCを介して呼び出されます。
// 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 はJetBrainsが開発した静的型付けプログラミング言語で、JVM上で動作します。Googleは2017年のGoogle I/OでKotlinをAndroidの公式言語として発表しました。KotlinはJavaと完全に互換性がありますが、その欠点(null-safety、データクラス、拡張関数、コルーチン)を解消します。
Kotlin の主な特徴は、NullPointerExceptionに対する組み込みの保護です。型はnullable(String?)とnon-null(String)に分けられます。コンパイラはビルド時にnullableアクセスをチェックします。Safe call(?.)とElvis演算子(?:)は、ネストされたチェックなしでオプショナル値の操作を簡素化します。
// コルーチンと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のコルーチンは、共有スレッドプールで実行される軽量スレッドです。ネットワークとディスクにはDispatchers.IO、UIにはDispatchers.Main、CPU負荷の高いタスクにはDispatchers.Defaultを使用します。viewModelScopeとlifecycleScopeは、コンポーネントが破棄されると自動的にコルーチンをキャンセルします。
// コルーチンと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 はIntelliJ IDEAベースの公式IDEで、Googleが開発しています。コードエディタ、Layout Inspector、デバイスエミュレータ、APK Analyzer、Profiler(CPU、メモリ、ネットワーク、エネルギー)、Firebase統合が含まれます。Android Studio 2024(Ladybug)はマルチプラットフォームKMPモードでKotlin 2.0をサポートしています。
Androidエミュレータは、ハードウェアアクセラレーションにKVM(Linux)またはHyper-V(Windows)を使用します。GPS、センサー、カメラ、通話、SMSのシミュレーションをサポートしています。Google Pixel 9 Proは、API 35と8GBのエミュレータRAMでのテストに推奨される構成です。
ProfilerはCPU負荷、メモリアロケーション、ネットワークリクエスト、エネルギー消費をリアルタイムで表示します。Memory Profilerはヒープダンプと参照ツリーによるリーク分析を可能にします。Network Inspectorはボディとヘッダーを含むすべてのHTTP/HTTPSリクエストを記録します。詳細な分析にはAndroid Studio Canaryが使用されます。
Androidアプリケーションは、4種類のコンポーネントで構成され、それぞれが独自のエントリポイントとライフサイクルを持ちます。コンポーネントはAndroidManifest.xmlファイルに登録されます。
| コンポーネント | 目的 | エントリポイント |
|---|---|---|
| Activity | ユーザーとの対話のためのUI画面 | Action.MAINとLAUNCHERカテゴリのIntent |
| Service | UIなしでのバックグラウンドタスク実行 | startService()またはbindService() |
| BroadcastReceiver | システムまたはカスタムイベントの受信 | マニフェストまたはコードでの登録 |
| ContentProvider | 構造化データへのアクセス管理 | ContentResolverを介したURI |
Activityはユーザーインターフェースの基本コンポーネントです。各画面は個別のActivity、またはActivity内のFragmentです。画面間の遷移はIntent(アクション(ACTION_VIEW、ACTION_SEND)とデータ(URI)を含むオブジェクト)を介して行われます。Jetpack Navigation Graphでは、ナビゲーションはXMLで記述されます。
Serviceはバックグラウンドタスクを実行しますが、Android 8以降、バックグラウンドサービスは制限されています。WorkManagerは、チェーン、制約(充電時のみなど)、クラッシュ後の再起動をサポートする、遅延実行および保証付きバックグラウンドタスクのための推奨ライブラリです。
Jetpack Composeと従来のXMLレイアウトの選択は、Androidプロジェクト開始時の主要なアーキテクチャ上の決定です。XML Layouts(RecyclerView、ConstraintLayout、FrameLayout)は2008年からの標準です。Jetpack Composeは2021年に宣言的代替として導入されました。
| 基準 | XML Layouts | Jetpack Compose |
|---|---|---|
| パラダイム | 命令型(Viewツリー) | 宣言型(@Composable関数) |
| 最小バージョン | 任意(API 1+) | API 21+(Android 5.0) |
| レイアウト | XML + data binding / ViewBinding | Modifierを使用したKotlinコード |
| RecyclerView類似 | RecyclerView + Adapter + ViewHolder | LazyColumn / LazyGrid |
| プレビュー | Android StudioでのXMLプレビュー | インタラクティブな@Previewアノテーション |
| 再コンポーズ | notifyDataSetChanged(完全) | 自動、細粒度(DiffUtil) |
| 相互運用性 | 完全(全ライブラリ) | XMLでのComposeView / ComposeでのAndroidView |
Googleはすべての新規プロジェクトにJetpack Composeを推奨しています。XML Layoutsは、レガシープロジェクトのサポートや、Viewの最大限のカスタマイズ(Canvas、SurfaceView)が必要な場合に関連性を保っています。Composeコードは同等のXML + ViewBindingよりも平均40%短くなります。
// 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に直接結果を表示します。
Androidの各Activityは、onCreate、onStart、onResume、onPause、onStop、onDestroyの6つのライフサイクル状態を経ます。FragmentはonAttach、onCreateView、onViewCreatedを追加します。ライフサイクルの理解は、メモリ管理とリーク防止に重要です。
onCreate — Activity作成時に1回呼び出されます。ここで初期化(setContentView、アダプター設定、LiveDataサブスクリプション)を行います。onResume — Activityがフォアグラウンドにあり、ユーザーと対話しています。onPause — Activityがフォーカスを失います(ダイアログ、別のActivity)。onStop — Activityが表示されなくなります。onDestroy — Activityが破棄されます。
// 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 は公式の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レベルをターゲットにする必要があります |
| コンテンツレーティング | 年齢評価アンケート |
| ストアリスティング | 名前、アイコン、スクリーンショット、説明 |
よくある質問
Kotlin — Googleが公式に推奨するAndroid言語です。Javaもレガシープロジェクトではサポートされています。Kotlinはヌル安全性、コルーチン、拡張関数を提供し、Javaと比較してコード量を30~40%削減します。
Jetpack Composeは、宣言的構文と自動再コンポーズ最適化により、すべての新規プロジェクトに推奨されます。XML Layoutsはレガシープロジェクトや、CanvasやSurfaceViewの細かいカスタマイズが必要な場合に残っています。
Google Playデベロッパー登録は25ドルの一回限りです。ストア手数料は最初の100万ドルの収益まで15%、その後30%です。サブスクリプションの手数料は初日から15%です。Apple Developer Programとは異なり、年会費はありません。
Android Jetpack は公式SDKに含まれるGoogleライブラリ群です:Navigation、Room(コンパイル時クエリチェック付きSQLite ORM)、WorkManager(保証付きバックグラウンドタスク)、ViewModel(状態管理)、LiveDataとStateFlow(リアクティビティ用)など。
新規プロジェクトの最小サポートバージョンはAPI 24(Android 7.0)です。AndroidManifest.xmlでアプリケーションのコンポーネントと権限を記述します。APK/AABはkeystoreで署名されます。Target SDKは公開時の最新APIレベルに一致する必要があります。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。