Takip et

WSL2’de Expo Build Ortamı Kurulumu: Ücretsiz ve Verimli Mobil Geliştirme

Android Studio’nun ağır yükü veya Expo’nun EAS Build kredileri olmadan, WSL2 üzerinde verimli bir Expo build ortamı kurarak mobil uygulama geliştirme sürecinizi hızlandırın. Bu adım adım rehber, başlangıçtan ileri seviye konfigürasyonlara kadar her şeyi kapsıyor ve sıfırdan bağımsız uygulama derleme yeteneğinizi inşa etmenizi sağlıyor.

Mobil uygulama geliştirme süreci, özellikle yerel derlemeler (native builds) söz konusu olduğunda, genellikle karmaşık ve kaynak yoğun bir görev olabilir. Bir mobil uygulamayı yayınlamaya hazır hale getirmek, yani bir .apk veya .aab (Android için) ya da .ipa (iOS için) dosyası oluşturmak, genellikle birden fazla araç, SDK ve ortam değişkeninin doğru bir şekilde yapılandırılmasını gerektirir. Geleneksel olarak, bu süreç Windows kullanıcıları için Android Studio, macOS kullanıcıları için Xcode gibi ağır IDE’lerin kurulumunu ve yönetimini gerektirir. Bu IDE’ler, disk alanında ciddi yer kaplar, sistem kaynaklarını tüketir ve özellikle daha düşük özellikli bilgisayarlarda geliştirme deneyimini yavaşlatabilir.

Bu zorlukların üstesinden gelmek için Expo gibi platformlar ortaya çıkmıştır. Expo, React Native üzerinde geliştirme yapmayı basitleştiren güçlü bir araç takımı sunar. Başlangıçta, geliştiricilerin uygulamalarını bir “managed workflow” içinde Expo Go uygulaması aracılığıyla test etmelerine olanak tanır ve hatta Expo’nun bulut hizmetleri (EAS Build) üzerinden bağımsız derlemeler yapmalarına imkan tanır. Ancak, bu bulut hizmetleri genellikle belirli bir kullanım limitinden sonra ödeme gerektirir ve projeniz üzerinde tam kontrol sahibi olmak istediğinizde kısıtlayıcı olabilir. İşte tam bu noktada, Expo’nun “bare workflow” özelliği ve Windows Subsystem for Linux 2 (WSL2) devreye giriyor.

WSL2, Windows kullanıcılarına tam teşekküllü bir Linux dağıtımını Windows içinde çalıştırma yeteneği sunarak, Linux tabanlı geliştirme araçlarına sorunsuz erişim sağlar. Bu, Android SDK’sını ve diğer gerekli araçları Linux ortamında kurarak, Windows’un kendi ortamındaki potansiyel uyumluluk veya performans sorunlarından kaçınmak anlamına gelir. Üstelik, ağır bir IDE olan Android Studio’yu kurmak zorunda kalmadan, komut satırı üzerinden tüm derleme işlemlerini gerçekleştirebilirsiniz. Bu yaklaşım, sadece sistem kaynaklarını serbest bırakmakla kalmaz, aynı zamanda geliştirme ortamınız üzerinde size daha fazla kontrol sağlar ve maliyetleri önemli ölçüde düşürür.

Bu makalede amacımız, tam da bu serbestliği ve verimliliği sağlamak. Expo ile geliştirdiğiniz uygulamalarınızı, herhangi bir Expo kredisi ödemeden veya Android Studio’nun karmaşık kurulumlarıyla uğraşmadan, WSL2 üzerinde nasıl bağımsız bir şekilde derleyebileceğinizi adım adım göstereceğiz. Bu sayede, hem geliştirme maliyetlerinizi düşürecek hem de derleme süreçlerinizde tam kontrol sahibi olarak daha esnek bir çalışma ortamına kavuşacaksınız. Geliştirme süreçlerinizi optimize etmenin ve mobil uygulama projelerinizde tam bağımsızlık kazanmanın zamanı geldi. Bu kılavuz ile, Windows’ta çalışırken bile güçlü ve özgür bir Linux tabanlı mobil geliştirme ortamına sahip olacaksınız.

Temel Kavramlar: Expo, WSL2 ve Bağımsız Derleme Nedir?

Mobil uygulama geliştirme dünyasına adım atarken veya mevcut bilginizi tazelerken, bazı temel kavramları netleştirmek kritik öneme sahiptir. Bu bölümde, rehberimizin temelini oluşturan Expo, WSL2 ve bağımsız derleme (standalone build) terimlerini derinlemesine inceleyeceğiz, böylece neden bu yola çıktığımızı ve bize ne gibi faydalar sağlayacağını tam olarak anlayabileceksiniz.

Expo Nedir ve Mobil Geliştirmedeki Rolü Nelerdir?

Expo, React Native ekosistemi üzerine inşa edilmiş açık kaynaklı bir çerçeve ve platformdur. Temel amacı, mobil uygulama geliştirmeyi basitleştirmek ve hızlandırmaktır. React Native ile sıfırdan bir proje başlatmak, birçok yerel yapılandırma (native configuration) gerektirebilirken, Expo bu süreci soyutlayarak geliştiricilerin yalnızca JavaScript/TypeScript koduna odaklanmasını sağlar. Expo, geliştirmeyi kolaylaştıran birçok API (kamera, bildirimler, konum vb.) ve bileşenle birlikte gelir. Başlangıçta, Expo “managed workflow” adı verilen bir yaklaşımla geliştiricilere hızlı prototipleme ve test imkanları sunar. Bu workflow’da, uygulamanızı Expo Go mobil uygulaması üzerinden anında test edebilir, değişiklikleri anlık olarak görebilirsiniz. Ancak, bu yönetilen ortam bazı kısıtlamalara sahiptir ve projeniz özel yerel modüller gerektirdiğinde veya tamamen bağımsız bir derlemeye ihtiyaç duyduğunuzda, “bare workflow”a geçmeniz gerekebilir. Bu makalede tam da bu geçişi ve sonrası için yerel derleme yeteneklerini kazanmayı hedefliyoruz.

WSL2 (Windows Subsystem for Linux 2) Ne Anlama Geliyor?

