AndroidManifest.xml Nedir ve Nasıl Doğru Yapılandırılır
AndroidManifest.xml, uygulamanın zorunlu XML kimlik dosyasıdır: paket adı, bileşenler (Activity, Service, BroadcastReceiver, ContentProvider), çalışma zamanı izinleri ve intent filtreleri burada belirtilir. Doğru yapılandırılmamış bir manifest dosyası olmadan uygulama çalışmayabilir veya yayınlama sırasında reddedilebilir.
Kısaca: AndroidManifest.xml Neden Gereklidir?
Manifest dosyası, Android sistemine uygulama ile nasıl etkileşime girileceğini bildirir:
- hangi ekranların mevcut olduğu ve hangisinin başlatıcı (launcher) olduğu;
- hangi arka plan servislerinin ve veri sağlayıcılarının bulunduğu;
- uygulamanın hangi izinleri talep ettiği;
- hangi harici çağrıları (deep links, paylaşım intent'leri) işlediği;
- meta veriler: minSdkVersion/targetSdkVersion, simge, tema.
Manifest Dosyasını Adım Adım Nasıl Yapılandırılır
- Temel Şablon Minimal yapı örneği:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
- Activity ve Intent Filtreleri
- Intent filtresi içeren bileşenler için android:exported="true|false" ayarı zorunludur (Android 12+).
- Deep link'ler için gerekirse ve android:autoVerify="true" ekleyin.
- İzinler ve Çalışma Zamanı
- Tehlikeli izinleri manifest dosyasında belirtin, ancak bunları kod içinde (çalışma zamanında) talep edin — özellikle Android 6+ için.
- Android 13+ üzerindeki bildirimler için POST_NOTIFICATIONS iznini ekleyin ve çalışma zamanında talep edin.
- Sağlayıcılar ve Dosya Erişimi
- Dosya paylaşımı için FileProvider kullanın ve doğru authorities değeriyle
tanımlayın. - Scoped storage, dosya paylaşıyorsanız doğru yapılandırma ve manifest sağlayıcısı gerektirir.
Gelişmiş Ayarlar ve Güvenlik
- targetSdkVersion değerini Gradle'da ayarlayın ve platform değişikliklerini takip edin; yeni politikalar izin davranışlarını etkiler.
- Uygulamanın etkileşime girdiği paketleri listelemek için Android 11+ ile birlikte
kullanın. - Servisler için: çağrıları kısıtlamak gerekiyorsa android:exported ve permission değerlerini açıkça belirtin.
- Yayın sürümü için izinleri minimize edin ve derlemede obfuscation (ProGuard/R8) özelliğini etkinleştirin.
Açık bir gereklilik olmadan SMS, mikrofon veya kişilere erişim izni eklemeyin; bu, mağazada engellenme riskini ve kullanıcıların reddetme olasılığını artırır.
Sık Karşılaşılan Hatalar
- Başlangıçta çökme: Intent filtresi olan Activity'de android:exported="true" unutuldu (Android 12+).
- "Uygulama yüklenmedi": Paket çakışması veya güncelleme sırasında hatalı imza.
- Ağ erişimi yok: android.permission.INTERNET unutuldu.
- Simge değişmiyor: Derleme önbelleği — Clean/Rebuild işlemi yapın.
Uygulamayı farklı API seviyelerinde (örneğin 21, 30, 33) test edin ve sorunları tespit etmek için Lint/ADB kullanın.
SSS
-
Flutter/React Native'de manifest dosyasını düzenlemek gerekir mi? Manifest dosyası şablon tarafından oluşturulur, ancak izinler veya intent filtreleri eklemek için android/app/src/main/AndroidManifest.xml dosyasında manuel düzenlemeler yapılır.
-
minSdk ve targetSdk nerede belirtilir? build.gradle (modül) dosyasında, manifest dosyasının kendisinde değil; manifest meta veriler içerebilir ancak asıl kaynak Gradle'dır.
-
Google Play'de gereksiz izinler nedeniyle reddedilirse ne yapılmalı? Manifest dosyasından gereksiz
öğelerini kaldırın, erişimin neden gerekli olduğunu formda açıklayın veya alternatif yaklaşımlar kullanın (örneğin, yalnızca kullanım anında isteme).
Sonuç: AndroidManifest.xml dosyasındaki bileşenleri ve izinleri dikkatlice tanımlayın, android:exported ayarlarını ve çalışma zamanı taleplerini kontrol edin; bu, başlatma sırasında hataları azaltacak ve moderasyon sürecini hızlandıracaktır.