M.AIM.AISoloLabsAtlas — AI Dünyası

Play Store Rehberi: Kurumsal Hesaptan İlk Yayına — Atlas

Bu rehberin sonunda: kurumsal geliştirici hesabını doğru kimlikle açar, yükleme öncesi 9 varlığı eksiksiz hazırlar, 11 beyan görevini uygulamanın GERÇEK davranışına göre cevaplar ve dahili testten üretime giden yolu bir gecede üç uygulama yüklemiş birinin tuzak haritasıyla yürürsün.

📅 Son tarama: 6 Eylül 2026. Play Console ekran adları, zorunlu hedef API düzeyi ve form soruları her yıl değişir; sondaki istemle tazele.

Bu dosyanın rolü: sanal-pos ürününe para almanı, burası ürününü telefonlara dağıtmanı anlatır — ikisi de "işletme tarafı" ailesindendir. Eylül 2026'da SoloLabs'ın kurumsal hesap açılışı ve bir gecede üç uygulamanın dahili teste yüklenmesinden damıtıldı; yaşanan redler 7. bölümde GERÇEK VAKA olarak durur. Web uygulamasını pakete çevirme (TWA/Capacitor) bu rehberin konusu değil — burası paketin hazır olduğu andan yayına kadar olan bölümdür; paketi derleyen zincirin (JDK/Gradle/AGP) ne olduğu ve Play'in ondan ne istediği ise 9. bölümde.

Kapsam: Google Play + kurumsal ("Kuruluş") hesap + dahili test → üretim. Bilinçli sınır: iOS. App Store yolu ayrı bir dünyadır (Mac ya da bulut derleme, TestFlight, App Review itirazları); bu vakada da ayrı koldan yürüdü ve kendi rehberini hak ediyor.


1 · Hesap kararı: bireysel mi, kuruluş mu?

Play Console'da iki hesap türü var ve fark kozmetik değil:

Bireysel Kuruluş
Ücret 25 USD tek sefer 25 USD tek sefer
Yeni uygulamada zorunlu test 🔴 12 test kullanıcısı, 14 gün kesintisiz — sonra üretim başvurusu Bu kural YOK
Görünen kimlik kişisel ad + ev adresi riski şirket unvanı
Şart kimlik doğrulama D-U-N-S numarası + şirket evrakı

Şirketin varsa kuruluş hesabı net kazançtır: 12 kişilik test seferberliği kuralı atlanır ve mağazada kişisel adresin değil şirketin görünür.

Kuruluş hesabının yapı taşları (Google'ın resmi listesi — kaynaklar bölümünde):

  1. D-U-N-S numarası. Dun & Bradstreet'in şirket kimliği; ülkendeki yerel D&B temsilcisinden ücretsiz alınır (Türkiye'de başvuru formu + vergi levhası yetti; ~5 iş günü). Aynı numara Apple Developer kaydında da kullanılır — bir kez al, iki mağazada kullan.
  2. Google Payments profili = yasal kimliğin tek kaynağı. Profil türünü "İşletme" seç; buraya yazdığın yasal ad ve adres Play'in şirketi tanıdığı kimliktir ve sonradan değiştirmek çok zordur. "Bireysel" seçersen kuruluş doğrulaması takılır.
  3. Unvan, D&B kaydıyla BİREBİR. "Ltd. Şti." kısaltması, marka adının tek başına yazılması ya da büyük/küçük harf oynaması eşleşmeyi bozar. D&B'de nasıl kayıtlıysa öyle yaz.
  4. Giriş hesabı stratejisi. Hesabı açan Google kimliği "sahip" olur ve sahip hesabı kapatılamaz/kolayca devredilemez. Kişisel Gmail'inle değil, şirket alan adına bağlı kalıcı bir kimlikle aç; kişisel hesabını sonradan "Yönetici" olarak davet et (kilitlenmeye karşı yedek).
  5. Evrak dosyası hazır dursun: ticaret sicil gazetesi, vergi levhası, imza yetkisi belgesi, yetkilinin kimliği. Google çoğu zaman D-U-N-S ile yetinir; isterse aynı gün yükleyebilmek doğrulamayı günler kısaltır.

Zamanlama tuzağı: yeni alınmış D-U-N-S, D&B veri tabanına ~5 iş günü sonra yansır. Numara elindeyken form "bulunamadı" diyebilir — yeni talep AÇMA (mükerrer kayıt olur), birkaç gün sonra tekrar dene.