WSL2, Microsoft’un Windows 10 ve 11 işletim sistemlerine entegre ettiği devrim niteliğinde bir özelliktir. Windows kullanıcılarının, Windows makinaları üzerinde tam teşekküllü bir Linux çekirdeğini çalıştırmasına olanak tanır. Önceki sürüm olan WSL1’den farklı olarak, WSL2 hafif bir sanal makine (VM) teknolojisi kullanır ve gerçek bir Linux çekirdeği içerir. Bu, Linux uygulamalarının ve araçlarının Windows üzerinde neredeyse yerel performansta çalışabileceği anlamına gelir. Özellikle dosya sistemi performansı ve ağ iletişimi konularında WSL1’e göre önemli iyileştirmeler sunar. Mobil uygulama geliştirme bağlamında, WSL2 bize Android SDK’sı, Node.js, Java Development Kit (JDK) ve diğer Linux tabanlı geliştirme araçlarını tamamen izole ve optimize edilmiş bir ortamda kurma imkanı verir. Böylece, Windows sisteminin potansiyel karmaşıklığından kaçınarak, kararlı ve güçlü bir geliştirme ortamı oluşturabiliriz.

Bağımsız Derleme (Standalone Build) Neden Önemli?

Bağımsız derleme, bir mobil uygulamayı dağıtım mağazalarına (Google Play Store veya Apple App Store) yüklemeye hazır hale getirme işlemidir. Expo Go uygulaması içinde çalışan geliştirme sürümünden farklı olarak, bağımsız derleme sonucunda ortaya çıkan dosya (.apk, .aab veya .ipa), uygulamanın tüm yerel bağımlılıklarını, kaynaklarını ve kodunu içeren tek başına çalışabilen bir pakettir. Bu paket, son kullanıcının cihazına kurulabilir ve Expo Go uygulamasının kurulu olmasına ihtiyaç duymaz. Bu, uygulamanızın gerçek dünya performansı, boyutu ve dağıtılabilirliği açısından kritik öneme sahiptir. Bağımsız derleme süreci, uygulamanın imzalanmasını (signing), kodun optimize edilmesini ve sürüm bilgilerinin doğru bir şekilde ayarlanmasını içerir. Geliştiriciler için bu, uygulamaları üzerinde tam kontrol sahibi olmanın ve onları küresel kitlelere ulaştırmanın tek yoludur. EAS Build gibi ücretli hizmetlere bağımlı kalmadan bu süreci kendi kontrolünüzde gerçekleştirmek, uzun vadede hem maliyet açısından hem de projenin esnekliği açısından büyük avantajlar sağlar.

Bu temel kavramları anladıktan sonra, bir sonraki adımlarımızda WSL2 ortamımızı kurmaya ve Expo projemizi bağımsız derlemeler için hazırlamaya başlayabiliriz. Her bir kavramın, bir araya geldiğinde nasıl güçlü ve verimli bir mobil geliştirme ekosistemi oluşturduğunu göreceksiniz. Bu bilgiler ışığında, teknik kurulum adımlarına geçmeye hazırız.

WSL2 Üzerinde Geliştirme Ortamı Nasıl Kurulur?

Şimdi sıra geldi, mobil geliştirme yolculuğumuzun ilk ve en temel adımı olan WSL2 üzerinde gerekli tüm araçları kurmaya. Bu bölüm, sıfırdan bir Linux ortamı oluşturarak Expo uygulamalarınızı bağımsız olarak derlemek için gereken tüm yazılımları ve konfigürasyonları adım adım ele alacak. Unutmayın, bu adımları doğru bir şekilde takip etmek, gelecekteki olası uyumluluk sorunlarının önüne geçecektir.

1. WSL2 Kurulumu ve Ubuntu Dağıtımı

Öncelikle, bilgisayarınızda WSL2’nin etkinleştirildiğinden ve bir Linux dağıtımının (tercihen Ubuntu) kurulu olduğundan emin olmalısınız. Eğer henüz kurmadıysanız:

  1. Windows PowerShell’i yönetici olarak açın.
  2. Şu komutu çalıştırın:
    wsl --install

    Bu komut, WSL'yi etkinleştirecek ve varsayılan olarak Ubuntu'yu kuracaktır.

  3. Eğer zaten kuruluysa veya farklı bir dağıtım kurmak isterseniz, wsl --list --online ile mevcut dağıtımları görebilir, wsl --install -d ile kurabilirsiniz.
  4. Kurulum tamamlandığında, Ubuntu otomatik olarak açılır ve bir kullanıcı adı ile parola oluşturmanız istenir. Bu bilgileri not alın.
  5. WSL2'nin varsayılan sürüm olarak ayarlandığından emin olmak için:
    wsl --set-default-version 2

  6. Ubuntu'yu açın ve ilk güncelleştirmeleri yapın:
    sudo apt update && sudo apt upgrade -y

    Bu komutlar, sistemdeki paket listelerini günceller ve kurulu tüm paketleri en son sürümlerine yükseltir.

Bu adımlar, Linux tabanlı geliştirme ortamımızın temelini oluşturacaktır. Unutmayın, tüm geliştirme dosyalarınızı ve projelerinizi WSL2 içinde, yani Linux dosya sisteminde (örneğin, /home/kullanıcıadınız/projeler) tutmanız, performans açısından kritik öneme sahiptir. Windows dosya sisteminden (örneğin, /mnt/c/Users/kullanıcıadınız/projeler) erişim, WSL2'nin sanallaştırma katmanı nedeniyle performansı düşürebilir.

2. Node.js ve Yarn Kurulumu

Expo ve React Native projeleri için Node.js ve bir paket yöneticisi (npm veya Yarn) olmazsa olmazdır. Biz daha hızlı ve kararlı olduğu için Yarn'ı tercih edeceğiz.

  1. Node.js'i NVM (Node Version Manager) kullanarak kurmak en iyi yöntemdir, çünkü farklı Node.js versiyonları arasında geçiş yapma esnekliği sağlar.
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    source ~/.bashrc # veya ~/.zshrc eğer zsh kullanıyorsanız

  2. NVM'yi kurduktan sonra terminali kapatıp tekrar açın. Ardından Node.js'in en son LTS (Long Term Support) sürümünü kurun:
    nvm install --lts
    nvm use --lts
    node -v && npm -v # Kurulumu doğrulayın

  3. Şimdi de Yarn'ı kuralım:
    npm install -g yarn
    yarn -v # Kurulumu doğrulayın

Bu adımlar, Expo CLI ve diğer JavaScript tabanlı araçların çalışması için gerekli olan Node.js ve Yarn ortamını kurar. nvm use --lts komutu, her terminal oturumunda Node.js'in belirtilen sürümünü kullanmanızı sağlar. Kalıcı yapmak için nvm belgelerine bakabilirsiniz.

3. Java Development Kit (JDK) Kurulumu

Android uygulamalarını derlemek için bir Java Development Kit (JDK) gereklidir. Android Gradle eklentisi genellikle OpenJDK'nin belirli bir sürümünü tercih eder.

sudo apt install openjdk-11-jdk -y # Genellikle Android 12 ve altı için JDK 11 uygundur.
java -version # Kurulumu doğrulayın

