Android 16完全解説:新API、デスクトップモード、面接質問【2026年版】

Android 16(API 36)を徹底解説。デスクトップモード、ProgressStyle通知、予測型バックナビゲーション、Edge-to-edge強制適用など、面接で問われるトピックを網羅します。

Android 16の新API、デスクトップモード、面接対策ガイド

Android 16(APIレベル36、コードネーム「Baklava」)は、Android 12のMaterial You以来、最も影響の大きいプラットフォームアップデートとなりました。2025年6月10日に安定版としてリリースされ、2026年9月時点でアクティブデバイスの21%以上に搭載されており、最も普及しているAndroidバージョンの一つです。Android開発者の面接対策として、これらのAPI変更を理解することは必須です。

面接対策のポイント

Android 16では、API 36をターゲットとするアプリに3つの破壊的変更が適用されます。Edge-to-edgeレンダリングの必須化、600dp以上の大画面での画面方向・リサイズ制限の無視、そして予測型バックナビゲーションへの適切な対応です。Android面接では必ずこれらのいずれかが問われます。

SDKリリースモデルとメジャー・マイナー戦略

Android 16では、機能導入の計画に影響するデュアルリリース構造が導入されました。メジャーSDKは2025年3月のBeta 3で出荷され、動作変更とコアAPIが確定しました。2番目のマイナーSDKは2025年12月2日にリリースされ、プラットフォームの動作を変更せずに新しいAPIを追加しました。

この分離は面接で重要です。メジャーリリースには互換性を破壊する変更(Edge-to-edge、画面方向の強制)が含まれ、マイナーリリースは既存のアプリの動作に影響を与えずに新機能(追加のJetpackライブラリ、AI関連API)を提供します。Googleはこのモデルを設計し、エンタープライズチームに安定した年次コンプライアンスターゲットを提供しながら、API提供を加速させています。

面接でよく聞かれる質問は、このデュアルモデルにおけるtargetSdkVersionとcompileSdkVersionについてです。回答:targetSdkVersion = 36は、メジャーリリースのすべての動作変更をトリガーします。マイナーSDKは追加のみで、ターゲットの更新やオプトインは必要ありません。

Edge-to-edgeの強制適用(API 36)

Android 16をターゲットとするアプリは、Edge-to-edgeレイアウトをオプトアウトできなくなりました。システムはsetDecorFitsSystemWindows(true)の呼び出しとレガシーなSystemUI可視性フラグを無視します。すべてのアプリはウィンドウインセットを正しく処理する必要があり、そうしないとUI要素がステータスバーやナビゲーションバーの背後に隠れるリスクがあります。

MainActivity.ktkotlin
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // enableEdgeToEdge() is now the default on API 36+
        // No opt-out available
        enableEdgeToEdge()
        setContent {
            Scaffold(
                modifier = Modifier.fillMaxSize()
            ) { innerPadding ->
                // innerPadding accounts for system bars
                MainContent(
                    modifier = Modifier.padding(innerPadding)
                )
            }
        }
    }
}

Jetpack ComposeのScaffoldコンポーザブルは、innerPaddingを通じてインセットを自動的に処理します。Viewベースのアプリでは、ViewCompat.setOnApplyWindowInsetsListenerが引き続き推奨されるアプローチです。重要なポイント:WindowInsetsCompat.Type.systemBars()を明示的に消費する必要があり、そうしないとシステムがアプリデザインと一致しない可能性のあるデフォルトパディングを適用します。

面接官は、XMLレイアウトでandroid:fitsSystemWindows="true"に依存していたアプリがどうなるかをよく質問します。API 36では、この属性はシステムバーのパディングを適用するだけで機能しますが、アプリがEdge-to-edgeで描画することを防ぐことはできません。

適応型アプリと大画面での画面方向変更

Android 16は、smallestWidth >= 600dpのディスプレイでは、ゲーム以外のアプリのandroid:screenOrientationとandroid:resizeableActivity="false"を無視します。タブレット、折りたたみデバイス、デスクトップモードで接続された外部モニターがすべて該当します。これにより、大画面でレターボックス表示された電話レイアウトの時代が終わります。

