İçeriğe geç

Kurulum rehberleri · React Native

React Native uygulamaları için Google Play kapalı testi

Çıplak React Native ve React Native CLI projeleri için: yükleme anahtarı oluştur, Gradle ile imzalı paketi derle, kapalı test kanalını kur ve 12 test ediciyi 14 gün opt-in tut. EAS Build ile Expo mu kullanıyorsun? O zaman Expo rehberini oku.

Derleme
./gradlew bundleRelease
Sürüm kodu
android/app/build.gradle → versionCode
Hedef API
targetSdkVersion = 36

Sürüm paketini (app bundle) derle

React Native JavaScript kodunu native Android derlemesinin içine paketler; bu yüzden sürüm .aab dosyası Gradle'dan çıkar. Önce imzalamayı kur (sonraki bölüm), sonra:

  1. Paket adını kontrol et

    android/app/build.gradle içindeki applicationId, Google Play'e yükledikten sonra kalıcıdır. İstediğin değer olduğundan emin ol.

  2. Derle

    Proje kökünde npx react-native build-android --mode=release çalıştır ya da Gradle'ı aşağıdaki gibi doğrudan çağır. İkisi de bundleRelease görevini çalıştırır ve JavaScript'i uygulamaya paketler.

  3. Dosyayı bul

    Paket android/app/build/outputs/bundle/release/app-release.aab yoluna yazılır.

  4. Sürüm derlemesini test et

    Debug uygulamasını kaldır, ardından aşağıdaki ikinci komutla release varyantını gerçek bir cihaza yükle. Yalnız release'te görülen çökmeler Play Console'da değil, burada ortaya çıkar.

Terminal
cd android
./gradlew bundleRelease
Terminal
npm run android -- --mode="release"

gradle.properties içinde org.gradle.configureondemand=true ayarlama. Sürüm derlemesinin JavaScript ve varlıkları paketlemeyi atlamasına yol açabilir; test edicilere açılmayan bir uygulama gider.

Yükleme anahtarı ve Play Uygulama İmzalama

Google Play yeni uygulamalarda Play Uygulama İmzalama'yı zorunlu tutar: uygulama imzalama anahtarını Google saklar, sen yüklemeleri bir yükleme anahtarıyla imzalarsın. Anahtarı JDK ile gelen keytool ile oluştur:

Terminal
keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore \
  -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Dosyayı android/app/ klasörüne taşı ve bilgileri git'e hiç girmesinler diye ~/.gradle/gradle.properties dosyasına yaz:

~/.gradle/gradle.properties
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

Sonra android/app/build.gradle içine bir release imza yapılandırması ekle ve release derleme türünde kullan. Şablondaki release derleme türü sen bunu değiştirene kadar debug anahtarıyla imzalar:

android/app/build.gradle
android {
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
                storeFile file(MYAPP_UPLOAD_STORE_FILE)
                storePassword MYAPP_UPLOAD_STORE_PASSWORD
                keyAlias MYAPP_UPLOAD_KEY_ALIAS
                keyPassword MYAPP_UPLOAD_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            // ...
            signingConfig signingConfigs.release
        }
    }
}

Sürüm kodu ve hedef API düzeyi

Her yüklemenin versionCode değeri, daha önce yüklediğin her şeyden büyük olmalı. Çıplak projede bu değer android/app/build.gradle içindedir; versionName kullanıcıların gördüğü etikettir:

android/app/build.gradle
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. SDK düzeyleri android/build.gradle içindeki ext bloğunda durur (compileSdkVersion, targetSdkVersion). Yeni React Native sürümleri bunları yükseltir. Eski bir sürümdeysen yalnız targetSdkVersion'ı artırmak yerine React Native'i güncellemek genelde daha güvenlidir, çünkü native kitaplıklarının da uyumlu olması gerekir.

React Native tuzakları

  • Debug imzalı paket. Release derleme türünü signingConfigs.release'e geçirmeyi unutursan Play Console yüklemeyi debug imzalı diye reddeder.
  • R8/ProGuard sürprizleri. enableProguardInReleaseBuilds = true ile yansımaya (reflection) dayanan kitaplıklar yalnız release'te çökebilir. Koruma kurallarını android/app/proguard-rules.pro dosyasına ekle ve release derlemesini cihazda test et.
  • Okunamayan çökme kayıtları. Varsayılan motor Hermes önceden derlenmiş bytecode çalıştırır; release yığın izleri derlenmiş pakete işaret eder. Test edicilerin gönderdiklerini çözebilmek için yüklediğin her derlemenin source map'lerini sakla.
  • Uygulama Metro'yu arıyor. Geliştirme sunucusuna bağlanmaya çalışan bir release derlemesi, JavaScript'in paketlenmediği anlamına gelir. configureondemand ayarını kontrol et ve yeniden derle.
  • Native modüller ve 16 KB sayfalar. Native .so dosyası olan kitaplıklar 16 KB bellek sayfalarını desteklemeli. Play Console bunun için uyarır ve 1 Şubat 2027'den itibaren desteklemeyen güncellemeler yayınlanamaz. Test başlamadan güncelle.
  • Kayıp anahtar deposu. Anahtar deposunu ve şifrelerini yedekle. Play Console'dan yükleme anahtarı sıfırlaması isteyebilirsin ama bu, testin ortasında kaybetmek istemeyeceğin kadar zaman alır.

Test edicilerden gelen çökmeleri sembolize et