Bazı durumlarda Android projeleri JDK 17 veya daha yüksek sürümler isteyebilir. Hata alırsanız, openjdk-17-jdk kurmayı deneyebilirsiniz. Birden fazla JDK sürümünü yönetmek için update-alternatives kullanabilirsiniz, ancak bu makalenin kapsamının dışındadır.

4. Android SDK Kurulumu (Komut Satırı Araçları)

Android Studio kurmadan Android uygulamalarını derlemek için sadece komut satırı Android SDK araçlarına ihtiyacımız var.

  1. Gerekli dizinleri oluşturun:
    mkdir -p ~/.android/sdk
    cd ~/.android/sdk

  2. Android SDK komut satırı araçlarını indirin. En güncel sürümü Android geliştirici web sitesinden alabilirsiniz. Örneğin, commandlinetools-linux-*.zip dosyasını indirin. WSL2'ye indirmek için wget kullanabilirsiniz:
    wget https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip

    Uzman İpucu: Her zaman en güncel linki kullanın. Google'ın web sitesini ziyaret ederek indirme linkini kopyalayabilirsiniz.
  3. İndirilen zip dosyasını açın:
    unzip commandlinetools-linux-*.zip
    mv cmdline-tools latest

    Bu işlem, latest adlı bir dizin oluşturacak ve SDK araçlarını içine taşıyacaktır. SDK yapısı şu şekilde olmalıdır: ~/.android/sdk/latest/bin/sdkmanager.

  4. Gerekli platform araçlarını ve derleme araçlarını indirin:
    latest/bin/sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.0"

    platforms;android-33 ve build-tools;33.0.0 kısmını projenizin gerektirdiği Android API seviyesine göre ayarlayabilirsiniz. Genellikle en son stabil sürüm önerilir.

  5. Android SDK lisanslarını kabul edin:
    latest/bin/sdkmanager --licenses

    Lisansları okuyun ve her biri için 'y' tuşuna basarak kabul edin.

5. Ortam Değişkenleri Ayarları

Android SDK'sının doğru çalışması için ortam değişkenlerini ayarlamamız gerekiyor. Bu değişkenler genellikle ~/.bashrc veya ~/.zshrc dosyasına eklenir.

echo 'export ANDROID_HOME=$HOME/.android/sdk' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/latest/bin' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/platform-tools' >> ~/.bashrc
echo 'export PATH=$PATH:$ANDROID_HOME/build-tools/33.0.0' >> ~/.bashrc # Kendi build-tools versiyonunuzu kullanın
source ~/.bashrc # Değişiklikleri uygulamak için

Bu ayarlar, sisteminizin sdkmanager, adb (Android Debug Bridge) ve aapt gibi önemli komutlara doğrudan erişmesini sağlayacaktır. Her terminal oturumunda bu değişkenlerin yüklendiğinden emin olmak için source ~/.bashrc komutunu çalıştırmanız veya yeni bir terminal açmanız gerekebilir. adb version ve java -version gibi komutlarla kurulumunuzu doğrulayarak her şeyin yolunda gittiğinden emin olun. Bu karmaşık ancak kritik kurulum adımlarını tamamladığınızda, artık Expo projenizi bağımsız derlemeler için hazırlamaya hazırsınız.

Mobil Uyumluluk Notu: Web sitelerinde mobil uyumluluğu sağlamak için medya sorguları kritik öneme sahiptir. CSS içinde aşağıdaki gibi bir yapı kullanarak farklı ekran boyutlarına göre stilleri ayarlayabilirsiniz. Örneğin, küçük ekranlar için yazı boyutunu küçültmek:

@media screen and (max-width: 600px) {
  body {
    font-size: 14px;
  }
  .container {
    padding: 10px;
  }
}


Bu, mobil cihazlarda okunabilirliği ve kullanılabilirliği artırır.

Expo Projenizi Bare Workflow'a Taşıma ve Yapılandırma Adımları Nelerdir?

Expo'nun managed workflow'u, hızlı prototipleme ve geliştirme için harikadır, ancak bağımsız bir Android uygulamasını derlemek veya projenize özel yerel modüller eklemek istediğinizde sınırlarına ulaşır. İşte bu noktada, projenizi "bare workflow"a geçirmeniz gerekir. Bu geçiş, uygulamanızın yerel (native) kod tabanına erişim sağlayarak size tam kontrol imkanı sunar. Bu bölümde, mevcut bir Expo projesini bare workflow'a nasıl taşıyacağımızı ve bağımsız derlemeler için temel yapılandırmaları nasıl yapacağımızı adım adım inceleyeceğiz.

1. Yeni Bir Expo Projesi Oluşturma veya Mevcut Projeyi Hazırlama

Eğer yeni bir proje başlatıyorsanız, Expo CLI'yi kullanarak direkt olarak boş bir proje oluşturabiliriz. npx create-expo-app komutu, expo-cli'yi geçici olarak indirir ve kullanır, bu da global kurulum yapma zorunluluğunu ortadan kaldırır:

npx create-expo-app MyAwesomeApp --template blank --no-install
cd MyAwesomeApp
yarn install # Bağımlılıkları manuel olarak kurun

Bu, MyAwesomeApp adında boş bir Expo projesi oluşturur. --no-install parametresi, bağımlılıkların otomatik olarak kurulmasını engeller, böylece biz yarn install ile kontrolü elimize alırız. Eğer mevcut bir projeniz varsa, doğrudan projenizin kök dizinine geçebilirsiniz. Mevcut projenizin tüm bağımlılıklarının güncel olduğundan emin olun.

2. Projeyi Bare Workflow'a Taşıma: expo prebuild Komutu

Bare workflow'a geçişin kalbi, expo prebuild komutudur. Bu komut, Expo'nun yönetilen ortamından sıyrılarak projenize yerel android ve ios dizinlerini ekler:

expo prebuild --platform android # Veya sadece 'expo prebuild' her ikisini de oluşturur

Bu komut çalıştırıldığında, Expo CLI projenizi inceler, app.json dosyasındaki yapılandırmalara göre gerekli yerel kodları (AndroidManifest.xml, build.gradle vb.) oluşturur ve bunları android (ve/veya ios) dizinlerine yerleştirir. Bu dizinler, artık Android Studio veya Xcode gibi yerel geliştirme araçlarıyla doğrudan açılabilir ve üzerinde çalışılabilir. expo prebuild komutunun ne yaptığına dair detaylar şunlardır:

  • android/ dizinini oluşturur: Bu dizin, Android projenizin tüm yerel Gradle yapılandırmasını, kaynak dosyalarını ve kodunu içerir.
  • ios/ dizinini oluşturur (eğer --platform ios belirtilmişse): Bu dizin, iOS projenizin tüm Xcode yapılandırmasını, Podfile'ını ve yerel kodunu içerir.
  • app.json dosyasındaki bazı ayarları yerel dosyalara çevirir: Örneğin, uygulamanın paket adı (android.package), versiyon kodu (android.versionCode) gibi ayarlar AndroidManifest.xml ve build.gradle dosyalarına yansıtılır.
  • react-native-unimodules gibi Expo'nun kendi yerel modüllerini entegre eder: Bu, önceden kullandığınız Expo API'lerinin (kamera, bildirimler vb.) yerel ortamda da çalışmaya devam etmesini sağlar.

