İmzalı app bundle derle
Web uygulamasını derle
Üretim web derlemeni çalıştır (çoğu Ionic Angular, React ve Vue projesinde
npm run build); Capacitor yapılandırmasındawebDirolarak ayarlı klasör güncel olsun.Android'e eşitle
npx cap sync android, web derlemesini native projeye kopyalar ve native eklentileri günceller. Atlarsan dünkü JavaScript'i yayınlarsın.Android Studio'yu aç
npx cap open androidçalıştır.Paketi oluştur
Build → Generate Signed Bundle/APK'yı seç, Android App Bundle'ı işaretle, anahtar deposunu seç ya da oluştur, release varyantını seç ve Create'e tıkla.
npm run build
npx cap sync android
npx cap open androidKomut satırını ya da CI'ı mı tercih ediyorsun? npx cap build android, --androidreleasetype AAB ve anahtar deposu seçenekleriyle imzalı paket üretir. Şifreleri depoya eklenen bir dosyadan değil, ortam değişkenlerinden ver:
npx cap build android --androidreleasetype AAB \
--keystorepath ../upload-keystore.jks --keystorealias upload \
--keystorepass "$KEYSTORE_PASS" --keystorealiaspass "$KEY_PASS"Yükleme anahtarı ve Play Uygulama İmzalama
Google Play yeni uygulamalarda Play Uygulama İmzalama ister. Android Studio sihirbazında (Create new) oluşturduğun ya da npx cap build'e verdiğin anahtar deposu senin yükleme anahtarındır; ayrı uygulama imzalama anahtarını ilk yüklemenden sonra Google saklar.
Android Studio yeni bir anahtar için en az 25 yıl geçerlilik önerir. Native projeyi yeniden oluşturma ihtimaline karşı .jks dosyasını android/ klasörünün dışında tut ve iki şifreyle birlikte yedekle. Yükleme anahtarı kaybolursa Play Console'dan sıfırlama isteyebilirsin.
Derleme seçeneklerini Capacitor yapılandırmasında tutuyorsan şifreleri depoya eklediğin dosyaya yazma. Yapılandırma deponun bir parçasıdır.
Sürüm kodu ve hedef API düzeyi
Capacitor sürümü package.json'dan okumaz. Google Play'in gördüğü değerler android/app/build.gradle içindedir; her yüklemeden önce versionCode'u artır:
android {
defaultConfig {
versionCode 2
versionName "1.0.1"
}
}31 Ağustos 2026'dan beri yeni uygulamalar ve güncellemeler Android 16'yı (API düzeyi 36) hedeflemek zorunda. Capacitor targetSdkVersion değerini android/variables.gradle içinde belirler ve her ana sürüm tam olarak tek bir değeri destekler: Capacitor 8 36'yı, Capacitor 7 35'i kullanır. Özel değerler desteklenmez; API 36'ya giden yol sayıyı elle değiştirmek değil, eklentilerinle birlikte Capacitor 8'e geçmektir.
ext {
// ...
targetSdkVersion = 36
}Ionic ve Capacitor tuzakları
- Açık kalan canlı yeniden yükleme. Capacitor yapılandırmasındaki bir
server.url, uygulamanın geliştirme makinenin adresini yüklemesine yol açar. Test ediciler boş ekran görür. Sürüm derlemesinden önce kaldır. - Bayat web varlıkları. Önce
npx cap sync androidçalıştırmadan Android Studio'da paket oluşturmak önceki web derlemesini yayınlar. - Başka ana sürümdeki eklentiler. Tüm
@capacitor/*paketleri ve topluluk eklentileri@capacitor/androidile aynı ana sürümde olmalı. Uyumsuzluk native derleme hatalarına ya da çalışırken çökmelere yol açar. - Şifresiz (cleartext) istekler. Android düz
http://trafiğini varsayılan olarak engeller. Üretim derlemeleri yalnız HTTPS API'leri çağırmalı. - Native eklentiler ve 16 KB sayfalar.
.sokitaplığı içeren eklentiler 16 KB bellek sayfalarını desteklemeli. Play Console bunun için uyarır ve 1 Şubat 2027'den itibaren desteklemeyen güncellemeler yayınlanamaz. - Yalnız tarayıcıda test etmek. Geri tuşu, izinler ve derin bağlantılar Android WebView'da farklı davranır. Yüklemeden önce sürüm derlemesini gerçek bir cihaza kur.
Test edicilerin WebView'da gördüğünü ayıkla
Capacitor release derlemelerindeki sorunların çoğu web katmanındadır; bu yüzden en iyi giriş yolu zaten bildiğin tarayıcı araçlarıdır. Release derlemesinde bunlar kapalıdır: webContentsDebuggingEnabled varsayılan olarak false olur, Capacitor'ın kendi günlükleri de varsayılanı debug olan loggingBehavior ayarını izler; yani release derlemeleri sessiz kalır.
Debug derlemesinde yeniden üret
Uygulamayı Android Studio'dan bir telefonda çalıştır, bilgisayarındaki Chrome'da
chrome://inspectaç ve WebView'ı seç. Web kodun için konsol, ağ paneli ve kesme noktaları elinde olur. Edge'deedge://inspectaynı şekilde çalışır.Release derlemesini yalnız yerelde incele
Hata yalnız release'te çıkıyorsa kendin kuracağın bir derlemede
webContentsDebuggingEnableddeğerini geçici olaraktrueyap. Bu derlemeyi asla yükleme: uygulamanın web içeriğini her cihazda hata ayıklanabilir hale getirir.Yerel çökmeleri Play Console'da topla
Capacitor'ın Java kodundaki ya da yerel eklentilerdeki çökmeler İzle ve iyileştir → Android vitals → Çökmeler ve ANR'ler altında görünür. R8 açıksa
.aabiçindeki eşleme dosyası onları okunur yapar.
const config: CapacitorConfig = {
// ...
android: {
// Never ship this to Google Play
webContentsDebuggingEnabled: true,
},
};Test edicilerden cihaz modelini, Android sürümünü ve Android System WebView sürümünü iste. Yalnız WebView'da görülen hataların çoğu bu son sayıya bağlıdır; android.minWebViewVersion altındaki sürümler de uygulamanın desteklediği aralığın dışındadır.
Kısaca Play Console: kapalı testten üretime
Ionic / Capacitor paketin derlenip imzalandıktan sonra gerisi Play Console'da geçer ve her çatıda aynıdır. Bu, kısa kontrol listesi; her menü ve ekran Play Console adımlarının tamamında anlatılıyor.
- Uygulama kurulumunu bitir: Kontrol Paneli'nde gizlilik politikası, uygulama erişimi, reklamlar, içerik derecelendirmesi, hedef kitle, veri güvenliği ve mağaza girişi.
- Kapalı test sürümü oluştur: Test et ve yayınla → Test → Kapalı test altında test edicilerinin ülkelerini seç,
.aabdosyasını yükle ve incelemeye gönder. - Test edicileri Google Group ile ekle: Test ediciler sekmesinde grubu ekle ve opt-in bağlantısını paylaş. Bağlantı, kanal Yayınlandı durumuna geçince çalışır.
- En az 12 test ediciyi 14 gün kesintisiz opt-in tut. Dahili test sayılmaz; ayrılıp geri dönen birinin 14 günü baştan başlar.
- Test sırasında en az bir güncelleme yayınla ve test edicilerin ne bulduğunu, senin neyi değiştirdiğini not et.
- Üretime başvur: Kontrol Paneli'nden başvur ve testin, uygulaman ve hazırlığın hakkındaki üç bölümü yanıtla. Karar Google'ındır; kimse onayı garanti edemez.
Ayrılanları hesaba kat: 12 kişiden fazlasını bul ki biri ayrıldığında takvimin uzamasın. Play Console adımlarının tamamını gör.
Play Console adımlarının tamamı
Kapalı test kanalı, Google Group ve opt-in bağlantısı, 12 test edici / 14 gün kuralı ve üretim başvurusu, tek sayfada adım adım.
Düzeltme gönder ve canlı güncellemelerin yerini bil
Web uygulamasını yeniden derle, eşitle, versionCode'u artır ve aynı kapalı test kanalı için yeni bir imzalı paket oluştur:
npm run build
npx cap sync android
npx cap open androidGoogle Play'in Cihaz ve Ağ Kötüye Kullanımı politikası bir uygulamanın kendini Google Play dışında güncellemesini yasaklar; WebView'daki JavaScript gibi bir yorumlayıcıda ya da sanal makinede çalışan kod için ise istisna tanır. Web katmanı için canlı güncelleme servislerinin var olma nedeni budur. Yerel kod, eklentiler ve izinler her zaman Google Play üzerinden yeni bir paket ister.
Kapalı test sırasında en düz yol, kapalı test kanalında yeni bir versionCode'dur: incelenir, test ediciler onu Google Play'den alır ve sürüm geçmişinde görünür. Ayrıca bir canlı güncelleme servisi kullanıyorsan onu gerçek düzeltmelere ayır ve kapalı test kanalındaki web derlemesini onunla eşit tut.
- WebView alt sınırına dikkat et.
android.minWebViewVersionvarsayılan olarak60olur ve55altına inemez. Sorun yaşayan test ediciler önce Google Play'den Android System WebView'ı güncellemeli. - Karışık içerik yok.
android.allowMixedContentvarsayılan olarak kapalıdır ve üretim için değildir. Her API'yi ve varlığı HTTPS üzerinden sun,server.cleartextayarını da varsayılanfalsedeğerinde bırak. - Her derlemeden önce sync et. Her düzeltme, web derlemesinden sonra
npx cap sync androidister; yoksa yeni paket hala eski JavaScript'i içerir.
Sık sorulan sorular
Bir test edicinin telefonunda Chrome DevTools kullanabilir miyim?
Google Play'den kurduğu derlemede hayır, çünkü release derlemeleri WebView hata ayıklamasını açmaz. Yeniden üretme adımlarını iste, aynı sürümü hata ayıklama açık şekilde kendin kur ve chrome://inspect ile incele.
Test ediciler neden boş ekran görüyor?
Genellikle paket canlı yeniden yüklemeden kalma bir server.url içerdiği için ya da bir istek düz http:// üzerinden başarısız olduğu için. Önce Capacitor yapılandırmasına ve bir debug derlemesinin ağ paneline bak.
Capacitor 7'de kalabilir miyim?
Hedef API son tarihinden sonraki yeni yüklemeler için hayır: her Capacitor ana sürümü tam olarak bir targetSdkVersion değerini destekler; Capacitor 7 35 kullanır, Google Play ise 36 ister. Capacitor 8'e ve eklentilerine geçişi test başlamadan önce planla.
Paketi derlemek için Android Studio gerekli mi?
Hayır. npx cap build android anahtar deposu seçeneklerinle komut satırından imzalı bir .aab derler; bunu CI'da tekrarlamak daha kolaydır. İki durumda da önce web derlemesini ve npx cap sync android komutunu çalıştır.
Kaynaklar
Teknik ayrıntılar aşağıdaki resmi belgelerle kontrol edildi. Menüler ve varsayılanlar sürümden sürüme değişir; şüphede kalırsan resmi sayfa esastır.
- Capacitor: CLI build command
- Capacitor: Setting the target SDK
- Capacitor: Deploying to Google Play
- Android Developers: Sign your app
- Android Developers: Target API level requirements
- Capacitor: Configuration (android options, server options)
- Capacitor: Debugging (chrome://inspect)
- Play Policy: Device and Network Abuse
- Play Console Help: App testing requirements for new personal developer accounts
- Play Console Help: Set up an open, closed, or internal test
- Play Console Help: Deobfuscate or symbolicate crash stack traces
12 test edici kuralında yeni misin?
Genel rehber Google'ın şartını, bir TestBunny kampanyasının gün gün nasıl ilerlediğini ve neyi garanti edip edemediğimizi anlatır.
Genel rehberi oku