Androidライブラリモジュールでandroid.sourceSetsをKotlin DSLから設定すると、Gradleの構成段階でDefaultAndroidLibrarySourceSet_Decorated cannot be cast to AndroidLibrarySourceSetが発生することがあります。これはAGP 9.2.0で入った型の不整合による既知の回帰で、アプリモジュールではなくcom.android.libraryを適用したモジュールが対象です。GoogleはIssue #550220873として修正し、Android Studio Rabbit 1 Canary 3の修正一覧に掲載しています。
代表的なエラーログ
java.lang.ClassCastException:
class com.android.build.gradle.internal.api.DefaultAndroidLibrarySourceSet_Decorated
cannot be cast to class com.android.build.gradle.api.AndroidLibrarySourceSet
* Where:
Build file '<project>/lib/build.gradle.kts' line: 6
* What went wrong:
class com.android.build.gradle.internal.api.DefaultAndroidLibrarySourceSet_Decorated
cannot be cast to class com.android.build.gradle.api.AndroidLibrarySourceSet
./gradlew :lib:help --stacktraceのような、ビルドを実行しない構成確認だけでも失敗します。--no-configuration-cacheを付けても解消しないことが公式Issueの再現報告で確認されています。
原因
AGPのLibraryExtension.getSourceSets()が、従来パッケージのcom.android.build.gradle.api.AndroidLibrarySourceSetを要素型として公開している一方、実行時のDefaultAndroidLibrarySourceSetは新しいcom.android.build.api.dsl.AndroidLibrarySourceSetを実装しています。Kotlin DSLがassetsなどのメンバーへ触れる際に従来型へのキャストを生成するため、JVM上の名目的な型不一致でClassCastExceptionになります。
発生条件:com.android.libraryモジュールで、getter経由のandroid.sourceSets.named(...).configureを使用
確認された影響版:AGP 9.2.0、9.2.1、9.3.1、9.5.0-alpha02
正常確認版:AGP 9.0.1、9.1.1
公式修正掲載:Android Studio Rabbit 1 | 2026.2.1 Canary 3(同梱AGP 9.5.0-alpha03)
推奨する解決方法
1. Rabbit 1 Canary 3/AGP 9.5.0-alpha03以降へ更新する
公式修正が含まれるAndroid Studio Rabbit 1 Canary 3以降と、対応するAGPへ更新します。Android StudioとAGPの互換性を確認し、まず別ブランチまたはCIでGradle Syncとビルドを検証してください。
plugins {
id("com.android.library") version "9.5.0-alpha03" apply false
}
より新しい版を使う場合は、その版の公式修正一覧と互換性情報を確認してください。プレビュー版を本番プロジェクトへ即時導入できない場合は、次の公式Issue記載の回避策を使用できます。
2. getterではなくKotlinブロック形式を使う
問題が起きる書き方は、型が不整合なgetterを経由します。
android.sourceSets.named("main").configure {
assets.setSrcDirs(listOf("src/other/assets"))
}
公式Issueで示された回避策は、次のようにsourceSetsのKotlinブロックオーバーロードを経由する方法です。
android.sourceSets {
named("main").configure {
assets.setSrcDirs(listOf("src/other/assets"))
}
}
このブロックは新しいDSLパッケージの型を使用するため、誤った従来型へのキャストを避けられます。
代替策
- AGP 9.1.1へ一時的に戻す:公式Issueの再現結果では9.1.1以前は正常です。ただし、他の修正やcompileSdk要件との互換性を確認し、恒久対応ではなく一時固定として扱ってください。
- 問題の設定を別APIへ移す:特定のソースディレクトリだけが目的なら、修正版へ移行するまでKotlinブロック形式に限定します。
getByName("main")への置換だけでは直らない:失敗原因は検索方法ではなくコンテナの要素型なので、namedからgetByNameへ変えるだけでは回避できません。
修正確認
./gradlew :lib:help --stacktrace
./gradlew :lib:assembleDebug
./gradlew :app:assembleDebug
まずライブラリモジュールの構成が通ることを確認し、続いてライブラリとアプリ双方をビルドします。Gradle Syncが成功するだけでなく、設定したassetsなどのソースディレクトリが成果物へ含まれていることも確認してください。
注意点
- この問題はユーザーコードの明示的なキャストミスではなく、AGPの公開getterと実装型の不整合です。無関係なキャスト追加で抑え込まないでください。
- 同じスクリプトでも
com.android.applicationモジュールは成功するため、アプリ側だけの確認では修正判定になりません。 - Rabbit 1 Canary 3はプレビュー版です。安定版への取り込み状況は、利用する版の公式修正一覧で確認してください。
まとめ
DefaultAndroidLibrarySourceSet_Decorated cannot be cast to AndroidLibrarySourceSetは、AGP 9.2.0以降の一部バージョンで発生するライブラリ用SourceSetの型不整合です。推奨対応はRabbit 1 Canary 3/AGP 9.5.0-alpha03以降への更新です。すぐに更新できない場合は、getter形式を避けてandroid.sourceSets { ... }ブロックを使うと、公式Issueで確認された不整合経路を回避できます。