Bu işlem, projenizin artık bir React Native CLI projesi gibi davranmasını sağlar, ancak yine de birçok Expo kütüphanesi ve aracıyla uyumluluğunu korur. Bu, Expo'nun en büyük avantajlarından biridir: İhtiyaç duyduğunuzda yerel kontrole geçebilirken, Expo'nun sunduğu kolaylıklardan tamamen vazgeçmek zorunda kalmazsınız.

3. app.json ve package.json Yapılandırması

Bare workflow'a geçiş yaptıktan sonra, app.json ve package.json dosyalarınızda bazı ayarları gözden geçirmek ve gerekirse güncellemek önemlidir.

app.json Güncellemeleri:

Bağımsız derlemeler için en kritik ayarlar app.json içinde yer alır:

{
  "expo": {
    "name": "My Awesome App",
    "slug": "my-awesome-app",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "com.yourcompany.myawesomeapp"
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      },
      "package": "com.yourcompany.myawesomeapp",
      "versionCode": 1,
      "permissions": [
        "CAMERA",
        "ACCESS_FINE_LOCATION"
      ]
    },
    "web": {
      "favicon": "./assets/favicon.png"
    },
    "plugins": [
      // Burada özel Expo config eklentileri yer alabilir
    ]
  }
}

  • android.package: Bu, uygulamanızın benzersiz paket adıdır (Android'de uygulama kimliği). Genellikle ters alan adı notasyonu kullanılır (örn. com.yourcompany.appname). Google Play Store'da uygulamanızı tanımlayan kritik bir değerdir ve derlemeden önce kesinlikle ayarlanmalıdır.
  • android.versionCode: Uygulamanızın versiyon kodudur. Google Play Store'a her yeni sürüm yüklediğinizde bu değeri artırmanız gerekir. Tam sayı olmalıdır.
  • android.permissions: Uygulamanızın ihtiyaç duyduğu Android izinlerini listeler. Eğer daha önce Expo'nun managed workflow'unda otomatik olarak eklenen izinleriniz varsa, bu kısımda belirtmeniz gerekebilir.
  • ios.bundleIdentifier: iOS için uygulamanızın benzersiz kimliğidir. Apple App Store'a yükleme yaparken gereklidir.

package.json Güncellemeleri:

package.json dosyasında, özellikle scripts bölümüne bazı yerel derleme komutlarını eklemek faydalı olabilir. Bu, derleme sürecini otomatikleştirmek ve standartlaştırmak için iyi bir uygulamadır:

{
  "name": "MyAwesomeApp",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "expo start",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "web": "expo start --web",
    "build:android": "cd android && ./gradlew assembleRelease",
    "bundle:android": "cd android && ./gradlew bundleRelease"
  },
  "dependencies": {
    // ...
  },
  "devDependencies": {
    // ...
  }
}

expo run:android ve expo run:ios komutları, Expo CLI'nın projenizi yerel derleme araçlarıyla (Android Studio/Xcode) derleyip bir cihaza veya emülatöre yüklemesini sağlar. build:android ve bundle:android ise doğrudan Gradle komutlarını kullanarak bağımsız derlemeler yapmanızı sağlar. Bu komutlar, bir sonraki bölümde daha detaylı ele alınacak.

Bu adımları tamamladıktan sonra, projeniz artık tamamen bare workflow'a geçmiş ve yerel Android derleme sürecine hazırdır. Bu geçiş, uygulamanız üzerinde derinlemesine kontrol sahibi olmanızı ve özel ihtiyaçlarınıza göre yapılandırma yapmanızı sağlar, böylece herhangi bir kısıtlama olmadan mobil uygulama geliştirme potansiyelinizi sonuna kadar kullanabilirsiniz.

Yerel Android Uygulama Derleme Süreci: WSL2'den .apk ve .aab Oluşturma

Bare workflow'a geçişin ardından, artık uygulamamızı WSL2 ortamımızda bağımsız bir Android paketi olarak derlemeye hazırız. Bu, Google Play Store'a yüklenecek bir .apk (Android Package Kit) veya tercih edilen .aab (Android App Bundle) dosyası oluşturmak anlamına gelir. Bu süreç, uygulamanızı imzalamayı (signing) ve Gradle adı verilen bir derleme otomasyon aracını kullanmayı içerir. Bu bölümde, tüm adımları detaylı bir şekilde ele alarak, hatasız bir şekilde bağımsız derlemelerinizi nasıl gerçekleştirebileceğinizi göstereceğiz.

1. Gradle ve Proje Yapısı

Gradle, Android projelerinin derlenmesi, paketlenmesi ve test edilmesi gibi görevleri otomatikleştiren güçlü bir derleme sistemidir. Bare workflow'a geçtiğinizde, expo prebuild komutu projenizin android dizini içine tüm gerekli Gradle dosyalarını otomatik olarak oluşturmuştur. Bu dizinde, uygulamanızın yerel Android projesi yer alır ve tüm derleme işlemleri bu dizin içinde yürütülür.

cd android

Artık tüm Gradle komutlarını bu dizin içinden çalıştıracağız. İlk olarak, Gradle sarmalayıcısının (gradlew) çalıştırılabilir olduğundan emin olalım:

chmod +x gradlew

Bu komut, Gradle sarmalayıcı betiğine çalıştırma izni verir. Aksi takdirde, "Permission denied" hataları alabilirsiniz. Gradle sarmalayıcısı, Gradle'ın doğru sürümünün projeniz için indirilip kullanılmasını sağlar, böylece Gradle'ı manuel olarak kurmanız gerekmez.

2. Keystore Oluşturma ve Uygulama İmzalama (Signing)