kotlin
// Responsive layout using WindowSizeClass
@Composable
fun AdaptiveLayout() {
    val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
    when {
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.EXPANDED -> {
            // Two-pane layout for tablets/desktop
            TwoPaneLayout()
        }
        windowSizeClass.windowWidthSizeClass == 
            WindowWidthSizeClass.MEDIUM -> {
            // Adapted layout for foldables
            MediumLayout()
        }
        else -> {
            // Phone layout
            CompactLayout()
        }
    }
}

Jetpack WindowManagerライブラリは、レスポンシブデザインのためのWindowSizeClassを提供します。API 36をターゲットとするアプリ専用のオプトアウトプロパティが利用可能でしたが、Android 17(API 37、2026年6月16日リリース)でこのオプトアウトは完全に削除されました。API 37をターゲットとするアプリは、大画面で画面方向を制限できません。

Android 17でオプトアウトが削除

画面方向制限のAPI 36オプトアウトに依存しているアプリは、API 37をターゲットにする前にレスポンシブレイアウトに移行する必要があります。Android 17の必須リサイズ適用は、600dp以上の画面でのすべての非ゲームアプリに適用されます。

面接官はしばしば「縦向きに固定されたアプリを大画面対応に移行するにはどうしますか?」と質問します。回答には、固定の画面方向をレスポンシブレイアウトに置き換えること、設定変更(特にonConfigurationChanged)のテスト、保存された状態が画面サイズ遷移後も維持されることの確認が含まれます。

デスクトップモードと接続ディスプレイ

デスクトップモードは、Android 16 QPR3(2026年3月のPixel Drop)で一般提供機能として出荷され、Pixel 8以降およびSamsung Galaxy S26/Fold7/Flip7デバイスをサポートしています。USB-Cで電話を外部モニターに接続すると、タスクバー、リサイズ可能なウィンドウ、複数の仮想デスクトップ、完全なキーボード・マウスサポートを備えた独立したデスクトップセッションが起動します。

LaunchOnExternalDisplay.ktkotlin
fun launchOnExternalDisplay(context: Context) {
    val displayManager = context.getSystemService(
        Context.DISPLAY_SERVICE
    ) as DisplayManager
    // Find external displays
    val externalDisplays = displayManager.displays.filter {
        it.displayId != Display.DEFAULT_DISPLAY
    }
    if (externalDisplays.isNotEmpty()) {
        val options = ActivityOptions.makeBasic().apply {
            launchDisplayId = externalDisplays.first().displayId
        }
        context.startActivity(
            Intent(context, DesktopActivity::class.java),
            options.toBundle()
        )
    }
}

電話と外部ディスプレイは独立して動作します。アプリは実行されているディスプレイに固有です。GoogleとSamsungはデスクトップウィンドウ体験で協力し、統一された開発者ターゲットを作成しました。Samsung DeXはこれらと同じプラットフォームAPIを統合しています。

デスクトップモードの開発者向け主要な考慮事項:

  • ウィンドウメトリクスは動的に変化します。 Displayオブジェクトをキャッシュしないでください。すべての設定変更でWindowMetricsCalculatorまたはCompose LocalConfigurationをクエリします。
  • キーボードとマウスのサポート。 デスクトップセッションでは外部ペリフェラルが標準です。KeyEventディスパッチとポインターホバー状態を処理します。
  • マルチインスタンスサポート。 デスクトップユーザーは同じアプリの複数のウィンドウを期待します。android:documentLaunchMode="intoExisting"を宣言するか、FLAG_ACTIVITY_NEW_DOCUMENTを適切に処理します。

Androidの面接対策はできていますか?

インタラクティブなシミュレーター、flashcards、技術テストで練習しましょう。

ProgressStyle通知とライブアップデート

Android 16ではNotification.ProgressStyleが導入されました。これは、ライドシェアの追跡、配達更新、ナビゲーションなど、進捗中心のユーザージャーニー向けの新しい通知テンプレートです。これはアドホックなカスタム通知レイアウトを、標準化されたシステム推奨フォーマットに置き換えます。

