namespace not specified
問題文
Android Gradle Plugin (AGP) 8.0.0 以降へアップグレード後に発生する Namespace not specified
エラーは、主に以下の状況で発生します:
- AGP 8.0.0以上の導入時:ネームスペース定義が必須となったため
- 旧式プロジェクトの移行:AndroidManifest.xml の
package
属性が build.gradle へ移行されていない - サードパーティライブラリやプラグイン:未対応の依存関係が存在する場合(特にFlutter/Capacitorプロジェクト)
WARNING
Ionic/Capacitorプロジェクトで頻発:サードパーティプラグインがネームスペース未定義だとエラーが継続します。該当エラーメッセージ:
plaintext
Namespace not specified. Please specify a namespace in the module's build.gradle file
解決策
方法1:AGP Upgrade Assistantの使用(推奨)
Android Studio の組み込みツールで安全に移行:
AndroidフォルダをAndroid Studioで開く
Flutter/Capacitor プロジェクトの場合:プロジェクトルート/android
を開くAGP Upgrade Assistantを実行
- ビルド終了後、右下ポップアップの Start AGP Upgrade Assistant をクリック
- 指示に従い全手順を適用
トップレベルの build.gradle を編集
android/build.gradle
に以下を追加:
groovy
buildscript {
ext.kotlin_version = '1.9.0' // 最新版を推奨
dependencies {
classpath 'com.android.tools.build:gradle:8.1.2' // AGP 8.x
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
// エラー解決のコア部分
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group // 自動命名
}
}
}
}
}
}
方法2:手動でネームスペースを定義
個別のモジュール(app や プラグイン)に対して直接指定:
- モジュールの build.gradle を編集
android
ブロック内にnamespace
を追加:
groovy
android {
namespace 'com.example.app' // 実際のパッケージ名に変更
compileSdk 34
// ... 既存の設定
}
- AndroidManifest.xml の修正
package
属性を削除(AGP 8.x では不要):
diff
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.app">
方法3:プラグイン問題への対処
未更新プラグインが原因の場合のワークアラウンド:
エラー発生プラグインを特定
Sync
エラーログで失敗モジュールをチェック:プラグインを更新
以下のいずれかで対応:- プラグインの最新版に更新
- 代替ライブラリを採用
- メンテナーに修正を依頼
即時対応が必要な場合
暫定的な名前空間付与(一時的な解決策):
groovy
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android') && project.android.namespace == null) {
project.android.namespace "temp.${project.name.replace('-', '_')}"
}
}
}
解説
なぜこのエラーが発生するか
- AGP 8.0の仕様変更:
AndroidManifest.xml
のpackage
属性が非推奨化され、build.gradle
のnamespace
定義が必須に - プラグインの互換性問題: 特に
fluttertoast
や一部 Capacitor プラグインが未対応であるケースが多い - キャッシュの影響: 古いビルドキャッシュが残りエラーが継続する場合あり
解決策の仕組み
groovy
subprojects {
afterEvaluate {
if (project.hasProperty('android') && android.namespace == null) {
android.namespace = // 命名ロジック
}
}
}
- サブプロジェクト評価後: 全依存モジュールの設定完了後にネームスペースが存在するかチェック
- 動的命名: 未定義の場合に自動付与しビルドプロセスを継続
- 後方互換性: AGP 7.x では無視されるため安全
備考
- キャッシュクリアの重要性: 変更後に Build > Clean Project と File > Invalidate Caches / Restart を実行
- 長期的な解決: サードパーティプラグインはネイティブ対応を要請
- 検証済み環境:
- Android Studio Flamingo 2022.2.1+
- AGP 8.1.2
- Flutter 3.13+, Capacitor 5+
非推奨な回避策
下記方法は一時的にエラーを隠蔽しますが、根本解決にはなりません:
gradle.properties
にandroid.defaults.buildfeatures.namespace=true
を追加- AGP を 7.x にダウングレード