Google Play Store'a bir Android uygulaması yüklemek için uygulamanızın bir dijital sertifika ile imzalanması gerekir. Bu sertifika, bir keystore dosyası içinde saklanır ve uygulamanızın kimliğini doğrular. Bu adımı sadece bir kez yapmanız yeterlidir, ancak keystore dosyanızı ve parolanızı kesinlikle kaybetmemelisiniz, aksi takdirde uygulamanızın güncellemelerini yayınlayamazsınız!

  1. Keystore dosyasını oluşturun:
    keytool -genkeypair -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

    Bu komut çalıştırıldığında, sizden bir dizi bilgi girmeniz istenecektir:

    • Keystore parolası: Keystore dosyasını koruyan parola.
    • Anahtar parolası: Oluşturduğunuz anahtarı koruyan parola.
    • Adınız ve Soyadınız.
    • Kuruluşunuzun adı, şehri, eyaleti/ili ve ülke kodu.

    Tüm bu bilgileri dikkatlice doldurun ve not alın. my-upload-key.keystore dosyasının projenizin android/app dizinine yerleştirilmesi yaygın bir uygulamadır.

  2. android/gradle.properties dosyasını düzenleyin:

    Bu dosya, Gradle derleme süreçleri için özel değişkenler tanımlamanızı sağlar. Keystore bilgilerimizi buraya ekleyeceğiz. Eğer dosya yoksa, oluşturun.

    # Keystore bilgileri
    MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
    MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
    MYAPP_UPLOAD_STORE_PASSWORD=your_keystore_password
    MYAPP_UPLOAD_KEY_PASSWORD=your_key_password

    Güvenlik Notu: Parolalarınızı bu dosyada açık metin olarak tutmak, güvenlik açısından ideal değildir. CI/CD ortamlarında genellikle ortam değişkenleri veya güvenli kasa çözümleri kullanılır. Ancak yerel geliştirme için bu yöntem yaygın olarak kabul edilir.
  3. android/app/build.gradle dosyasını düzenleyin:

    Bu dosyayı açın ve android { ... } bloğunun içine signing config'inizi ve build tiplerinizi ekleyin. Mevcut signingConfigs bloğunu bulup aşağıdaki gibi güncelleyebilirsiniz, yoksa ekleyebilirsiniz:

    android {
        ...
        defaultConfig {
            ...
        }
        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 {
                // minify (küçültme) ve obfuscation (karartma) ayarlarını genellikle burada yaparsınız.
                minifyEnabled enableProguardInReleaseBuilds
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.release // Release build'lerde imzalamayı etkinleştir
            }
        }
        ...
    }

    Bu yapılandırma, release build tipinin oluşturduğunuz keystore ile imzalanmasını sağlar. enableProguardInReleaseBuilds ve proguardFiles satırları, uygulama boyutunu küçültmek ve kodunuzu karartmak için ProGuard veya R8'i etkinleştirir. Bu, yayınlanacak uygulamalar için şiddetle tavsiye edilir.

3. Uygulamayı Derleme: .apk ve .aab Oluşturma

Tüm yapılandırmaları tamamladığımıza göre, artık uygulamamızı derleyebiliriz. Tekrar projenizin android dizininde olduğunuzdan emin olun.

  1. Yayınlanacak bir .apk dosyası oluşturmak için:
    ./gradlew assembleRelease

    Bu komut, projenizi derleyecek ve imzalanmış bir .apk dosyası oluşturacaktır. Çıktı, genellikle android/app/build/outputs/apk/release/app-release.apk yolunda bulunur.

  2. Google Play Store için tercih edilen .aab (Android App Bundle) dosyasını oluşturmak için:
    ./gradlew bundleRelease

    Bu komut, projenizi derleyecek ve imzalanmış bir .aab dosyası oluşturacaktır. Bu dosya, Google Play Console'a yüklemek için idealdir ve Google'ın uygulama boyutunu optimize etmesine olanak tanır. Çıktı, genellikle android/app/build/outputs/bundle/release/app-release.aab yolunda bulunur.

Gerçek Dünya Senaryosu: İlk Derleme ve Hata Ayıklama

İlk derlemenizi yaparken, bağımlılık sorunları, JDK path hataları veya Gradle versiyon uyumsuzlukları gibi çeşitli hatalarla karşılaşmanız oldukça olasıdır. Örneğin, "Could not find method 'X' on object of type 'Y'" gibi bir hata alırsanız, bu genellikle Gradle veya eklenti versiyonlarının projenizle uyumsuz olduğu anlamına gelir. Veya "JDK Home is not set" gibi bir hata alırsanız, ortam değişkenlerinizi kontrol etmeniz gerekir.

  • Bağımlılık Sorunları: Eğer sync failed gibi bir hata alırsanız, android/build.gradle ve android/app/build.gradle dosyalarındaki Gradle eklenti (classpath) ve SDK versiyonlarını (compileSdkVersion, targetSdkVersion, minSdkVersion) kontrol edin. Bazen node_modules dizinini silip yarn install ve ardından expo prebuild --clean komutunu çalıştırmak sorunları çözebilir.

  • JDK Path Hataları: Ortam değişkenlerinizde ANDROID_HOME ve JAVA_HOME'un doğru ayarlandığından emin olun. echo $ANDROID_HOME ve echo $JAVA_HOME komutlarıyla kontrol edebilirsiniz.

  • Bellek Yetmezliği: Büyük projelerde Gradle, daha fazla bellek isteyebilir. gradle.properties dosyasına org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m gibi satırlar ekleyerek Gradle'a daha fazla bellek tahsis edebilirsiniz.

Herhangi bir hatayla karşılaştığınızda, hata mesajını dikkatlice okuyun ve internette arama yapın. Stack Overflow ve GitHub issue sayfaları, bu tür sorunlar için harika kaynaklardır. WSL2'nin getirdiği güçlü Linux ortamı sayesinde, bu sorunları daha kolay teşhis edebilir ve çözebilirsiniz. Bu kapsamlı derleme süreci, size uygulamanız üzerinde tam kontrol sağlayarak, üçüncü taraf hizmetlere bağımlılık duymadan mobil projelerinizi başarılı bir şekilde yayınlamanıza olanak tanır.

Performans ve Optimizasyon İpuçları: WSL2 Ortamınızı Hızlandırmak

WSL2, Windows üzerinde Linux'u çalıştırmak için harika bir köprü olsa da, bazı performans kısıtlamaları veya potansiyel darboğazlar içerebilir. Özellikle mobil uygulama geliştirme gibi kaynak yoğun işlemler yaparken, ortamınızı optimize etmek, derleme sürelerini kısaltmak ve genel geliştirme deneyiminizi iyileştirmek kritik öneme sahiptir. İşte WSL2 ortamınızı daha verimli hale getirmek için uygulayabileceğiniz bazı ipuçları ve püf noktaları:

1. Dosya Sistemi Performansı: Projelerinizi Doğru Yerde Tutun

