Flutter Namespace not specified hatası: uygulama ve plugin için çözüm
Flutter Android derlemesinde eksik namespace değerini doğru modüle ekleyin; Groovy ve Kotlin DSL örnekleriyle plugin kaynaklı hatayı ayırın.
Flutter projesinin Android derlemesinde Namespace not specified hatası alıyorsanız, Android Gradle Plugin bir modülün namespace değerini bulamıyor demektir. Android Gradle Plugin 8.0 ile bu değerin modülün build dosyasında belirtilmesi zorunlu hale geldi.
Çözüm, hata mesajında adı verilen modüle doğru namespace tanımını eklemek veya eski plugin'i bu tanımı içeren sürüme güncellemektir. Sorun :app yerine üçüncü taraf plugin'deyse sadece uygulamanın build dosyasını değiştirmek yeterli olmaz.
1. Hatanın hangi modülde oluştuğunu bulun
A problem occurred configuring project ':example_plugin'.
Namespace not specified. Specify a namespace in the module's build file.
Bu öğretici örnekte sorun example_plugin modülündedir. Kendi çıktınızda :app görünüyorsa uygulama modülünü, bir paket adı görünüyorsa o paketin Android yapılandırmasını inceleyin. İlk hata mesajına yakın dosya yolunu kaydedin.
flutter --version
flutter doctor -v
flutter pub outdated
flutter build apk --debug -v
Son komut ayrıntılı derleme günlüğü üretir. Günlüğü paylaşmadan önce makine yolu veya başka özel bilgileri kontrol edin. Flutter, Java, Gradle ve AGP sürümleri birlikte değerlendirilmelidir; sadece en yeni AGP sürümünü seçmek başka bir uyumsuzluk yaratabilir.
2. Uygulama modülüne namespace ekleyin
Groovy DSL kullanan android/app/build.gradle dosyasında mevcut android bloğuna:
android {
namespace "com.example.myapp"
// Mevcut compileSdk ve defaultConfig ayarlari burada kalir.
}
Kotlin DSL kullanan android/app/build.gradle.kts için:
android {
namespace = "com.example.myapp"
// Mevcut Android ayarlari burada kalir.
}
Örnekteki namespace değerini projenizin gerçek Java/Kotlin paket yapısına uygun değerle değiştirin. Dosyada var olan android bloğuna ekleyin; ikinci bir bağımsız dosya yapısı oluşturmayın. Yeni Flutter şablonlarında Kotlin DSL görülebilir; dosyanızın uzantısına uygun sözdizimini kullanın.
namespace ve applicationId aynı şey mi?
namespace, üretilen R ve ilgili kod sınıflarının paket alanını belirler. applicationId, kurulan uygulamanın Android kimliğidir. Aynı olabilirler; fakat farklı görevleri vardır. Yayımlanmış bir uygulamanın applicationId değerini bu hata için değiştirmek gerekmez ve mağazada farklı uygulama kimliği oluşturabilir.
Eski projede manifest'in package alanı namespace için başlangıç bilgisi sağlayabilir. Güncel AGP geçişinde bu bilgiyi Gradle namespace alanına taşıyın. Ardından AGP'nin manifest package alanı hakkında verdiği diğer uyarı veya hataları da ilgili geçiş belgesine göre değerlendirin.
3. Hata eski bir Flutter plugin'inden geliyorsa
Önce paketin yeni sürümünde namespace tanımının düzeltilip düzeltilmediğini kontrol edin. pubspec.yaml sürüm aralığını uyumlu sürüme güncelleyin, flutter pub get çalıştırın ve pubspec.lock farkını inceleyin. Diğer paketlerin sürümlerini gereksiz yere değiştirmeden bu pakete odaklanın.
Paketin bakımı durmuşsa kalıcı seçenekler; bakımı süren alternatif, sürümü sabitlenmiş bir fork veya projede tutulan yerel pakettir. Pub cache içindeki dosyayı düzenlemek yalnızca makinenizde çalışabilir; paket tekrar indirilince veya CI'da kurulum yapılınca kaybolur.
Yerel fork örneği, gerçekten depoya eklenmiş packages/example_plugin dizini içindir:
dependency_overrides:
example_plugin:
path: packages/example_plugin
Fork'un kendi android/build.gradle dosyasına paketin gerçek kod yapısına uygun namespace ekleyin. Bütün plugin'lere uygulamanızın namespace değerini kopyalamayın. Bağımlılık değişimini ve fork nedenini ekip için belgeleyin.
4. Yeniden derleyin ve ortam uyumunu kontrol edin
flutter clean
flutter pub get
flutter build apk --debug
Debug derlemesinden sonra projenin release akışını da çalıştırın; imzalama ve küçültme gibi farklı aşamalar olabilir. flutter clean derleme çıktısını temizler, eksik namespace tanımını kendiliğinden eklemez.
Kök build dosyasında bütün alt projelere afterEvaluate ile rastgele namespace atayan çözümler sorunu gizleyebilir. Değeri ilgili modülde açıkça tanımlamak, plugin güncellemeleri ve CI kurulumu sırasında daha öngörülebilir sonuç verir.
Kısa rehber
Sık yapılan hata
Hata üçüncü taraf modülde oluştuğu halde yalnızca app namespace değerini değiştirmek veya pub cache düzenlemesini kalıcı çözüm sanmak.