PC パソコン

Android Studio「Entry name contains invalid characters」の解決方法【AGP 9.4.0・R8】

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設定に影響します。恒久対策として無条件に採用せず、公開前にチームの要件を確認してください。

確認方法

  1. ./gradlew --versionとビルドログで実際のAGP・Gradleバージョンを記録する
  2. AGP 9.4.0で同じbundleReleaseを実行し、代表ログを保存する
  3. AGP 9.3.2へ切り戻し、同一依存関係・同一ソースで再実行する
  4. 生成されたAABをAndroid StudioのAPK Analyzerまたはbundletoolで確認する
  5. 将来の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で確認してから採用してください。

参照した公式情報