WSL2'nin en büyük performans farklarından biri, dosya sistemi giriş/çıkış (I/O) hızındadır. Linux dosya sistemi (Ext4) ile Windows dosya sistemi (NTFS) arasında geçiş yapıldığında performans düşüşleri yaşanır. Bu nedenle:

  • Projelerinizi WSL2 İçinde Tutun: React Native veya Expo projelerinizin kaynak kodunu her zaman WSL2 içindeki Linux dosya sisteminde (örneğin, /home/kullanıcıadınız/projeler) saklayın. Windows tarafındaki bir dizine (örneğin, /mnt/c/Users/kullanıcıadınız/projeler) erişmek, performansı önemli ölçüde düşürecektir.

  • İşlemleri Linux İçinde Yapın: npm install, yarn install, gradlew build gibi tüm derleme ve paket yönetimi işlemlerini Linux terminali içinde gerçekleştirin. Bu, dosya sistemi I/O'sunu en aza indirerek hızı artırır.

Bu, en basit ama en etkili optimizasyonlardan biridir. Projelerinizi Windows tarafında tutmanız durumunda, özellikle node_modules dizininin büyük olması nedeniyle yarn install veya npm install gibi işlemlerin çok yavaş çalıştığını fark edeceksiniz. Doğru dizinde çalışmak, bu tür gecikmeleri ortadan kaldırır.

2. Bellek ve İşlemci Tahsisi (.wslconfig)

Varsayılan olarak, WSL2, sisteminizdeki kaynakların bir kısmını otomatik olarak kullanır. Ancak, özellikle büyük projelerde veya birden fazla WSL2 dağıtımı çalıştırıyorsanız, bu kaynakları manuel olarak yapılandırarak performansı artırabilirsiniz. Bunu yapmak için, Windows kullanıcı profil dizininizde (C:\Users\KullanıcıAdınız\) bir .wslconfig dosyası oluşturun veya mevcut dosyayı düzenleyin:

# .wslconfig dosyası örneği
[wsl2]
memory=8GB  # WSL2 VM'ine ayrılacak maksimum bellek
processors=4 # WSL2 VM'ine ayrılacak maksimum işlemci çekirdeği sayısı
swap=2GB # Sanal bellek alanı
localhostForwarding=true # Yerel ağ üzerinden port iletimini etkinleştirir

Bu ayarları kaydettikten sonra, WSL2'yi yeniden başlatmanız gerekir:

wsl --shutdown

Ardından Ubuntu'yu yeniden başlatarak değişikliklerin etkinleştiğini görebilirsiniz. Bu, özellikle Gradle derlemeleri gibi bellek ve işlemci yoğun işlemler için büyük fark yaratabilir. Bellek miktarını sisteminizdeki toplam belleğin yaklaşık %50-75'i civarında tutmak iyi bir başlangıç noktasıdır.

3. Yarn Kullanımı ve Paket Yöneticisi Optimizasyonu

Node.js projelerinde npm yerine yarn kullanmak, genellikle daha hızlı ve daha kararlı bir bağımlılık yönetimi sağlar. Yarn, paketleri paralel olarak indirir ve önbelleğe alır, bu da özellikle tekrarlayan yarn install işlemlerinde zaman kazandırır.

  • Yarn'ı Global Olarak Kurun: Daha önce yaptığımız gibi, npm install -g yarn ile Yarn'ı global olarak kurun.

  • yarn.lock Dosyasını Kullanın: yarn.lock dosyası, tüm bağımlılıklarınızın kesin sürümlerini kilitler. Bu, farklı geliştiriciler veya CI/CD ortamları arasında tutarlı derlemeler yapmanızı sağlar.

Ek olarak, paket önbelleğini düzenli olarak temizlemek de yardımcı olabilir:

yarn cache clean

4. VS Code Remote Development Uzantısı

WSL2'de geliştirme yaparken en iyi deneyimi elde etmek için Visual Studio Code'un "Remote Development" uzantı paketini kullanmanız şiddetle tavsiye edilir. Bu uzantı, VS Code'u Windows tarafında çalıştırırken, projenizi ve tüm geliştirme araçlarınızı (terminal, uzantılar, Git vb.) WSL2 içinde çalıştırır. Bu sayede, Windows'un kullanıcı arayüzü ve performansı ile Linux'un geliştirme gücünü bir araya getirmiş olursunuz.

  • Kurulum: VS Code'u açın, Uzantılar sekmesine gidin ve "Remote Development" paketini arayıp kurun.
  • Kullanım: WSL2'de projenizin olduğu dizinde code . komutunu çalıştırın. VS Code otomatik olarak uzak WSL ortamına bağlanacak ve projenizi açacaktır.

Bu, dosya sistemi I/O sorunlarını ortadan kaldırır ve geliştirme iş akışınızı çok daha akıcı hale getirir.

5. Diğer Genel Optimizasyon İpuçları

  • SSD Kullanımı: Eğer mümkünse, hem Windows işletim sisteminizin hem de WSL2 dağıtımınızın kurulu olduğu disk biriminin bir SSD (Solid State Drive) olduğundan emin olun. Bu, genel sistem performansını ve dolayısıyla derleme sürelerini önemli ölçüde artırır.

  • Gereksiz Arka Plan Süreçlerini Kapatma: Windows'ta ve WSL2'de çalışan gereksiz arka plan uygulamalarını ve servislerini kapatmak, daha fazla sistem kaynağını geliştirme ortamınıza ayırmanıza yardımcı olur.

  • Git LFS Kullanımı: Eğer projenizde büyük dosyalar (örneğin, yüksek çözünürlüklü resimler, videolar) varsa, Git Large File Storage (LFS) kullanmak Git depolarınızın boyutunu küçültür ve clone/pull işlemlerini hızlandırır.

  • Otomatik Güncelleştirmeleri Kapatma: Windows ve diğer uygulamaların otomatik güncellemelerini, geliştirme sırasında kaynak tüketimini önlemek için geçici olarak kapatabilirsiniz.

Bu optimizasyon ipuçları, WSL2 üzerindeki Expo geliştirme ortamınızı daha hızlı, daha kararlı ve genel olarak daha verimli hale getirmenize yardımcı olacaktır. Her bir ipucunu uygulayarak, mobil uygulama geliştirme sürecinizde ciddi iyileştirmeler fark edeceksiniz. Unutmayın, iyi optimize edilmiş bir ortam, geliştiricinin üretkenliğini doğrudan etkiler ve daha keyifli bir deneyim sunar.

İleri Düzey Kullanım Senaryoları: CI/CD ve Fastlane ile Otomasyon

