Vibeloy
Kayıt Ol
Tüm yazılar

Blog

Android Keystore Nasıl Oluşturulur? (Adım Adım Rehber)

Yayınlanma: Güncelleme: 7 dk okuma

Android keystore nedir, neden gerekir?

Keystore, bir uygulamayı imzalamak için kullanılan özel/genel anahtar çiftini taşıyan şifreli bir dosyadır. Google Play, yüklediğiniz her AAB paketinin geçerli bir imzayla gelmesini zorunlu kılar; imzasız ya da hatalı imzalı bir paket Play Console tarafından yükleme aşamasında reddedilir.

Flutter ve Android Studio, yerel geliştirme için otomatik bir "debug keystore" üretir; bu anahtar sabit bir şifreyle gelir, yalnızca kendi cihazınızda test amaçlıdır ve hiçbir mağaza kabul etmez. Mağazaya yükleyeceğiniz paket için kendi ürettiğiniz bir "release" ya da "upload" keystore kullanmanız gerekir.

Aynı uygulamanın sonraki her güncellemesi aynı anahtarla (ya da Google'ın tanıdığı aynı imzalama zinciriyle) imzalanmalıdır; aksi halde Play Console güncellemeyi "farklı bir imzayla imzalanmış" gerekçesiyle reddeder ve kullanıcılar uygulamayı kaldırıp yeniden kurmak zorunda kalır. Bu yüzden keystore dosyanız, uygulamanızın kalıcı kimliğinin bir parçasıdır.

keytool ile keystore oluşturma

keytool, Java Development Kit (JDK) ile birlikte gelen bir komut satırı aracıdır; Flutter veya Android Studio kurulumunuz zaten bir JDK içerdiği için genelde ayrı bir kurulum gerekmez. Flutter'ın resmi dokümanında önerilen standart komut şudur: keytool -genkey -v -keystore upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload. Buradaki -storetype JKS bayrağı önemlidir: Java 9 ve sonrasında keytool'un varsayılan deposu PKCS12'dir; bu bayrak verilmezse dosya .jks uzantılı görünse de içeriği aslında PKCS12 olur.

-keyalg RSA -keysize 2048 anahtar algoritması ve uzunluğunu belirler, -validity 10000 anahtarın yaklaşık 27 yıl geçerli kalmasını sağlar, -alias upload ise anahtara verdiğiniz kısa addır ve key.properties dosyasında tekrar kullanılır. Komut çalıştığında sırasıyla bir depo (store) şifresi, bir anahtar (key) şifresi ve ad/organizasyon bilgileri sorulur.

macOS ve Linux'ta JDK PATH'e ekliyse keytool doğrudan terminalden çalışır. Windows'ta hangi JDK'nın kullanıldığından emin olmak için önce flutter doctor -v çalıştırın ve çıktıdaki "Java binary at:" satırındaki yolu bulun; keytool, o dizinin bin klasöründedir ("%JAVA_HOME%\bin\keytool" varsayımı, değişken ayarlı değilse ya da birden fazla JDK kuruluysa yanlış JDK'yı işaret edebilir). -keystore parametresindeki dosya yolunu kendi kullanıcı dizininize göre ayarlayın ve komutu çalıştırdığınız dizini not edin — bir sonraki adımda bu yola tekrar ihtiyacınız olacak.

key.properties ve Gradle'a bağlama

android/ dizininde key.properties adlı bir dosya oluşturun ve storePassword, keyPassword, keyAlias ile storeFile (keystore dosyanızın tam yolu) satırlarını ekleyin. Bu dosya düz metindir ve şifrelerinizi açık biçimde taşır; bu yüzden asla sürüm kontrolüne eklenmemelidir — .gitignore dosyanıza key.properties satırını eklemeyi ilk iş olarak yapın.

android/app/build.gradle.kts (güncel Kotlin DSL) içinde bu dosyayı okuyup bir signingConfigs.release bloğu tanımlarsınız; keyAlias, keyPassword, storeFile ve storePassword alanları key.properties'ten gelir. Ardından release build type'ında signingConfig = signingConfigs.getByName("release") atamasıyla üretilecek her release paketinin bu anahtarla imzalanması sağlanır.

R8/ProGuard küçültme (isMinifyEnabled=true) açıksa, imzalı release paketi mağazaya yüklemeden önce gerçek bir cihazda test edin; reflection kullanan bazı paketler küçültmeden etkilenip yalnızca release build'de çökebilir. Bu, imzalamanın kendisiyle ilgili değildir ama aynı adımda unutulan yaygın bir hatadır.

Play App Signing: upload key ile app signing key farkı

Google, 2021'den beri yeni uygulamalarda Play App Signing'i zorunlu kılıyor ve devre dışı bırakma seçeneği artık yok. Bu modelde iki farklı anahtar vardır: sizin keytool ile ürettiğiniz ve her AAB'yi imzaladığınız "upload key", ve Google'ın kendi güvenli altyapısında sakladığı, kullanıcılara dağıtılan paketi son kez imzalayan "app signing key". Siz hiçbir zaman app signing key'i görmez ya da elinizde tutmazsınız.

Upload key'inizi (dosyayı ya da şifrelerini) kaybederseniz ama Play App Signing kayıtlıysa çözüm var: Play Console'da Protected with Play > Play Store protection > Manage Play app signing yolunu izleyip "Upload Key Certificate" bölümünden "Request upload key reset" talebini açabilirsiniz. Süreç şöyle işler: önce keytool ile yeni bir upload keystore üretirsiniz, keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem komutuyla sertifikayı PEM biçiminde dışa aktarırsınız, ardından sıfırlama nedenini açıklayan bir not ile bu PEM dosyasını Play Console'a yüklersiniz. Google talebi inceleyip onayladıktan sonra yeni upload key etkin hale gelir; gerçek imzalama anahtarı hiç Google'ın elinden çıkmadığı için uygulamanızın mağaza kimliği, yorumları ve kurulum sayısı etkilenmez.

Play App Signing kaydınız yoksa — genelde bu zorunlu hale gelmeden önce yayınlanmış eski uygulamalarda görülür — ve tek anahtarınız olan signing key'i kaybederseniz geri dönüş yolu yoktur: o uygulamaya bir daha güncelleme yükleyemezsiniz. Tek seçenek yeni bir applicationId ile sıfırdan bir liste açmaktır; bu da mevcut yorumları, kurulum sayısını ve arama sıralamasını kaybetmek anlamına gelir.

Güvenli saklama pratikleri

Keystore dosyasının tek bir yerel diskte tutulması risklidir: disk arızası, format atma veya bilgisayar değişikliği dosyayı kalıcı olarak kaybettirebilir. En az bir şifreli yedek (harici disk, şifreli bulut depolama) tutun ve dosyayı asla proje deposuna (git) eklemeyin — key.properties gibi keystore dosyası da .gitignore'da olmalı.

Store password ve key password değerlerini bir şifre yöneticisinde saklayın, alias adını da not edin; bu üçü olmadan dosyanın kendisi işe yaramaz. Şifreleri e-posta veya sohbet uygulamaları üzerinden düz metin olarak paylaşmayın; ekip halinde çalışıyorsanız erişimi yalnızca ihtiyacı olan kişilerle sınırlayın.

Vibeloy Keystore Kasası, keystore dosyanızı ve şifrelerinizi uçtan uca şifreli olarak saklar; dosyayı yerel diskinizde tek kopya olarak tutmak yerine hesabınıza bağlı, herhangi bir cihazdan erişebileceğiniz bir kasada güvenle bulundurabilirsiniz. Bu, premium bir Vibeloy özelliğidir.

Sık sorulan sorular

Keystore dosyamı kaybettim, ne yapmalıyım?
Play App Signing'e kayıtlıysanız Play Console'da Protected with Play > Play Store protection > Manage Play app signing yolundaki "Upload Key Certificate" bölümünden bir upload key sıfırlama talebi açabilirsiniz: yeni bir upload keystore üretip sertifikasını keytool -export -rfc ile PEM olarak dışa aktarır, nedeniyle birlikte yüklersiniz; Google onayladıktan sonra yeni key etkinleşir. Kayıtlı değilseniz kayıp kalıcıdır — o uygulamayı bir daha güncelleyemezsiniz.
key.properties nedir, neden gerekli?
android/ dizininde tuttuğunuz, keystore dosyanızın yolunu ve şifrelerini içeren düz metin bir yapılandırma dosyasıdır. Gradle, release build'i imzalarken bu bilgileri buradan okur; dosya asla git'e eklenmemelidir.
Keystore şifremi unuttum ama dosya hâlâ elimde — kurtarabilir miyim?
Hayır, şifre kriptografik olarak dosyayı kullanılabilir kılan parçadır ve kurtarılamaz. Uygulama açısından bu, dosyayı tamamen kaybetmişsiniz gibi aynı sonucu doğurur: Play App Signing kayıtlıysa upload key sıfırlama, kayıtlı değilse yeni bir applicationId ile baştan başlama.
Debug keystore ile release (upload) keystore arasındaki fark nedir?
Debug keystore, Flutter/Android Studio tarafından otomatik üretilir, sabit ve herkese açık bir şifre kullanır, yalnızca yerel test içindir ve hiçbir mağaza kabul etmez. Release (upload) keystore ise sizin keytool ile ürettiğiniz, şifresini yalnızca sizin bildiğiniz ve mağazaya yüklenecek paketi imzalayan anahtardır.
Keystore dosyasını proje deposuna (git) eklemeli miyim?
Hayır. Keystore dosyası ve key.properties, .gitignore'a eklenmeli ve asla commit edilmemelidir; genel (public) bir depoya sızması, o anahtarı ele geçiren herkesin uygulamanız adına paket imzalamayı denemesine zemin hazırlar.