DeliveryNotificationHelper.ktkotlin
fun buildDeliveryNotification(
    context: Context,
    orderId: String,
    progress: Float,  // 0.0 to 1.0
    currentStep: String
): Notification {
    val style = Notification.ProgressStyle()
        .setStyledByProgress(true)
        .setProgress(progress)
        .setProgressTrackerIcon(
            Icon.createWithResource(context, R.drawable.ic_delivery_truck)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_preparing)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.33f)
                .setColor(context, R.color.segment_in_transit)
        )
        .addProgressSegment(
            Notification.ProgressStyle.Segment(0.34f)
                .setColor(context, R.color.segment_delivered)
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.0f)
                .setLabel("Order placed")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.33f)
                .setLabel("Preparing")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(0.66f)
                .setLabel("In transit")
        )
        .addProgressPoint(
            Notification.ProgressStyle.Point(1.0f)
                .setLabel("Delivered")
        )

    return Notification.Builder(context, DELIVERY_CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle("Order #$orderId")
        .setContentText(currentStep)
        .setStyle(style)
        .setOngoing(true)
        .build()
}

ProgressStyleは、セグメント(プログレスバーの色付きセクション)、ポイント(ラベル付きマイルストーン)、およびバーに沿って移動するトラッカーアイコンをサポートします。setStyledByProgress(true)を設定すると、システムが完了状況に基づいてセグメントに色を付けます。Androidの通知に関する面接準備では、ProgressStyleと標準のsetProgress()通知のどちらを使用するかを理解することが重要です:ProgressStyleは明確なマイルストーンを持つマルチステップのジャーニー用で、setProgress()はファイルダウンロードのような単一タスク操作に適しています。

OnBackInvokedCallbackによる予測型バックナビゲーション

Android 16は、onBackPressed()からOnBackInvokedCallback APIへの複数年にわたる移行を完了させます。システムはバックジェスチャー中に目的地画面の「ピーク」アニメーションを表示し、ユーザーがコミットまたはキャンセルできるようになります。コールバックを登録せずにonBackPressed()をオーバーライドしているアプリは、このアニメーションを壊します。

DetailActivity.ktkotlin
class DetailActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (Build.VERSION.SDK_INT >= 36) {
            onBackInvokedDispatcher.registerOnBackInvokedCallback(
                OnBackInvokedDispatcher
                    .PRIORITY_SYSTEM_NAVIGATION_OBSERVER
            ) {
                // Observe back navigation without intercepting
                // Log analytics or trigger save-draft logic
                analyticsTracker.logBackNavigation(
                    screen = "detail"
                )
            }
        }
    }
}

新しいPRIORITY_SYSTEM_NAVIGATION_OBSERVERプライオリティにより、アプリはシステムアニメーションをブロックせずにバックイベントを監視できます。Android 16では、予測アニメーションと統合しながらカスタムバックスタック動作を実現するためのfinishAndRemoveTaskCallbackとmoveTaskToBackCallbackも追加されています。

予測型バックはAndroid 16の3ボタンナビゲーションでも機能します。バックボタンを長押しすると、ジェスチャーナビゲーションと同じプレビューアニメーションが開始されます。これは面接でよく出る話題で、ジェスチャーナビゲーションのみに言及する候補者は話の半分を見逃しています。

通知クールダウンと必須グループ化

Androidアプリに影響する2つの追加の通知変更があります。通知クールダウンは、同じアプリからの連続通知のアラート音量を減少させ、約60秒かけて徐々に音量を下げてからリセットします。これはデフォルトで有効化されており、開発者がオーバーライドすることはできません。

必須通知グループ化により、アプリがsetGroup()を使用するかどうかに関係なく、システムは通知を自動的にグループ化するようになりました。エンゲージメントのために個別の通知の目立ちに依存していたアプリは、通知戦略を再考する必要があるかもしれません。

面接準備では、これらの変更はKotlinコルーチンとFlowに関する質問と組み合わせられることが多く、通知の効率的なバッチ処理やスロットリングにはコルーチンベースのデバウンスパターンが関係するためです。

Health ConnectのFHIR APIとRangingManager

Android 16は、Health ConnectをFHIR(Fast Healthcare Interoperability Resources)書き込みサポートで拡張し、ヘルスアプリが構造化された医療記録を作成・保存できるようになりました。RangingManager APIは、BLEチャネルサウンディング、BLE RSSI、Ultra-Wideband、Wi-Fi RTTにまたがる距離・角度測定を統合し、以前は4つの別々のAPI表面を必要としていたものを統合しました。

フォトピッカーは、サンドボックス化された同じセキュリティモデルを維持しながら、開発者がピッカーの外観を制御できる、より深いカスタマイズAPIを獲得しました。クラウドメディアプロバイダー検索はDeveloper Preview 2で追加されました。

