Android Profilerとは、CPU、Memory、Networkの機能

著者: IT Sectr 公開日: 2026-03-30 読了時間: 9 分

Android Profilerは、Android Studioに組み込まれたツールセットで、アプリケーションのパフォーマンスをリアルタイムで監視します。サードパーティのライブラリをインストールせずに、CPU負荷、メモリ消費、ネットワークトラフィック、エネルギー消費を追跡できます。Android Developersによると、プロファイラはIDEに直接統合されており、接続されたデバイスの任意のプロセスに対してミリ秒単位の精度でメトリクスを提供します。

重要なポイント

  • Android Profiler — CPU、Memory、Network、EnergyのためのAndroid Studio組み込みプロファイラ。
  • CPU Profilerは正確なコールツリーでスレッドごとのプロセッサ負荷を表示します。
  • Memory ProfilerはJava Heap、Native Heap、Graphics Memoryをリアルタイムで追跡します。
  • Network Profilerは各HTTPリクエストをサイズ、期間、ヘッダーとともに記録します。
  • Energy Profilerはデバイスのバッテリーを過度に消費する操作を特定します。

Android Profilerとは?

Android Profilerは、従来のAndroid MonitorとDDMSを置き換えたAndroid Studioのコンポーネントです。アプリケーションのすべての側面をプロファイリングするための統合インターフェースを提供します:CPU Profiler(プロセッサ分析)、Memory Profiler(メモリ操作)、Network Profiler(ネットワークリクエスト)、Energy Profiler(エネルギー消費)。Android Studioを介してアプリケーションを起動すると、データが自動的に収集されます。

プロファイラはエミュレータとUSB接続の物理デバイスの両方で動作します。Google I/O 2023によると、Android ProfilerはAndroidプロジェクトの70%以上で使用されており、パフォーマンス診断の標準ツールと見なされています。サードパーティのソリューションに対する主な利点はゼロインテグレーションです:build.gradleに依存関係を追加したり、アプリケーションのコードを変更したりする必要はありません。

Android ProfilerのアーキテクチャはPerfettoに基づいています — カーネルとアプリケーションレベルでデータを収集するAndroidのシステムトレーサーです。Perfettoは最小限のオーバーヘッド(CPUの1%未満)を保証し、最大30分の長期記録をサポートします。これにより、高速な操作だけでなく、画面遷移、バックグラウンド同期、1時間の使用におけるメモリ消費などの長時間のシナリオもプロファイリングできます。

Android Profilerが収集するデータ

プロファイラは4種類のデータを収集します:CPU — 各コアとスレッドの負荷、Memory — Java Heap、Native Heap、Stack、Graphics、Network — すべての受信および送信リクエスト、Energy — エネルギー消費カテゴリ(Idle、Light、Medium、Heavy)。データはタイムラインで同期され、CPUの変化がMemoryやエネルギー消費にどのように影響するかを同時に確認できます。

CPU Profiler: プロセッサとスレッドの分析

CPU Profilerはタイムライン上でリアルタイムにプロセッサ負荷を表示し、アプリケーションのスレッドごとに分類します。各スレッドは色付きの線または領域で表されます — 領域が広いほど、スレッドが占有するプロセッサ時間が多くなります。赤色の領域はアプリケーションの動作、青色はシステムコール、灰色は待機を意味します。

詳細な分析のために、CPU Profilerは3つの記録モードをサポートしています:Trace Java Methods(すべてのJavaメソッドのトレース)、Trace C/C++ Functions(NDKネイティブ関数のトレース)、Sample Java Methods(サンプリング、推奨モード)。サンプリングは最もオーバーヘッドが少なく、日常的なプロファイリングに適しており、完全なトレースは複雑な問題の発見に使用します。

kotlin
// 例:CPU Profiler分析はこのメソッドをボトルネックとして表示します
class DataProcessor {
    suspend fun processLargeDataset(items: List<Item>): List<Result> {
        // CPU ProfilerはinBackgroundThreadで高いCPU負荷を表示します
        return withContext(Dispatchers.Default) {
            items.map { it.computeHeavyTransformation() }
        }
    }
}

// プロファイリング後の推奨事項:
// computeHeavyTransformationが80%の時間を占有 — 結果をキャッシュします
class DataProcessorOptimized {
    private val cache = LruCache<String, Result>(100)

    suspend fun processLargeDataset(items: List<Item>): List<Result> {
        return withContext(Dispatchers.Default) {
            items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
        }
    }
}

記録後、CPU ProfilerはTop-Down Treeを表示します — 各メソッドの実行時間を含むコールツリーです。Self Time/Total列に注意してください:メソッドのSelf Timeが16 msを超え、UIスレッドから呼び出されている場合、フレームドロップが確実です。解決策は、Dispatchers.IOまたはDefaultを使用して重い計算をバックグラウンドスレッドに移動することです。

CPUトレースモード