🪞 Denetim penceresi: Hesap açılışını ajana anlattırıyorsan tek soru sor: "Payments profiline hangi türü ve hangi unvanı yazacağız, neden?" — "İşletme + D&B'deki birebir yazım" diyemiyorsa doğrulama duvarına toslamak üzeresin demektir.

2 · Yüklemeden önce: masaya konacak 9 varlık

Yükleme günü Play Console'da geçirdiğin her dakika, bu tablo eksikse iki dakikaya dönüşür. Önce hepsini hazırla, sonra Console'u aç:

Varlık Şart Sık yapılan hata
AAB (APK değil) imzalı; hedef SDK, Play'in o yılki zorunlu düzeyinde (Eyl 2026: 36) eski targetSdk ile derleme → yükleme reddi (7. bölümdeki vaka)
versionCode her yükleme denemesinde +1; denenmiş kod tekrar kullanılamaz — reddedilse bile tükenir reddedilen paketi düzeltip aynı kodla tekrar yüklemeye çalışmak
Yükleme anahtarı (keystore) repo DIŞI klasör + parola kaydı + yedek yedeksiz keystore; Play App Signing kaybı yumuşatır ama anahtar sıfırlama günler süren destek sürecidir
Uygulama simgesi 512×512 PNG, şeffaflık yok, tam kare (yuvarlatmayı Play yapar) şeffaf arka planlı ya da önceden yuvarlatılmış ikon
Özellik grafiği 1024×500, şeffaflık yok unutulur; mağaza girişi kaydedilemez
Telefon ekranları en az 2 (tanıtım için 4+); uzun kenar ≤ 2 × kısa kenar 1080×2400 (telefonun doğal ekranı!) REDDEDİLİR → 1080×1920 çerçevele
Metinler ad ≤30 · kısa açıklama ≤80 · tam açıklama ≤4000 · sürüm notu sınırlar Console'da kesilerek öğrenilir
Gizlilik + hesap silme URL'leri ikisi de CANLI sayfa; silme sayfasında adımlar + silinen/saklanan veri + süreler gizlilik sayfası var, hesap silme sayfası yok (veri güvenliği formu zorunlu istiyor)
İnceleme hesabı incelemeci senin posta kutuna erişemez → sabit kodlu gerçek hesap ya da demo düğmesi "e-postana kod gelir" akışını olduğu gibi bırakmak — incelemeci giremez, red gelir

İki varlık daha, iki özel duruma:

  • Veri beyanı tek kaynak dosyası: Play'in veri güvenliği formu ile Apple'ın gizlilik etiketi AYNI sorulara bakar. Cevapları tek bir dosyada tut, iki formu da oradan doldur — iki mağazada çelişen beyan, incelemede red sebebidir.
  • assetlinks.json (TWA ve App Links kullanıyorsan): /.well-known/assetlinks.json 200 dönmeli; yükleme sertifikasının parmak izi baştan, Play'in imzalama sertifikası yükleme SONRASI eklenir (6. bölüm).

3 · Uygulama oluşturma: geri dönüşü olmayan üç karar

"Uygulama oluştur" ekranı 30 saniyede geçilir ama üç alanı bir daha değiştiremezsin:

  1. Paket adı (com.sirket.urun): AAB'deki applicationId ile birebir; sonsuza dek sabit. Alan adı sahipliğinle uyumlu, ters-alan-adı düzeninde seç.
  2. Ücretsiz/Ücretli: ücretsiz yayınlanan uygulama ücretliye çevrilemez (uygulama içi satın alma ayrı konudur ve sonradan eklenebilir). Şüphedeysen ücretsiz + IAP planla.
  3. Varsayılan dil: mağaza girişinin ana dili; sonradan dil eklenir ama varsayılan zemin budur.

Aynı ekranda Play Uygulama İmzalama onayı var — kabul et: uygulama imzalama anahtarını Google tutar, sendeki yalnız yükleme anahtarı olur; keystore kaybı ölümcül olmaktan çıkar.

4 · Beyan turu: 11 görev, tek ilke

Uygulama oluşunca kontrol paneli "Uygulamanızla ilgili bilgi verin" başlığında bir görev listesi açar. Tek ilke hepsini yönetir: beyanı hafızandan değil, uygulamanın gerçek davranışından yaz. Pazarlama iyimserliği burada red üretir; eksik beyan sonradan tespit edilirse yayından kaldırma üretir.

