./gradlew :app:connectedDebugAndroidTestで「Unable to get provider」とClassNotFoundExceptionが出て、ProviderがDynamic Feature Moduleにある場合はAGPの既知問題が該当する可能性があります。GoogleはIssue #257765153をAGP 9.4.0-alpha02で修正済みとしており、安定版AGP 9.4.0以降への更新が推奨対応です。
代表的なエラー
java.lang.RuntimeException:
Unable to get provider com.example.feature.MyProvider:
java.lang.ClassNotFoundException:
Didn't find class "com.example.feature.MyProvider"
インストルメンテーション開始時、AndroidはMerged Manifest内のContentProviderを生成します。宣言は存在しても、Dynamic Featureのコードがテスト時のインストール構成に正しく含まれなければ、Providerクラスをロードできず停止します。
適用条件
- Dynamic Feature Moduleを利用している
- ContentProviderがFeature内にある
:app:connectedDebugAndroidTestで失敗する- 原因がProviderの
ClassNotFoundExceptionである - AGP 9.4.0-alpha02より前の影響版を使っている
android:nameやnamespaceの誤りでも同じ例外が出ます。例外の完全修飾クラス名が実際のProviderと一致するか先に確認してください。
推奨する解決手順
1. Merged Manifestを確認する
Providerの所属モジュールと最終的なクラス名、宣言元をAndroid StudioのMerged Manifestで確認します。
<provider
android:name="com.example.feature.MyProvider"
android:authorities="${applicationId}.feature.provider"
android:exported="false" />
2. AGP 9.4.0以降へ更新する
AGP 9.4リリースノートでは9.4.0-alpha02の修正項目として掲載され、安定版9.4.0にも含まれています。現在はalpha版ではなく安定版9.4.0以降を選びます。
plugins {
id("com.android.application") version "9.4.0" apply false
id("com.android.dynamic-feature") version "9.4.0" apply false
}
AGP 9.4.0の公式互換条件はGradle 9.6.0、SDK Build Tools 36.0.0、JDK 17です。applicationとdynamic-featureのAGP版を揃えてください。
3. クリーンな状態で再テストする
./gradlew --stop
./gradlew clean
./gradlew :app:connectedDebugAndroidTest --stacktrace
Windowsではgradlew.batを使います。端末に古いアプリやテストAPKが残る場合は対象パッケージをアンインストールして再実行します。
代替策
- 設計上可能なら起動時に必須のProviderをbase appへ一時移動する
- Providerを含むFeatureが端末へ確実にインストールされる構成で検証する
- 影響を受けないAGPへ戻しCIを固定する
- Providerを必要としないテストを分離する
Featureをbaseへ移すと配信サイズとオンデマンド配信設計が変わります。更新までの限定的な回避策です。
更新後も失敗する場合
- ProviderがDebugで利用できるSource Setにあるか
- Dynamic Featureとbase appの関係が正しいか
- base APKと必要なsplitが同時にインストールされているか
- androidTest用Manifestが宣言を上書きしていないか
確認方法
connectedDebugAndroidTestがテスト実行まで進む- Providerの
ClassNotFoundExceptionが消える - テスト結果HTML/XMLが生成される
- クリーンなEmulatorでも成功する
注意点
ManifestからProviderを削除するだけでは本番機能を壊す可能性があります。起動時必須のProviderをDynamic Featureへ置く設計が配信条件と整合するかも確認してください。
まとめ
Dynamic Feature内のProviderがconnectedDebugAndroidTestで見つからない問題はAGP 9.4.0-alpha02で修正され、安定版9.4.0に含まれています。Manifestとクラス名を確認し、AGP・Gradle・JDKを互換条件に合わせて更新して、クリーンな端末で検証します。