Sample Java Methods — オーバーヘッド3–5%の日常的なプロファイリングに推奨されるモード。Trace Java Methods — 各呼び出しの完全なトレース、最大15%のオーバーヘッド、短い記録(5〜10秒)に使用。Trace C/C++ Functions — Linux Perfを介したNDKコードのトレース、ゲームやC++ライブラリの分析に不可欠。問題の種類に応じてモードを切り替えてください。

Memory Profiler: メモリ操作とリークの発見

Memory Profilerはアプリケーションのすべてのメモリカテゴリを追跡します:Java Heap(JVMオブジェクト)、Native Heap(JNIを介したC/C++アロケーション)、Stack(スレッドスタック)、Graphics(テクスチャ、GPUバッファ)。主な可視化はメモリ消費の時間グラフで、各カテゴリが独自の色で表示されます。ガベージコレクション後にグラフが減少しない場合、リークを疑ってください。

リークを見つけるにはCapture Heap Dump機能を使用します。ダンプの瞬間、Android Profilerはアプリケーションを約100 ms停止し、HPROFファイルを作成します — Java Heapのすべての生存オブジェクトの完全なスナップショットです。ダンプを開いた後、Retained Size(オブジェクト削除時に解放されるメモリ量)でオブジェクトを並べ替え、破棄されるべきだったActivity、Fragment、Bitmapのインスタンスを探せます。

Google I/O 2022によると、Memory ProfilerとLeakCanaryの組み合わせは、Androidのメモリリーク検出シナリオの95%をカバーします。LeakCanaryは自動的に動作し、バックグラウンドでリークを検出します。Memory Profilerは手動分析に必要です:リークだけでなく、アロケーションの全体像を確認できます。

メモリカテゴリ説明一般的なサイズ
Java HeapJVMヒープ: Kotlin/Javaオブジェクト5–200 MB
Native HeapJNI、NDKを介したアロケーション1–100 MB
Graphicsテクスチャ、GPUバッファ10–200 MB
Stackすべてのスレッドのスタック1–10 MB

HPROFダンプの解釈方法

ダンプをキャプチャした後、Retained Sizeでオブジェクトを並べ替えます — これはオブジェクト削除時に解放されるメモリ量です。メモリに存在すべきでない、大きなRetained Sizeを持つActivity、Fragment、Bitmapのインスタンスを探します。Reference Treeタブに移動して、オブジェクトを保持している参照チェーンを確認します — ほとんどの場合、シングルトンの静的フィールドまたはクリーンアップされていないコールバックです。重要なメトリックはAllocation rate(1秒あたりのアロケーション数)です。Allocation rateが10,000オブジェクト/秒を超える場合、アプリケーションは一時オブジェクトの作成と削除に時間を費やしすぎており、GCに負荷がかかりマイクロフリーズを引き起こします。この場合、View Inspectorツールを使用して、ループ内で頻繁にオブジェクトが作成される場所を見つけてください。

Network Profiler: ネットワークリクエストの監視

Network Profilerはタイムライン上でアプリケーションのすべてのネットワークリクエストをリアルタイムで表示します。各リクエストは水平バーとして表示されます — 長さは実行時間に、色はリクエストの種類(GET、POST、PUT、DELETE)に対応します。スケールをスクロールすると、リクエストが時間的にどのように分布しているか、重複していないかを確認できます。

すべての人気ライブラリがサポートされています:OkHttp、Retrofit、Volley、Ktor。KtorとOkHttpの場合、プロファイラはインターセプターとコンバーターを含む完全なコールスタックを表示します。各リクエストについてRequest HeadersResponse Headers、レスポンスボディ(最大1 MB)、ステータスコード、期間が利用可能です。

Network Profilerで特定される典型的な問題:キャッシュの欠如(同じURLが開くたびにリクエストされる)、重複リクエスト(2つのコンポーネントが同じデータを同時にロードする)、過剰なレスポンスサイズ(サーバーが50 KB必要なときに5 MBを送信する)。Network Profilerはタイムラインを一目見るだけでこれらの問題を確認できます。

低速ネットワークをエミュレートするには、Android StudioのNetwork Conditioningを使用します — 帯域幅を3G/2Gに制限し、遅延を追加できます。これは、特にインターネットが不安定な地域で動作するアプリケーションの、悪いネットワーク条件下での動作テストに非常に重要です。

Energy Profiler: エネルギー消費の分析

Energy ProfilerはPerfettoデータに基づいてアプリケーションのバッテリーへの影響を評価します。このツールはミリアンペア単位の実際の消費を測定するのではなく、各操作を5つのエネルギー消費カテゴリに分類します:Idle、Light、Medium、High、Overloaded。Energy Profilerのタイムラインは色で強調表示されます:緑(軽負荷)、黄(中負荷)、赤(高負荷)。

赤いゾーンの主な原因:WakeLock(アプリケーションがプロセッサをアクティブに保つ)、Location GPS(高精度での継続的な位置情報リクエスト)、Keep-Alive接続(サーバーとの頻繁なデータ交換)、大規模なデータ転送(ファイル送信、ストリーミング)。Energy Profilerは、どの操作がいつエネルギー消費のピークを引き起こしたかを正確に示します。