# Görev Strateji
1 Gizlilik politikası canlı URL
2 Oturum açma bilgileri giriş varsa incelemeciye çalışan yol ver (aşağıda)
3 Reklam reklam SDK'sı yoksa Hayır
4 İçerik derecelendirme (IARC) anket; kritik soru "kullanıcı etkileşimi" (aşağıda)
5 Hedef kitle çocuklara yönelik değilse yalnız 18+ işaretle — çocuk politikası soruları hiç açılmaz
6 Veri güvenliği 5 adımlı form (aşağıda)
7 Resmi kurum uygulaması değilsen Hayır
8 Finansla ilgili özellikler ürünü SEN sunmuyorsan "hiçbirini sağlamıyor" (aşağıda)
9 Sağlık uygulamaları listeden gerçek işleve uyan; yoksa "sağlık özelliği yok"
10 Reklam kimliği beyanı manifest grep'iyle doğrula (aşağıda)
11 Kategori + iletişim kategori, etiketler (Google'ın sabit listesinden ≤5), destek e-postası

Oturum açma bilgileri (eski adı "uygulama erişimi"). İncelemeci senin e-posta kutuna gelen doğrulama kodunu göremez; "e-postana kod gelir" akışı incelemeci için kapalı kapıdır. İki çözüm: uygulamaya kayıtsız gezilebilen bir demo yolu koy, ya da üretimde sabit kodla giren gerçek bir inceleme hesabı aç. Talimat alanı ≤500 karakter ve İngilizce yazılır ("fixed code login", "no in-app purchases" gibi kaygı gideren cümleler dahil). 🔴 İnceleme hesabının kodu bir secret'tır: env'de yaşar, repoya ve dokümana yazılmaz.

IARC anketi. Şiddet/cinsellik/dil/madde blokları çoğu iş uygulamasında düz "Hayır"dır; anketin gerçek çatalı "kullanıcılar birbiriyle etkileşiyor mu?" sorusudur. Uygulamada mesajlaşma varsa Evet demek zorundasın ve alt sorular açılır: engelleme özelliği var mı, bildirme (report) var mı, sohbet denetleniyor mu. Engelleme ve bildirme özelliğin YOKSA anketten önce onları yap — "Evet etkileşim var, hayır engelleme yok" beyanı derecelendirmeyi ağırlaştırır. Sonuç etiketi (PEGI 3 vb.) etkileşim varsa "Kullanıcı etkileşimi" notu taşır; bu normaldir.

Veri güvenliği: 5 adımlı form. En uzun görev ve en çok yalan söylenen yer. Kurallar:

  • Yalnız gerçekten toplananları işaretle — az beyan ihlal, fazla beyan mağaza kartında gereksiz korkutucu etiket demektir. Formu doldurmadan önce kod tabanında envanter çıkar (bölüm sonundaki istem).
  • Saymayanları bil: tarayıcının cihaz-üstü ses tanıması (SpeechRecognition) "ses verisi toplama" sayılmaz · barındırma/e-posta/AI sağlayıcına ("hizmet sağlayıcı") aktarım "paylaşım" sayılmaz · üçüncü taraf girişleri her zaman sandığın veriyi vermez (ör. Telegram girişi telefon numarası VERMEZ).
  • Hesap silme URL'si zorunlu ve gizlilik sayfası değil, adımları anlatan ayrı bir sayfa ister.
  • Hesap oluşturma yönteminde şifre yoksa (kodla giriş), "kullanıcı adı ve şifre"yi İŞARETLEME — "diğer kimlik doğrulama yöntemleri" seçeneği bunun için var.
  • Çok uygulaman varsa: formun "CSV'ye aktar / CSV'den içe aktar" düğmesi vardır. İlk uygulamanın formunu dikkatle doldur, CSV'yi indir, sonrakilere uyarlayıp içe aktar — hem hız hem tutarlılık.

Kategori ≠ beyan (aktör rolü dersi). Finans kategorisindeki bir bütçe uygulaması, finans beyanında "hiçbir finansal ürün sağlamıyorum" der — çünkü harcama takibi finansal ÜRÜN (kredi, ödeme, sigorta…) sunmak değildir; o liste ürünü bizzat sunanlar içindir. Buna karşılık hastane nöbet çizelgesi uygulaması sağlık beyanında "sağlık hizmetleri ve yönetimi"ni işaretler — hasta verisi tutmasa da sağlık OPERASYONU yönetir. İkisi de aynı soruya bakıp zıt cevap verir ve ikisi de doğrudur: soru "hangi sektördesin" değil, "bu düzenlenmiş işlevi bizzat sağlıyor musun" sorusudur.

Reklam kimliği beyanı hafızaya değil kanıta dayanır: derlenmiş (birleşik) manifestte AD_ID iznini grep'le. Bazı SDK'lar bu izni sen istemeden getirir; "reklam yok" derken manifestinde izin durursa beyan çelişkisi doğar.

Aynı sorular, üç arketip (Eylül 2026'da yüklenen üç gerçek uygulamanın anonim özeti):

Soru Bütçe uygulaması Nöbet çizelgesi Pazaryeri
Kategori Finans Tıp Seyahat ve Yerel
Finans beyanı hiçbiri (takip ≠ ürün) hiçbiri hiçbiri — ödeme aracılığı canlıya alınınca GÜNCELLENECEK
Sağlık beyanı yok Sağlık hizmetleri ve yönetimi yok
IARC etkileşim Hayır Hayır Evet (mesajlaşma → engelleme/bildirme alt soruları)
Veri türleri + finansal bilgiler (kullanıcı beyanlı) çekirdek kimlik alanları + telefon, mesajlar, fotoğraf, kullanıcı içeriği
Oturum açma demo düğmesi sabit kodlu inceleme hesabı sabit kodlu inceleme hesabı

5 · Mağaza girişi: vitrin + iki az bilinen kural

Metinler (ad/kısa/tam), simge, özellik grafiği ve ekranlar buraya girer. İki kural gözden kaçar:

  • Yapay zekâyla üretilmiş öğe beyanı: logo ya da özellik grafiği AI ile üretildiyse "etiketle" denir; uygulamanın GERÇEK ekran görüntüleri AI-destekli bir üründen alınmış olsa bile etiketlenmez — beyan görselin üretim biçimine bakar, uygulamanın içeriğine değil.
  • Özel mağaza girişleri = segment pazarlaması: varsayılan girişin yanında uygulama başına 50'ye kadar özel giriş açabilirsin; her biri kendine ait URL alır. Aynı uygulamayı restoran sahibine başka, turiste başka ekranlar ve metinle anlatıp her segmente kendi linkini vermek, reklam kampanyası kurmadan yapılabilen en ucuz hedeflemedir.

Tek dilde yayınlıyorsan "yapay zekâ ile çeviri" kutusunu kapat — yarı makine çevirisi bir mağaza kartı, hiç olmamasından kötü görünür.

6 · Dahili test → üretim

  1. Test kullanıcı listesi: e-posta listesi oluştur (≤100 Google hesabı) + geri bildirim adresi.
  2. AAB'yi yükle: tabloda versionCode ve hedef SDK'yı GÖR — beklediğin değilse yanlış paketi yüklüyorsun demektir.
  3. Sürüm notu biçim şart koşar: notun tamamı dil etiketinin İÇİNE yazılır:
    <tr-TR>
    İlk sürüm — …
    </tr-TR>
    
    Etiket dışına yazılan not kırmızı uyarı üretir.
  4. "Önizle ve onayla" ekranını okumayı bil: kırmızı hata = düzeltmeden yayınlayamazsın (ör. eski hedef API); sarı uyarı her zaman engel değildir (ör. R8 eşleme dosyası uyarısı bilinçli olarak yok sayılabilir). Renk, "dur" ile "not aldım" farkıdır.
  5. Katılma bağlantısı: sürüm "kullanılabilir" olunca test kullanıcıları sekmesinden kopyalanır; tester bağlantıyı Chrome'da, test listesindeki Google hesabıyla açar → "Test kullanıcısı ol" → Play'den indirir. Play'e doğrudan gidince sayfa boş görünür — bu bir hata değil, katılım akışıdır. İlk yayılma 5-15 dakika sürer; uygulama adı incelemeden geçene dek "(unreviewed)" görünür.
  6. Yükleme sonrası — App Links/TWA kullanıyorsan ŞART: Console → Uygulama imzalama ekranından Play'in imzalama sertifikası SHA-256'larını al (klasik + kuantum ikisi birden) → assetlinks.json'a yükleme sertifikasının YANINA ekle → siteyi deploy et → cihazda bağlantı doğrulamasını kontrol et. Bu adım atlanırsa TWA'da adres çubuğu kalır, derin bağlantılar tarayıcıya düşer.
  7. Üretime geçiş: dahili testte sorun yoksa "Sürümü yükselt → Üretim" — paketi yeniden YÜKLEMEZSİN, aynı sürüm kanal değiştirir. Ülkeleri seç, incelemeye gönder; ilk inceleme tipik 1-3 gün, finans/sağlık kategorilerinde uzayabilir.

7 · ⚠ GERÇEK VAKA: bir gecede üç uygulama, üç engel (3 Eylül 2026)

Senaryo: Kurumsal hesap onayı geldi; aynı gece üç uygulama dahili teste yüklenecek. Paketler haftalar önce derlenmiş, "hazır" kabul ediliyor.

Teşhis — üç ayrı engel, üçü de yükleme ANINDA çıktı:

# Engel Kök neden
1 AAB yükleme reddi: hedef API çok düşük paketler hedef SDK 35 ile derlenmişti; Play o yıl için 36 istiyor — "hazır paket" zamanla bayatlamıştı
2 Ekran görüntüleri reddi 1080×2400 — telefonun DOĞAL çözünürlüğü — 2:1 oran kuralını aşıyor
3 Sürüm notunda kırmızı uyarı not <tr-TR> etiketlerinin dışına yazılmıştı

Çözüm: paketler hedef SDK 36 ile yeniden derlendi ve versionCode artırıldı — reddedilen yüklemenin kodu da tükenmişti, aynı kod ikinci kez kabul edilmez. Ekranlar 1080×1920 çerçeveye alındı; sürüm notu etiket içine taşındı. Üç uygulama da aynı gece dahili teste çıktı.

Kalıcı dersler:

  1. "Hazır paket" tarihli bir iddiadır. Play'in zorunlu hedef API'si her yıl yükselir; yükleme gününde derleme tarihine değil, o günkü şarta bak.
  2. versionCode bir kaynaktır, harcanır. Reddedilen deneme bile kodu tüketir; sürüm planını "deneme başına +1" diye kur, "yayın başına +1" diye değil.
  3. Görsel kuralını üretim aracı bilmez. Telefonun kendi ekran görüntüsü bile mağaza kuralına uymayabilir; varlıkları tabloya (2. bölüm) göre denetle, "telefondan aldım, doğrudur" deme.
  4. Kırmızı/sarı ayrımını öğren: aynı ekranda hem düzeltmeden geçilmeyen hata hem yok sayılabilir uyarı vardır; ikisini aynı kefeye koyan ya gereksiz oyalanır ya gerçek engeli görmez.

Hızlı sınav: AAB'in reddedildi, sorunu düzelttin, aynı versionCode ile tekrar yüklüyorsun. Ne olur? (a) kabul edilir (b) "bu kod zaten kullanıldı" reddi (c) eski paketin üstüne yazar (d) yeni inceleme açılır. (b — denenmiş versionCode reddedilse bile tükenir; +1 ile derle.)

8 · ⚠ GERÇEK VAKA: iki gün süren adres çubuğu (5 Eylül 2026)

Senaryo: İki TWA uygulaması (aynı şirket, aynı araç zinciri) Play'e yüklendi. Açılıyorlar, site geliyor — ama üstte adres çubuğu duruyor. Üçüncü uygulama sorunsuz. Doğal ilk çıkarım: "cihaz sağlam, demek ki bu ikisinin ayarı bozuk."

Belirtinin kendisi teşhisin yarısıdır: sol üstte ×, sağda paylaş + olan çubuk, TWA değil Chrome Custom Tab'dır. Doğrulama başarısız olunca kütüphane sessizce ona düşer. Yani "TWA çalışmıyor" değil, "TWA hiç başlamadı" durumundasın.

Teşhis — sırayla elendi:

# Şüpheli Nasıl bakıldı Sonuç
1 Sunucu dosyayı vermiyor Google'ın kendi API'si statements:list ile okundu ✅ okuyor
2 Yanlış içerik tipi / yönlendirme curl -I → 200 + application/json ✅ temiz
3 Paket beyanı hatalı merged manifest'te asset_statements application düzeyinde, doğru alan adı ✅ temiz
4 Tarayıcı sağlayıcısı Chrome varsayılan; silinip yeniden kuruldu ✅ elendi
5 Doğrulama önbelleği versionCode+1 yüklendi ve Chrome verisi sıfırlandı ✅ elendi
6 İmza eşleşmesi Play Console'un ürettiği JSON bloğu okundu 🔴 SEBEP

assetlinks.json'daki parmak izi, Play'in gerçekte imzaladığı sertifikaya ait değildi. Chrome her açılışta kurulu paketin imzasını listede arıyor, bulamıyor, Custom Tab'a düşüyordu.

Kök neden: Play Console'un imzalama ekranında iki sertifika yan yana durur — "uygulama imzalama anahtarı" (Play kullanıcıya bununla imzalar, dosyaya bu girer) ve "yükleme anahtarı" (senin keystore'un). İkisi de SHA-256, ikisi de aynı formatta. Yanlışı kopyalandı — ve iki uygulamada birden, çünkü ikisi aynı oturumda, aynı ekrandan alınmıştı.

Çözüm: Console'un aynı sayfada ürettiği hazır "Digital Asset Links JSON" bloğu olduğu gibi kopyalandı. Doğrulanmamış parmak izleri dosyadan çıkarıldı; yükleme anahtarı (yandan yüklenen yerel derlemeler için) keytool -printcert -jarfile ile teyit edilip bırakıldı.

Kalıcı dersler:

  1. Parmak izini ELLE OKUMA. Console hazır JSON bloğu üretiyor; kopyala. Elle SHA-256 okumak bu hatanın tek kaynağıdır — ve iki sertifika yan yana durduğu için yanılma oranı yüksektir.
  2. Bu hata hiçbir yerde log vermez. Derleme başarılı, yükleme başarılı, uygulama açılıyor, site çalışıyor. Sessiz hataların teşhisi belirtiye bakmakla başlar (× = Custom Tab).
  3. "Çalışan üçüncü uygulama" kontrol grubu olmayabilir. Bizimki Capacitor'dı: kendi WebView'ını açar, doğrulama adımı yoktur, o hataya sahip olamaz. "Onda yok, bunda var → cihaz sağlam" çıkarımı bizi iki gün yanlış yere baktırdı.
  4. Asıl ipucu desendeydi: iki bağımsız uygulama aynı anda bozuksa, ortak faktör uygulama değil süreçtir — ikisinin de değeri aynı oturumda, aynı yanlış ekrandan girilmişti.
  5. Eleme sırasını tersten kur. 1-5 temizse sebep kesinlikle 6'dır. Şüphe uyandığı anda en pahalı kontrolü (imza) sona bırakma.

Hızlı sınav: TWA açılıyor ama adres çubuğu var. assetlinks.json canlıda 200 dönüyor, manifest doğru, Chrome güncel ve önbellek temiz. Sıradaki adım ne? (a) versionCode artır (b) Capacitor'a geç (c) Play Console'un ürettiği Digital Asset Links bloğunu dosyayla karşılaştır (d) alan adını değiştir. (c — diğer halkalar elendiyse geriye imza eşleşmezliği kalır.)

9 · Derleme zinciri: JDK · Gradle · AGP — ve ⚠ GERÇEK VAKA: AGP 9'a geçiş (6 Eylül 2026)

Play Console'un "Sürüm kontrol paneli" bir gün şunu der: "Android Gradle eklentisi 9.0+ kullanın." Bu cümleyi anlamak için üç parçayı ayırmak gerekir; çoğu "derleme hatası" üçünün birbirine karışmasından çıkar.

Üç parça, üç ayrı sürüm:

Parça Ne yapar Benzetme Bizde
JDK (Java) Kodu çalıştıran motor; Gradle'ın kendisi Java'da yazılmıştır Fabrikanın elektriği 21
Gradle Genel amaçlı yapı sistemi: "şu dosyaları al, şu sırayla derle, paketle" tarifini okur ve uygular. Android'e dair hiçbir şey bilmez Fabrika binası 9.7.1
AGP (Android Gradle Plugin) Gradle'a takılan Android eklentisi. Android'e özgü her şey: kaynakları (ikon, string) birleştirmek, manifest'i işlemek, R8 ile kodu küçültmek, APK/AAB paketlemek, imzalamak Binaya kurulan Android üretim hattı 9.4.0

build.gradle dosyası hattın tarifidir; Bubblewrap ya da Capacitor onu senin yerine yazar. Play'in "AGP'nizi güncelleyin" demesi "üretim hattını yenileyin" demektir: yeni AGP = yeni R8 = daha küçük, daha hızlı uygulama + yeni Android sürümleriyle uyum.

Kural: üçü uyumlu olmak zorunda. AGP 9 Gradle 9 ister, Gradle 9 JDK 17+ ister. Bu yüzden "AGP'yi yükselt" tek satır değildir; Gradle da yükselir, o da tarifin eski satırlarını kırar. Sürümleri tahmin etme, oku: AGP listesi Google'ın Maven deposunda (maven-metadata.xml), Gradle'ın güncel sürümü services.gradle.org/versions/current. Kararlı olanı seç (-alpha, -rc değil).

Senaryo: Play, bir TWA uygulamasına dört uyarı verdi; biri "AGP 9.0+". Aynı gece Capacitor kabuğundaki kardeş uygulamada aynı geçiş Kotlin eklentisi çakışması yüzünden takılmıştı (upstream eklenti güncellemesi bekliyor). TWA'da Kotlin yok, saf Java: denemeye değer. Hedef: AGP 8.9.1 → 9.4.0, Gradle 8.11.1 → 9.7.1.

Teşhis — dört kırılma, sırayla:

# Hata Sebep Düzeltme
1 jcenter() diye metot yok JCenter deposu 2021'de kapandı; Gradle 9 metodu kaldırdı. Şablon hâlâ yazıyor mavenCentral() (iki yerde: buildscript + allprojects)
2 rootProject.buildDir yok Gradle 9'da kaldırıldı rootProject.layout.buildDirectory
3 defaultConfig contains custom resource values, but the feature is disabled AGP 9, resValues özelliğini varsayılan kapattı; TWA şablonu resValue ile 10+ kaynak üretir (uygulama adı, açılış URL'si…) android { buildFeatures { resValues = true } }
4 Eski DSL adları compileSdkVersion, lintOptions AGP 9'da yok compileSdk, lint {}

Artı bir uyarı: Gradle 9, boşluklu atamayı (shrinkResources true) Gradle 10'da kaldıracağını söyledi. Madem oradasın = yap (shrinkResources = true); bir sonraki büyük sürümde yine kırılmasın.

Kök neden: Hiçbiri "hata" değil, varsayılan değişikliği. Şablon 2019'da yazılmış, araç zinciri 2026'da; eski tarif yeni fabrikada okunmaz. Üçüncü madde en sinsisi: derleme geçseydi bile uygulama hangi URL'yi açacağını bilemezdi, çünkü kaynak değerleri hiç üretilmemiş olurdu.

Çözüm sırası: yedek al (klasör git değilse yapılandırma dosyalarını _agp8_backup/ altına kopyala) → sürümleri oku → tarifi güncelle → derle → sonucu metinden oku (BUILD SUCCESSFUL; | tail çıkış kodunu yutar) → imzala, jar verified → emülatörde bir önceki sürümün üstüne kur (yükseltme yolu) → logcat'te zincir: Using url from Manifest (kaynak değerleri geldi) → Launching Trusted Web ActivityDelegationService. Sonuç: 2 dk 26 sn, sıfır deprecation, paket 13 KB küçüldü.

Kalıcı dersler:

  1. Kabuk tipi geçişin kaderini belirler. Saf TWA (Java) bir saatte geçti; Capacitor (Kotlin eklentileri) upstream'e takıldı. "AGP 9'a geçelim" demeden önce kotlin-android var mı bak.
  2. Şablon üreticisini bir daha ÇALIŞTIRMA. bubblewrap update tarifi sıfırdan üretir; elle yaptığın her düzeltmeyi (release bloğu, buildFeatures, = atamaları) siler. Sürüm artışı elle: versionCode/versionName + twa-manifest.json.
  3. "Derlendi" ≠ "açılıyor". R8 ve shrink bir TWA'yı sessizce bozabilir; emülatörde kur, logcat'te zinciri gör. Emülatörde adres çubuğu ÇIKAR ve bu kusur değildir: emülatör Google'ın doğrulama servisine ulaşamaz (DEADLINE_EXCEEDED). Nihai kapı gerçek cihaz, Dahili test kanalı.
  4. Kanıtlı paketi ezme. Yeni derleme bir üst versionCode ile ayrı dosyaya; eski paket geri-dönüş yolu. İncelemedeki sürümün üstüne yenisini koymak sayacı sıfırlar; önce o yayınlansın.
  5. Uyarıyı kapatmayan yükseltme de olur. Aynı gece "eski API" uyarısı için TWA kütüphanesi 2.6.2 → 2.7.3'e çekildi; kütüphanenin sınıf dosyaları okununca aynı API'yi hâlâ çağırdığı görüldü. Uyarı kütüphane-içi ve kalıcı. "Güncelledik, geçmiştir" demeden ölç.

Hızlı sınav: ./gradlew bundleRelease şu hatayı verdi: "defaultConfig contains custom resource values, but the feature is disabled." Ne oldu? (a) keystore bozuk (b) AGP 9 resValues özelliğini varsayılan kapattı, buildFeatures { resValues = true } gerek (c) Gradle çok yeni, sürüm düşür (d) twa-manifest.json silinmiş. (b — "feature is disabled" ifadesi bir varsayılan değişikliğine işaret eder; sürüm düşürmek yamadır, çözüm değil.)

Sıfırdan yayına kontrol listesi

  • Hesap türü kararı: şirket varsa Kuruluş (D-U-N-S alındı, ~5 iş günü yansıma payı bırakıldı)
  • Payments profili "İşletme" + D&B ile birebir unvan; giriş hesabı şirket kimliği + yedek yönetici
    1. bölümdeki 9 varlık masada; keystore repo dışında ve YEDEKLİ
  • AAB hedef SDK'sı Play'in BUGÜNKÜ zorunlu düzeyinde; versionCode planı deneme-başına-+1
  • Ekranlar 2:1 kuralına uygun (1080×1920 güvenli); ikon şeffafsız tam kare
  • Gizlilik + hesap silme sayfaları canlı; veri beyanı tek kaynak dosyada
  • İnceleme hesabı/demo yolu çalışıyor; kod env'de, repoda DEĞİL
  • Paket adı ve ücretsiz/ücretli kararı bilinçli (ikisi de geri dönüşsüz)
  • 11 görev uygulamanın gerçek davranışıyla cevaplandı; IARC öncesi engelleme/bildirme özellikleri var
  • Reklam kimliği beyanı manifest grep'iyle doğrulandı
  • Sürüm notu dil etiketi içinde; "önizle ve onayla"da kırmızı yok
  • Dahili testte cihazda kuruldu; TWA/App Links varsa assetlinks.json Console'un ürettiği JSON bloğundan kopyalandı (elle SHA-256 okunmadı — 8. bölüm) ve cihazda adres çubuğu YOK
  • Üretime "Sürümü yükselt" ile geçildi; inceleme süresi (1-3 gün+) planda

Kopyalanabilir istemler

Varlık denetimi (yüklemeden önce):

Şu repo Google Play'e yüklenecek: [yol]. Denetle: (1) AAB'nin targetSdk'sı ve versionCode'u nedir,
Play'in bu yılki zorunlu hedef API düzeyiyle kıyasla; (2) keystore repo dışında mı, parolası ve
yedeği kayıtlı mı; (3) ikon 512×512 şeffafsız kare mi, ekran görüntüleri uzun kenar ≤ 2×kısa kenar
kuralına uyuyor mu; (4) gizlilik VE hesap silme URL'leri canlı mı (curl ile bak); (5) mağaza
metinleri 30/80/4000 sınırlarında mı. Eksikleri tablo hâlinde ver, hiçbirini varsayma.

Veri güvenliği envanteri (formdan önce):

Kod tabanını tara ve Play veri güvenliği formu için envanter çıkar: hangi kullanıcı verileri
GERÇEKTEN toplanıyor (alan alan, kanıt dosya yoluyla), hangileri üçüncü tarafa gidiyor ve bu
taraf "hizmet sağlayıcı" mı yoksa "paylaşım" mı sayılır, cihaz üstünde kalıp beyana girmeyenler
hangileri? Birleşik Android manifestinde AD_ID iznini grep'le. Sonucu formun 5 adımına eşlenmiş
tablo olarak ver; emin olamadığını "teyitsiz" işaretle, iyimser tahmin yazma.

Beyan cevap provası (11 görev):

Uygulamam şunu yapıyor: [1-2 cümle işlev + giriş yöntemi + mesajlaşma var/yok + kategori].
Play'in 11 beyan görevini sırayla sor bana; her cevabımda "bu cevap uygulamanın gerçek davranışıyla
tutarlı mı, hangi alt soruları açar, hangi kanıt istenebilir" diye itiraz et. Özellikle: kategori ile
finans/sağlık beyanının AYRI sorular olduğunu, IARC etkileşim sorusunun engelleme/bildirme özelliği
gerektirdiğini ve inceleme hesabı talimatının İngilizce ≤500 karakter olduğunu denetle.

Kaynaklar

(Ekran ve görev adları Play Console'un Eylül 2026 Türkçe arayüzünden; Google bu adları sık değiştirir — akışın mantığı kalıcı, etiketler değişkendir.)

🔄 Bu rehberi güncelleme istemi

play-store.md dosyasını tazele: (1) Play'in zorunlu hedef API düzeyi hâlâ 36 mı — target API level
yardım sayfasından teyit et, değiştiyse tabloyu ve GERÇEK VAKA bağlamını güncelle; (2) 11 beyan
görevinin adları/sayısı Console'da değişti mi; (3) bireysel hesaptaki 12 test kullanıcısı/14 gün
kuralı duruyor mu; (4) özel mağaza girişi limiti (50) ve AI-üretim beyanı kuralı aynı mı;
(5) yeni bir yükleme turunda yaşanmış tuzak varsa GERÇEK VAKA formatında ekle. (6) derleme zinciri: AGP ve Gradle'ın son kararlı sürümleri ile Play'in "AGP X+" önerisi değişti mi; 9. bölümdeki tabloyu ve kırılma listesini güncelle. Doğrulayamadığın
kalemi "teyitsiz" işaretle, tarih damgasını güncelle ve neyin değiştiğini tek satır yaz.