Release derlemesindeki bir JavaScript çökmesi sana p@1:132161 gibi bir Hermes bayt kodu konumu olarak gelir; bu tek başına hiçbir şey söylemez. React Native, Android release derlemeleri için kaynak haritalarını (source map) varsayılan olarak üretir; önemli olan, yüklediğin her paket için doğru haritayı saklamaktır.

  1. Kaynak haritasını arşivle

    Her release derlemesinden sonra haritayı android/app/build/generated/sourcemaps/react/release/ klasöründen kopyala ve sürüm koduyla etiketle. Harita, çöken derlemenin tam olarak aynı commit'iyle eşleşmeli: küçük kod değişiklikleri bile konumları kaydırır.

  2. metro-symbolicate çalıştır

    Test edicinin yığın izini bir dosyaya kaydet ya da doğrudan adb logcat çıktısından oku ve o haritayla metro-symbolicate aracından geçir. Araç bayt kodu konumlarını dosya adlarına, satırlara ve fonksiyon adlarına geri çevirir.

  3. Yerel satırlara Play Console'da bak

    Yerel modüllerin Java ya da Kotlin kodundaki çökmeler İzle ve iyileştir → Android vitals → Çökmeler ve ANR'ler altında görünür. R8 açıksa .aab içindeki eşleme dosyası bunları ek yükleme olmadan okunur hale getirir.

Terminal
# From a saved stack trace
npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map < stacktrace.txt

# From a connected device
adb logcat -d | npx metro-symbolicate android/app/build/generated/sourcemaps/react/release/index.android.bundle.map

metro-symbolicate çıktı vermeden hemen kapanıyorsa girdi almamıştır: izi terminale yazarak değil, bir pipe ya da yönlendirmeyle ver.

Kısaca Play Console: kapalı testten üretime

React Native 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ç, .aab dosyası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.

Play Console adımlarını aç

Test sırasında güncelleme yayınla

React Native'de: versionCode'u (ve versionName'i) artır, yeniden derle ve yeni paketi aynı kapalı test kanalına yükle.

Terminal
cd android
./gradlew bundleRelease

Release varyantını npm run android -- --mode="release" ile kurmadan önce debug uygulamasını kaldır; Android, başka bir anahtarla imzalanmış uygulamanın üzerine kurmaz. Bu kontrolü her yüklemeden önce tekrarla, çünkü eksik keep kuralları gibi yalnız release'e özgü sorunlar debug'da hiç görünmez.

Kablosuz (OTA) JavaScript güncellemeleri pek çok ekibin sorduğu gri bir alandır. Google Play'in Cihaz ve Ağ Kötüye Kullanımı politikasına göre bir uygulama kendini Google Play dışında güncelleyemez; ancak bu kısıtlama, JavaScript gibi bir sanal makinede ya da yorumlayıcıda çalışan kod için geçerli değildir. Yerel kod, yeni izinler ve yerel modüller her zaman Google Play üzerinden yeni bir paket gerektirir.

  • Ana yol kapalı test kanalı olsun. Kapalı test kanalındaki yeni bir versionCode, opt-in olmuş her test ediciye Google Play üzerinden ulaşır ve sürüm geçmişinde görünür.
  • Yerel bağımlılıklara dokunma. Test ortasında React Native'i ya da bir yerel modülü yükseltmek, düzelttiğin hatadan çok daha fazlasını değiştirir. Bunu testten önce ya da üretim erişiminden sonra yap.
  • Her sürüm için bir harita sakla. Her yeniden derleme yeni bir kaynak haritası üretir. Onu sürüm koduyla birlikte sakla; yoksa o sürümden gelen bir sonraki çökme raporu çözülemez.

Sık sorulan sorular

Google Play için Hermes gerekli mi?

Hayır, ama React Native'in varsayılan motoru ve çoğu uygulamanın kullandığı motor odur. JavaScript'i önceden bayt koduna derler; bu açılışı hızlandırır ve release yığın izlerinin okunmak için kaynak haritasına ihtiyaç duymasının da nedenidir.

Play Console'a hangi dosyayı yüklerim?

android/app/build/outputs/bundle/release/app-release.aab konumundaki paketi. npx react-native build-android --mode=release Gradle'ın bundleRelease görevini çalıştırır ve tüm JavaScript'ini pakete koyar.

targetSdk'yı yükselttikten sonra arayüzüm neden durum çubuğunun altına kayıyor?

Android 15'i (API düzeyi 35) ya da üstünü hedefleyen uygulamalar kenardan kenara çizilir. react-native-safe-area-context bunu zaten yönetir; kullanmıyorsan test ediciler görmeden önce her ekrana güvenli alan boşlukları ekle.

React Native 16 KB bellek sayfalarını destekliyor mu?

Evet, React Native 0.77'den beri. Daha eski sürümler ve kendi .so dosyalarını getiren yerel modüller desteklemeyebilir. Yükseltmeyi testin ortasında değil, test başlamadan önce yap.

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.

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

14 gün için 12 gerçek test ediciye mi ihtiyacın var?

Uygulamanı ve kapalı test bağlantını ekle, Starter (15 test edici) ya da Pro (25 test edici) planını seç, her test edicinin etkinliğini panelinde gün gün izle.

TestBunny'nin Google ile bir bağlantısı yoktur. Test ediciler nakit değil, kredi kazanır. Google'ın üretim erişimi kararını kimse garanti edemez, biz de etmeyiz.