React Native APK Oluşturma (Release Signing APK)

React Native ile geliştirdiğimiz uygulamayı Google Play Store‘ a yükleme aşamasını anlatmaya çalışacağız.

Uygulama geliştirdik ve uygulamayı markete koyacağız. Google Play Store‘ a uygulama yükleyebilmek için uygulamanın release moda geçirilmesi ve imzalanması gerekmektedir. Bu hangi platformda geliştirme yapılırsa yapılsın mecburidir. Fakat bu işlemler değişiklik göstermektedir. React Native ile geliştirdiğimiz uygulamayı Android Studio ile imzalı bir APK oluşturma işlemi yapamamayız. Daha doğrusu oluşturduğumuz APK çalışmaz.

Uygulamamızı build etmek için react-native run-android komutunu ilk olarak çalıştıralım.

Imza Oluşturma

Uygulamamızı imzalamak için imza oluşturmamız gerekmektedir. Bunun için keytool aracını kullanacağız.

Windows

C:\Program Files\Java\jdkx.x.x_x\bin klasörüne girip aşağıdaki komutu çalıştırıyoruz.

keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

MAC

Terminalde /usr/libexec/java_home komutunu çalıştırdığımızda JAVA Jdk klasörünün yolunu göreceğiz.

cd /Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk

Jdk klasörune gidip aşağıdaki komutu çalıştırıyoruz.

sudo keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Komutun Çalıştırılması ve Açıklaması

Komutu çalıştırdığımızda bize bazı bilgiler soracaktır. Bu bilgiler arasında dosya ve alias için şifre kısmı da bulunmaktadır. Burada belirttiğimiz bilgileri kaybetmemeliyiz. Aksi taktirde uygulamayı farklı package name ile farklı bir imza ile imzalamamız gerekecek. Bu durumda da eski uygulamamızdaki bütün indirme ve yorumlar yeni uygulamada kullanılamayacaktır.

Dosya

Üsteki komutu çalıştırdığımızda bize bir adet imza dosyası verecek. Bu dosya komutu çalıştırdığımız klasörde oluşmaktadır. Dosyanın adı da my-release-key.keystore. Komuttaki bu kısmı dilediğiniz ismi vererek değiştirebilirsiniz.

Alias

Alias ismimiz önemlidir. Bu komutta my-key-alias olarak belirlenmiştir. Siz bunu değiştirebilirsiniz.

Imzanın Geçerlilik Süresi

10000 olarak belirttiğimiz değer bu imza 10000 gün sonra geçerliliğini yitirecek anlamını taşımaktadır.

Uygulamayı Imzalama

Imzamız mevcut durumda. Şimdi imza bilgilerimizi uygulamamıza yerleştireceğiz. Öncelikle imza dosyamızı android/app klasörüne koyalım. Imza dosyamızı koyduktan sonra imza bilgilerimizi android/gradle.properties dosyamıza ekliyoruz. android/gradle.properties dosyasını açıp alttaki bilgileri ekliyoruz. Not: Aşağıdaki bilgiler bu örneğe göre hazırlanmıştır. Siz kendi bilgilerinize göre yapmalısınız.

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore

MYAPP_RELEASE_KEY_ALIAS=my-key-alias

MYAPP_RELEASE_STORE_PASSWORD=123456yukl

MYAPP_RELEASE_KEY_PASSWORD=123456yukl

Imza bilgilerimizi girdik. Şimdi de android/app/build.gradle dosyasını açıyoruz. Dosyamıza signingConfigs bölümünu ve buildTypes -> release içerisindeki signingConfig signingConfigs.release satırını ekliyoruz. Bu durumda gradle dosyamız aşağıdakini benzer şekilde olacaktır.

Release Apk build.gradle Dosyası

Artık release olarak oluşturacağımız APK dosyamız imzalı olacaktır ve markete yüklenmeye hazır durumdadır. android klasörüne girip aşağıdaki komutu çalıştırarak imzalı(signing) release APK dosyamızı oluşturuyoruz.

./gradlew assembleRelease

APK dosyamız markete koymak için hazır durumdadır. Markete yükleyebilirsiniz. Fakat dilerseniz markete yüklemeden önce test yapmanız daha sağlıklı olacaktır. Bunun için aşağıdaki komutu çalıştırınız.

react-native run-android –variant=release

Hatalar

APK dosyamızı oluştururken ya da uygulamanın yeni versiyonu için APK oluştururken çeşitli hata ya da eksiklikler ile karşılaşılmaktadır. Bu problemlerin birçoğunun çözümü için aşağıdaki komutları deneyebilirsiniz.

  • assets klasörünüz eksik ise bununla ilgili bir hata alacaksınız.
  • Güncelleme yapmak istediğinizde yeni yapmış olduğunuz bölümler imzalı APK dosyasında görünmeyebilir.
  • Uygulamayı marketten indirdiğinizde uygulama açılır açılmaz kapanabilir.

Bu hatalar ve ihtimal başka hatalar için alttaki komut can simidiniz olabilir.

react-native bundle –platform android –dev false –entry-file index.js –bundle-output android/app/src/main/assets/index.android.bundle –assets-dest android/app/src/main/res

Bu komutta dikkat edilmesi gereken kısım index.js yerine index.android.js yazabilirsiniz. Bu sizin proje dosyalarınıza göre değişiklik gösterecektir.

Teşekkürler.