Manuel derleme süreçleri, küçük projeler veya başlangıç aşamaları için uygun olabilirken, daha büyük ekiplerde veya sürekli entegrasyon (CI/CD) gerektiren projelerde zamanla verimsiz hale gelir. Uygulama derlemelerini, testlerini ve dağıtımlarını otomatikleştirmek, geliştirme döngüsünü hızlandırır, hataları azaltır ve ekiplerin daha sık ve güvenilir bir şekilde yayın yapmasına olanak tanır. Bu bölümde, Fastlane gibi araçları kullanarak Expo projeleriniz için derleme ve dağıtım süreçlerini nasıl otomatikleştirebileceğinizi ve CI/CD entegrasyonu için temel yaklaşımları ele alacağız.

1. Fastlane Nedir ve Neden Kullanılmalıdır?

Fastlane, iOS ve Android uygulamaları için açık kaynaklı bir CI/CD aracıdır. Geliştirme iş akışının neredeyse her aşamasını otomatikleştirebilir: kod imzalama, ekran görüntüleri alma, beta dağıtımı, uygulama mağazasına yükleme ve daha fazlası. Fastlane, geliştiricilerin tekrarlayan, manuel görevleri otomatikleştirmesine olanak tanıyarak zamandan tasarruf etmelerini ve daha önemli işlere odaklanmalarını sağlar.

Fastlane kullanmanın başlıca nedenleri:

  • Hata Azaltma: Manuel derleme ve dağıtım süreçleri hata yapmaya açıktır. Otomasyon, insan hatalarını ortadan kaldırır.

  • Tutarlılık: Her derleme ve dağıtım süreci, Fastlane tanımlamaları (Fastfile) tarafından belirlenen aynı adımları takip eder, bu da tutarlılık sağlar.

  • Hız: Otomatik süreçler, manuel işlemlere göre çok daha hızlıdır.

  • Ekip Üretkenliği: Geliştiriciler, derleme ve dağıtım gibi rutin görevlerle uğraşmak yerine kod yazmaya odaklanabilirler.

2. Fastlane Kurulumu ve Temel Yapılandırma

