Android Gradle Plugin(AGP)9.4.0へ更新後、R8を有効にしたリリース用Android App Bundleを作成すると、「Entry name contains invalid characters」でbuildReleasePreBundleが失敗することがあります。Google Issue Trackerでは、Kotlin Multiplatformライブラリのモジュール名にコロン(:)が含まれ、R8がその名前を未変換のまま.kotlin_moduleへ再出力することが原因として報告されています。
表示されるエラー
Execution failed for task ':app:buildReleasePreBundle'.
Caused by: java.nio.file.InvalidPathException:
Entry name contains invalid characters:
root/META-INF/SceneView:sceneview-core.kotlin_module
at com.android.builder.packaging.JarFlinger.addJar(...)
at com.android.build.gradle.internal.tasks.PerModuleBundleTask.addHybridFolder(...)
依存ライブラリによって、SceneView:sceneview-core.kotlin_moduleの部分は異なります。共通点は、META-INF内の.kotlin_moduleファイル名にコロンが含まれていることです。
原因
AGP 9.4.0で縮小済みリリースBundleを作成すると、R8がKotlin Metadataを処理し、依存ライブラリのKotlinモジュール名から.kotlin_moduleリソースを再生成します。そのモジュール名にコロンが含まれると、AGPのBundleパッケージング処理が無効なZIPエントリ名として拒否し、InvalidPathExceptionになります。
切り分けの要点: DebugビルドやisMinifyEnabled = falseでは成功し、R8を使うRelease Bundleだけが失敗する場合、この問題と一致する可能性があります。アプリのパッケージ名や出力APK名の問題とは限りません。
発生条件・対象バージョン
- Android Gradle Plugin 9.4.0を使用している
- ReleaseビルドでR8/コード縮小を有効にしている
- Kotlin Multiplatformなど、モジュール名にコロンを含むKotlinライブラリへ依存している
bundleReleaseまたは対応するbuild<Variant>PreBundleを実行している
Googleへの報告では、同じ依存関係がAGP 9.3.2では成功し、AGP 9.4.0で失敗します。重複元のIssue 543685256は修正扱いですが、派生報告ではAGP 9.5.0-alpha05でも同じ失敗が再現したと報告されています。したがって、2026年9月30日時点で一般利用者が確認できる確実な修正版は特定できません。
推奨する解決手順
1. ログ内の.kotlin_module名を確認する
Build Outputで最初のEntry name contains invalid charactersを探し、対象がMETA-INF/...:....kotlin_moduleか確認します。上流のExecution failed for taskだけで判断せず、最初のInvalidPathExceptionまで確認してください。
2. AGP 9.3.2へ一時的に戻す
報告上、同一構成で成功が確認されているAGP 9.3.2へ切り戻します。Version Catalogを使う例は次のとおりです。
[versions]
agp = "9.3.2"
pluginsブロックで直接指定している場合は、プロジェクトの管理方法に合わせてAGPのバージョンだけを変更します。Gradle本体やKotlinの互換性も公式の互換表で確認してください。
3. 同じRelease Bundleを再作成する
./gradlew :app:bundleRelease --stacktrace
カスタムBuild Variantを使っている場合は、実際のタスク名に置き換えます。AGP 9.3.2で成功すれば、アプリコードではなくAGP 9.4.0/R8の回帰である可能性が高まります。
代替策
自作ライブラリならモジュール名からコロンを除く
問題のKotlinライブラリを自分で管理している場合は、公開時のKotlinモジュール名やGradle座標から生成される名前を確認し、:を含まない名前へ変更して再公開します。利用者側だけで第三者ライブラリのMetadataを安全に書き換えることは推奨できません。
依存ライブラリの更新版を確認する
ライブラリ側がモジュール名を変更した更新版を提供している場合は、その版への更新で回避できる可能性があります。ただし、変更履歴と生成される.kotlin_module名を確認してから採用してください。
縮小を一時的に無効化して原因を確認する
android {
buildTypes {
release {
isMinifyEnabled = false
}
}
}
これは原因切り分けには使えますが、アプリサイズ、難読化、不要コード削除、既存のProGuard設定に影響します。恒久対策として無条件に採用せず、公開前にチームの要件を確認してください。
確認方法
./gradlew --versionとビルドログで実際のAGP・Gradleバージョンを記録する- AGP 9.4.0で同じ
bundleReleaseを実行し、代表ログを保存する - AGP 9.3.2へ切り戻し、同一依存関係・同一ソースで再実行する
- 生成されたAABをAndroid StudioのAPK Analyzerまたは
bundletoolで確認する - 将来のAGPへ更新するときは、最小再現プロジェクトで同じRelease Bundleを作成してから本番へ適用する
注意点
- Gradleキャッシュ内のJARを手作業で編集すると、チェックサムや依存関係検証が壊れ、CIでは再現しません。
packaging.resources.excludesで問題のMetadataを除外すると、KotlinリフレクションやツールがMetadataを必要とする場合に別の不具合を招く可能性があります。- AGP 9.5.0-alpha05での再現報告があるため、「9.5系なら必ず修正済み」とは断定できません。
- 修正版を判断するときは、Issue 543685256/556790376のVerified Inや最新AGPのRelease Notesを確認してください。
まとめ
AGP 9.4.0で「Entry name contains invalid characters: … .kotlin_module」が出る場合、R8がコロンを含むKotlinモジュール名を未変換で再出力し、Bundleパッケージングが拒否している可能性があります。現時点で確実性が高い回避策は、同一構成で成功報告のあるAGP 9.3.2への一時的な切り戻しです。縮小無効化は切り分け用途に限定し、修正版は公式IssueとRelease Notesで確認してから採用してください。