Android Developersによると、一般的なアプリケーションはHighカテゴリで時間の5%以下を過ごすべきです。Energy Profilerがプロファイリング時間の10%以上に赤いゾーンを表示する場合、アプリケーションはバッテリー消費基準のレビューに合格しません。推奨事項 — バックグラウンドタスクにはWorkManagerを使用し、Locationリクエストを必要最小限の精度に制限し、ネットワークリクエストをバッチに集約してください。

Android Profilerの使い方: 実践ガイド

Android Profilerの起動はワンクリックで行えます:Android StudioでView → Tool Windows → Profilerを開くか、右パネルのProfilerアイコンをダブルクリックします。接続されたデバイスでアプリケーションを起動すると、Android Studioが自動的にプロセスに接続し、データ収集を開始します。タイムラインにCPU、Memory、Network、Energyのグラフがすぐに表示されます。

詳細な分析のために、目的のタブ(CPU、Memory、Network、Energy)を選択し、記録を開始します。CPUにはSample Java Methodsモードで記録時間30秒をお勧めします — これで典型的なシナリオに十分です。Memoryにはシナリオ実行後のヒープダンプ(Capture Heap Dump)を。Networkの記録は自動的に開始され、シナリオ完了後にStopボタンを押すだけです。

記録停止後、データをエクスポートします:File → Save Asでセッション全体を.perfファイルに保存できます。これは最適化前後のメトリクス比較に便利です。最初の安定バージョンでベースラインセッションを作成し、新しいセッションごとに比較してください — これがパフォーマンス変化を客観的に評価する唯一の方法です。

CIでのプロファイリング自動化

Android ProfilerはAndroid Studio CLIFirebase Test Labを介してコマンドラインから実行できます。Firebase Test LabはUIテストの一部としてパフォーマンスプロファイリングをサポートしています:テスト結果とともにCPU、Memory、Networkのメトリクスを取得できます。メトリクスがベースラインから10%低下した場合、CIパイプラインが開発者による確認までブロックされるようにパイプラインを設定してください。

よくある質問

Android Profilerはアプリケーションの動作を遅くしますか?

影響は最小限です。Android Profilerはデータ収集にPerfettoを使用し、CPUオーバーヘッドは1%未満です。Sample Java Methodsモードではオーバーヘッドは約3–5%で、シナリオプロファイリングには問題になりません。メソッドの完全なトレースは最大15%のオーバーヘッドを与える可能性があるため、短い記録にのみ使用されます。

Android Studioなしでアプリケーションをプロファイリングできますか?

はい、システムトレースはPerfetto CLIを介してデバイスから直接記録できます:adb shell perfetto --out /data/local/tmp/trace.perf。その後、ファイルをPerfetto UI(ui.perfetto.dev)インターフェースで開くか、Android Studioにインポートしてアプリケーションの完全なマークアップとともに表示できます。

Network ProfilerとCharles Proxyの違いは?

Android Profilerはプロキシ設定が不要なシステムツールです。パフォーマンスのコンテキストでIDEに直接リクエストを表示します。Charles Proxyは外部プロキシサーバーで、より詳細な分析(トラフィックインターセプト、リクエスト変更、再送信)を提供します。パフォーマンスプロファイリングにはAndroid Profilerを、APIコントラクト分析にはCharlesを使用してください。

Memory Profilerでメモリリークを見つける方法は?

シナリオ実行前にヒープダンプを取得します(例:Activityを開く前)。シナリオを実行 — Activityを開いて閉じます。2番目のダンプを取得します。生存Activityインスタンスの数を比較します:2番目のダンプで多い場合 — リークです。Retained Sizeで並べ替え、余分なActivityを見つけ、Reference Treeで原因を確認します。

一部のデバイスでEnergy Profilerが利用できない理由は?

Energy ProfilerはデバイスレベルのPower ProfilesサポートとAndroid 8.0+が必要です。エミュレータや一部のファームウェア(特に中国製)ではデータが利用できない場合があります。解決策は、純正AndroidファームウェアのPixelまたはSamsungのリファレンスデバイスでエネルギー消費をプロファイリングすることです。

まとめ

  • Android Profiler — CPU、Memory、Network、Energy監視のためのAndroid Studio組み込みプロファイラ。
  • CPU Profilerは1%未満のオーバーヘッドでPerfettoトレースを使用してコアとスレッドの負荷を分析します。
  • Memory ProfilerはHPROFダンプをサポートしてJava Heap、Native Heap、Graphics、Stackを追跡します。
  • Network ProfilerはOkHttp、Retrofit、Ktorのすべてのリクエストをヘッダー、ボディ、期間とともに記録します。
  • Energy Profilerはアプリケーションのエネルギー消費をIdleからOverloadedまでのカテゴリに分類します。
  • プロファイラはアプリケーションコードの変更なしで動作します — ゼロインテグレーション。
  • Firebase Test Labを介してCIにプロファイリングを組み込み、各リリースのベースラインを保存してください。

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

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

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

こちらもお読みください