これらのAPIは一般的なAndroid面接で出題される可能性は低いですが、ヘルステック、IoT、またはメディア重視のアプリケーションのドメイン固有の役割では重要です。

Android 16の面接質問と回答

以下は、上記で取り上げた動作変更とAPI変更に基づく、Android開発者面接で最も出題される可能性の高い質問です。

Q: API 36をターゲットにする際の必須動作変更は何ですか? 3つの変更が適用されます:Edge-to-edgeレンダリング(オプトアウト不可)、600dp以上の画面での画面方向・リサイズ制限の無視、およびシステム全体での予測型バックナビゲーションの有効化。アプリはWindowInsetsを正しく処理し、レスポンシブレイアウトをサポートし、onBackPressed()からOnBackInvokedCallbackに移行する必要があります。

Q: デスクトップモードはアプリアーキテクチャにどのように影響しますか? デスクトップモードは独立したディスプレイセッションを作成します。アプリはDisplayオブジェクトのキャッシュを避け、動的なウィンドウメトリクスをサポートし、キーボード・マウス入力を処理し、マルチインスタンスシナリオを考慮する必要があります。ActivityOptions.launchDisplayId APIにより、プログラムで特定のディスプレイをターゲットにできます。

Q: ProgressStyleはどのような場合にsetProgress()を置き換えるべきですか? ProgressStyleは明確なマイルストーンを持つマルチステップのユーザージャーニー(ライドシェア、配達、ナビゲーション)向けです。標準のsetProgress()は単一操作の進捗(ファイルダウンロード、アップロード)に適しています。ProgressStyleは通知シェードで昇格した可視性を得ます。

Q: Android 16のメジャー・マイナーSDKリリースモデルとは何ですか? メジャーリリース(2025年3月)には動作変更が含まれ、targetSdkVersionの更新が必要です。マイナーリリース(2025年12月)は動作変更なしで新しいAPIを追加し、targetSdkVersionのバンプは不要です。これにより安定性とイノベーションが分離されます。

Q: 予測型バックは3ボタンナビゲーションでどのように機能しますか? API 36以上では、3ボタンナビゲーションでバックボタンを長押しすると、ジェスチャーナビゲーションと同じ予測アニメーションがトリガーされます。アプリは適切なプライオリティでOnBackInvokedCallbackを登録する必要があります。PRIORITY_SYSTEM_NAVIGATION_OBSERVERプライオリティにより、インターセプトせずに監視できます。

今すぐ練習を始めましょう!

面接シミュレーターと技術テストで知識をテストしましょう。

Sources

Android 16が開発者面接に与える影響

  • Edge-to-edgeはAPI 36ではオプションではなくなりました。すべての画面、特にカスタムツールバーやボトムシートの正しいWindowInsets処理を監査してください。
  • 固定画面方向のマニフェストを、WindowSizeClassを使用したJetpack Composeのレスポンシブレイアウトに置き換えてください。Android 17(API 37)は既にオプトアウトを削除しています。
  • デスクトップモードはPixel 8以降とSamsungフラッグシップで本番対応です。外部ディスプレイ、キーボード入力、マルチインスタンスシナリオでアプリをテストしてください。
  • onBackPressed()からOnBackInvokedCallbackに移行してください。システムアニメーションをブロックせずに分析追跡を行うにはPRIORITY_SYSTEM_NAVIGATION_OBSERVERを使用します。
  • マルチステップのユーザージャーニーにはNotification.ProgressStyleを採用してください。通知クールダウンと必須グループ化は、ターゲットSDKに関係なくすべてのアプリに影響します。
  • メジャー・マイナーSDKモデルでは、動作変更は年に1回発生します。マイナーSDKは互換性リスクなしで新しいAPIを提供します。

今すぐ練習を始めましょう!

面接シミュレーターと技術テストで知識をテストしましょう。

今日のチャレンジ

Android のバグを見つけられますか

実際のコード、隠れたバグ、1日1回。アカウントなしで試せます。

Anthony Fillion-Maillet

執筆

Anthony Fillion-Maillet

SharpSkill 創業者

10 年以上フルスタック開発に携わっています。SharpSkill を運営し、ここで公開される内容に責任を負っています。

2026年9月21日 更新

タグ

#android
#android-16
#mobile-development
#interview-questions

共有

関連記事