PC パソコン

Android Studio「processDebugUnitTestManifest: Referenced navigation file not found」の解決方法

AGP 9.0.1から9.1.0へ更新した後、Navigation Componentの<nav-graph>をAndroidManifest.xmlで使用しているプロジェクトでは、通常のアプリ用ManifestではなくUnit Test用Manifestを処理するprocessDebugUnitTestManifestが「Referenced navigation file not found」で失敗することがあります。実在するNavigation Graphを探し直す前に、AGP 9.1の既知の回帰かを確認してください。

代表的なエラーログ

> Task :app:processDebugUnitTestManifest FAILED

Manifest merger failed:
Referenced navigation file not found
navigationXmlId = nav_graph

nav_graphの部分はプロジェクト内のリソース名に変わります。通常のDebug APKは処理できても、Unit Test関連タスクだけが失敗する点が重要な手掛かりです。

原因

AndroidManifest.xmlの<nav-graph android:value="@navigation/nav_graph" />は、Navigation GraphからDeep Link情報をManifestへ展開するための記述です。AGP 9.1.0ではUnit Test Manifestの処理時に、このNavigationリソースを正しく解決できない回帰があり、ファイルが存在していても未検出として扱われます。

Googleの公式修正一覧はIssue #496616822を「AGP 9.0.1 → 9.1.0の回帰」と明記し、Android Studio Panda 4 Canary 3と同時提供されたAGP 9.2.0-alpha07での修正項目として掲載しています。

発生条件・対象バージョン

  • Android Gradle Plugin 9.1.0を使用している
  • Manifest内で<nav-graph>を参照している
  • testDebugUnitTestなどに伴ってprocessDebugUnitTestManifestが実行される
  • AGP 9.0.1では成功していた同じプロジェクトが9.1.0で失敗する

公式に確認された修正版はAGP 9.2.0-alpha07です。安定版を使う場合はAGP 9.2.0以降を選びます。

推奨する解決手順

  1. AGPを9.2.0以降へ更新します。 バージョンカタログを使う場合はgradle/libs.versions.tomlを変更します。
[versions]
agp = "9.2.0"

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }

トップレベルのpluginsブロックで管理している場合は、次のように更新します。

plugins {
    id("com.android.application") version "9.2.0" apply false
    id("com.android.library") version "9.2.0" apply false
}
  1. AGP 9.2の互換性表に合わせてGradle WrapperとJDKを確認します。
  2. Android StudioでGradle Syncを実行します。
  3. 失敗していたUnit Test Manifestタスクを再実行します。
./gradlew :app:processDebugUnitTestManifest --stacktrace
./gradlew :app:testDebugUnitTest

更新できない場合の代替策

プラグイン互換性などの理由でAGP 9.2へすぐ移行できない場合は、修正を待つ間だけAGP 9.0.1へ戻す方法があります。Googleが9.0.1から9.1.0への回帰として記録しているため、原因切り分けにも有効です。

[versions]
agp = "9.0.1"

テストを無効化したりManifestから<nav-graph>を削除したりする方法は、テスト範囲やDeep Link生成を変えるため推奨しません。やむを得ず行う場合は一時措置として影響を検証してください。

確認方法

  1. ./gradlew --versionで実行環境を記録する
  2. AGPが9.2.0以降、または一時的に9.0.1であることを確認する
  3. :app:processDebugUnitTestManifestが成功することを確認する
  4. Unit Test一式を実行する
  5. 生成されたManifestと実機/エミュレーターでDeep Linkが引き続き機能することを確認する

注意点

Navigationファイルの名前違い、別モジュールのリソース参照、source setへの配置ミスでも同じ文言が出ることがあります。AGP 9.0.1でも失敗する場合や、通常のprocessDebugMainManifestも失敗する場合は、今回の9.1回帰と断定せず、src/main/res/navigationとManifest参照を確認してください。

AGPだけを更新するとGradle、JDK、Kotlinプラグインとの互換性問題が発生する場合があります。必ず公式の互換性情報に沿って関連バージョンを揃えてください。

まとめ

AGP 9.1でprocessDebugUnitTestManifestだけが「Referenced navigation file not found」となる場合、Navigation XMLの欠落ではなく既知の回帰が疑われます。推奨策は修正済みのAGP 9.2.0以降への更新です。更新できない間は9.0.1へ戻し、通常Manifest、Unit Test、Deep Linkのすべてを確認してください。

参照した公式情報