Fastlane, Ruby ile yazılmıştır, bu yüzden WSL2 ortamınızda Ruby'nin kurulu olması gerekir. Eğer yoksa, rbenv veya rvm gibi bir araçla kurabilirsiniz.

  1. Ruby Kurulumu (örneğin rbenv ile):
    sudo apt update
    sudo apt install git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libc6-dev libffi-dev libgdbm-dev libncurses5-dev
    curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    source ~/.bashrc
    rbenv install 3.1.2 # Stabil bir Ruby sürümü kurun
    rbenv global 3.1.2
    ruby -v # Doğrulayın

  2. Fastlane Kurulumu:

    Projenizin kök dizininde Fastlane'i başlatın:

    gem install fastlane -NV
    cd android # Android projesi dizinine geçin
    fastlane init

    fastlane init komutu, size uygulamanızın paket adını soracak ve ardından Fastfile, Appfile gibi dosyaları içeren bir fastlane dizini oluşturacaktır. Uygulama dağıtımını (örneğin Google Play'e) otomatikleştirmek isteyip istemediğiniz sorulduğunda, 2: Automate beta deployments to Google Play seçeneğini seçebilirsiniz. Bu, gerekli Fastlane eylemlerini yapılandırır ve Google Play hizmet kimlik bilgilerini ayarlamanızı isteyebilir (.json anahtar dosyası).

3. Fastfile Örnekleri: Android Derleme ve Dağıtım

fastlane/Fastfile dosyası, uygulamanızın otomasyon adımlarını tanımladığınız yerdir. İşte basit bir Android derleme ve dağıtım işlemi için bir örnek:

# fastlane/Fastfile
platform :android do
  desc "Releases a new beta version to Google Play"
  lane :beta do
    gradle(task: "clean assembleRelease") # Uygulamayı derleyin
    upload_to_play_store(
      track: "beta", # "internal", "alpha", "beta", "production"
      json_key: "path/to/your/google-play-key.json", # Google Play hizmet anahtarı
      package_name: "com.yourcompany.myawesomeapp"
    )
  end

  desc "Builds and uploads an AAB to Google Play production"
  lane :deploy do |options|
    increment_version_code(
      gradle_file_path: "../app/build.gradle", # app/build.gradle dosyasının yolu
      # version_code: options[:version_code] # Opsiyonel: CLI'dan version code geçmek için
    )
    gradle(task: "clean bundleRelease") # AAB dosyasını derleyin
    upload_to_play_store(
      track: "production",
      json_key: "path/to/your/google-play-key.json",
      package_name: "com.yourcompany.myawesomeapp"
    )
    # slack(message: "Successfully deployed a new version to Google Play!") # Opsiyonel: Slack bildirimi
  end
end

Bu Fastfile'da iki şerit (lane) tanımlanmıştır: beta ve deploy. beta şeridi, uygulamayı derler ve beta kanalına yüklerken, deploy şeridi versionCodeu artırır, bir .aab derler ve üretim kanalına yükler. gradle eylemi, daha önce manuel olarak kullandığımız Gradle komutlarını çalıştırır. upload_to_play_store eylemi ise uygulamanızı Google Play Console'a yükler. json_key kısmına, Google Play Console'dan edindiğiniz hizmet hesabı anahtarının yolunu girmelisiniz. Bu anahtar, Fastlane'in Google Play API'leriyle etkileşim kurmasını sağlar.

Bu şeritleri çalıştırmak için projenizin android dizininde aşağıdaki komutları kullanabilirsiniz:

fastlane beta
fastlane deploy

Uzman İpucu: Fastlane ile increment_version_code eylemini kullanarak her derlemede versionCode otomatik olarak artırabilirsiniz. Bu, manuel hataları önler. match gibi eylemlerle imzalama sertifikalarını da otomatik yönetebilirsiniz.

4. CI/CD Entegrasyonu için Temel Yaklaşımlar

Fastlane, bağımsız bir araç olarak harika çalışsa da, gerçek gücünü bir CI/CD sistemiyle birleştiğinde gösterir. GitHub Actions, GitLab CI, Jenkins veya Azure DevOps gibi platformlar, kod deponuzdaki değişiklikleri algıladığında otomatik olarak derleme ve dağıtım işlemlerini tetikleyebilir. WSL2 ortamınızda bu adımları manuel olarak yapılandırmak yerine, bir CI/CD sunucusunun bunları otomatik olarak yapmasını sağlayabilirsiniz.

  • WSL2 Runner Kullanımı (Lokal/Hibrit CI): Bazı durumlarda, özellikle özel donanım gereksinimleri veya dahili ağ kısıtlamaları olan projelerde, bir Windows sunucusunda çalışan bir WSL2 ortamını CI/CD runner olarak kullanabilirsiniz. Örneğin, GitHub Actions için self-hosted runner'ı Windows'a kurup, Fastlane komutlarını WSL2 içinde çalışacak şekilde yapılandırabilirsiniz.

  • Bulut Tabanlı CI/CD: Daha yaygın olarak, GitHub Actions veya GitLab CI gibi bulut tabanlı CI/CD platformları kullanılır. Bu platformlar genellikle Linux tabanlı VM'ler sağlar. Fastlane komutlarınızı bu Linux VM'leri üzerinde çalışacak şekilde CI/CD pipeline'ınıza entegre edersiniz. Örneğin, bir main branch'e yapılan her push'ta uygulamanın derlenip test edilmesi ve başarılı olursa beta kanalına yüklenmesi gibi bir senaryo kurabilirsiniz.

Fastlane ve CI/CD entegrasyonu, mobil geliştirme süreçlerinizi tamamen dönüştürebilir. Uygulama dağıtımlarınızı otomatikleştirmek, geliştirme döngünüzü hızlandırırken aynı zamanda geliştiricilerin manuel ve tekrarlayan görevlerden kurtulmasını sağlar. WSL2 üzerindeki bu güçlü ortam, size bu otomasyonu başlatmak için sağlam bir temel sunar.

Sonuç: Bağımsız Mobil Geliştirmenin Geleceği ve Sıkça Sorulan Sorular

Bu kapsamlı rehber boyunca, Android Studio'nun ağır yükü veya Expo'nun ücretli EAS Build hizmetleri olmadan, WSL2 üzerinde Expo projelerinizi bağımsız bir şekilde derleyebileceğiniz güçlü ve verimli bir ortamı nasıl kuracağımızı adım adım ele aldık. Geliştirme ortamımızın temelini oluşturan WSL2 kurulumundan, gerekli araçların (Node.js, Yarn, JDK, Android SDK) konfigürasyonuna, Expo projemizi bare workflow'a taşımaya ve son olarak uygulamanın imzalanmış .apk veya .aab paketini oluşturmaya kadar her aşamayı detaylandırdık. Ayrıca, geliştirme deneyiminizi hızlandırmak için performans ipuçları ve süreçleri otomatikleştirmek için Fastlane gibi ileri düzey araçların kullanımına da değindik.

Bu yaklaşım, geliştiricilere mobil uygulama projeleri üzerinde tam kontrol sağlar. Özellikle bütçe kısıtlamaları olan veya bulut tabanlı hizmetlere bağımlı kalmak istemeyen geliştiriciler ve ekipler için paha biçilmez bir çözümdür. WSL2'nin sunduğu Linux çekirdeği entegrasyonu sayesinde, Windows kullanıcıları bile Linux'un avantajlarından tam anlamıyla faydalanarak güçlü ve kararlı bir mobil geliştirme ortamına sahip olabilirler. Bu sayede, daha hızlı derleme süreleri, daha az hata ve daha esnek bir iş akışı elde edersiniz.

Bağımsız mobil geliştirme yeteneği, sadece uygulamanızı yayınlamakla kalmaz, aynı zamanda projenizin geleceği üzerinde de size tam söz hakkı verir. Kendi derleme sunucularınızı kurma, özel entegrasyonlar yapma veya benzersiz dağıtım stratejileri geliştirme özgürlüğüne sahip olursunuz. Mobil geliştirme dünyası sürekli evriliyor ve bu tür bağımsız çözümler, geliştiricilerin yenilikçi kalabilmeleri ve kendi ihtiyaçlarına göre ortamlarını şekillendirebilmeleri için giderek daha önemli hale geliyor.

Sıkça Sorulan Sorular

Q1: Expo Go ile geliştirme yaparken neden bare workflow'a geçmeliyim?
A1: Expo Go, hızlı prototipleme ve test için harikadır, ancak bazı kısıtlamaları vardır. Eğer projeniz özel yerel modüller gerektiriyorsa (örn. bazı Bluetooth kütüphaneleri), uygulamanızı Expo Go'dan bağımsız olarak Google Play Store'a yüklemek istiyorsanız veya daha derinlemesine yerel kontrol elde etmek istiyorsanız bare workflow'a geçmeniz gerekir. Bare workflow, size projenizin tam yerel kod tabanına erişim sağlar.
Q2: WSL2 kullanmak yerine direkt Windows'ta derleme yapamaz mıyım?
A2: Evet, Windows üzerinde de Android Studio kurarak veya komut satırı araçlarını manuel olarak ayarlayarak derleme yapabilirsiniz. Ancak WSL2 kullanmanın avantajları vardır: daha kararlı bir Linux tabanlı ortam, dosya sistemi performansının optimizasyonu (eğer projeler Linux tarafında tutulursa), Windows'un potansiyel uyumluluk sorunlarından kaçınma ve genel olarak daha hızlı bir geliştirme deneyimi sunmasıdır. Ayrıca Android Studio'nun sistem kaynaklarını tüketmesini engeller.
Q3: iOS uygulamalarını WSL2 üzerinde derleyebilir miyim?
A3: Hayır, iOS uygulamalarını derlemek için Apple'ın Xcode IDE'si ve bir macOS işletim sistemi gereklidir. WSL2, iOS derlemesi için gerekli olan macOS ortamını sağlayamaz. Bu rehber sadece Android uygulamalarının bağımsız derlenmesine odaklanmıştır. iOS için ya bir macOS cihazı kullanmalı ya da bulut tabanlı bir macOS derleme hizmetinden yararlanmalısınız.
Q4: Uygulamamı Google Play Store'a nasıl yüklerim?
A4: Uygulamanızı derledikten ve bir .aab dosyası oluşturduktan sonra, bir Google Play Geliştirici Hesabına (tek seferlik ücretli) ihtiyacınız vardır. Hesabınız olduktan sonra Google Play Console'a giriş yaparak yeni bir uygulama oluşturabilir ve .aab dosyanızı "App bundles" kısmına yükleyebilirsiniz. Uygulama bilgilerini, ekran görüntülerini ve diğer detayları tamamladıktan sonra uygulamanızı yayınlayabilirsiniz.
Q5: Expo'nun EAS Build hizmeti ile bu yöntem arasındaki temel fark nedir?
A5: EAS Build, Expo'nun bulut tabanlı derleme hizmetidir. Sizden kaynak kodu alır ve bulutta sizin için bağımsız derlemeler (.apk, .aab, .ipa) oluşturur. Bu, kendi yerel ortamınızda SDK'ları kurma ve bakımını yapma zorunluluğunu ortadan kaldırır. Ancak genellikle belirli bir kullanım limitinden sonra ücretlidir ve derleme süreci üzerinde daha az doğrudan kontrolünüz vardır. Bu rehberdeki yöntem ise, tüm derleme sürecini kendi WSL2 ortamınızda, tamamen ücretsiz ve tam kontrolle gerçekleştirmenizi sağlar.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.