İlk Android Uygulamanız: Fikirden Çalışan APK'ya Yolculuk

Kerem Aydın·11 Temmuz 2026·⏱3 dk

Android uygulaması yazmak için: Android Studio'yu yükleyin, Kotlin kullanın, New Project → Empty Activity yoluyla bir proje oluşturun, UI'ı res/layout içinde tanımlayın, MainActivity'ye mantık ekleyin ve Build → Build APK(s) yoluyla APK'yı derleyin. Aşağıda somut adımlar, kodlar ve pratik tavsiyeler yer almaktadır.

İçindekiler {{TOC_AUTOMATIC}}

Nereden başlamalı: Araçlar ve dil seçimi

  1. Android Studio'yu yükleyin (SDK ve JDK dahildir). Önerilen sistem gereksinimleri: Rahat çalışma için 16 GB RAM; 10–20 GB boş alan.
  2. Dil seçimi: Kotlin — modern, kompakt ve Google tarafından önerilen; Java — deneyiminiz varsa kabul edilebilir.
  3. Test cihazını ayarlayın: Device Manager üzerinden AVD (emülatör) veya gerçek bir telefon (geliştirici modunu ve USB hata ayıklamayı açın).

Proje oluştururken minimum ayarlar:

  • Şablon: Empty Activity
  • Dil: Kotlin
  • Minimum SDK: API 21+ (veya hedef kitlenize göre)

Bilgisayarınız zayıfsa, gerçek bir telefonda test edin — başlatma ve hata ayıklama genellikle kaynak yoğun emülatöre kıyasla daha hızlı gerçekleşir.

Proje yapısı ve temel dosyalar

Android projesinde önemli olanlara kısa bir bakış (Project → Android görünümü):

  • app/src/main/AndroidManifest.xml — Activity ve izinlerin kaydı.
  • app/src/main/java/... — Kotlin/Java dosyaları (MainActivity vb.).
  • app/src/main/res/layout/*.xml — Ekran düzenleri.
  • app/build.gradle — Bağımlılıklar ve derleme parametreleri.

Basit bir manifest örneği (başlatmak için minimum):

<manifest package="com.example.myfirstapp"
    xmlns:android="http://schemas.android.com/apk/res/android">
  <application android:label="MyFirstApp" android:icon="@mipmap/ic_launcher">
    <activity android:name=".MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
  </application>
</manifest>

activity_main.xml düzen örneği:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical" android:gravity="center_horizontal"
    android:padding="16dp">
  <TextView android:id="@+id/tvGreeting"
      android:layout_width="wrap_content" android:layout_height="wrap_content"
      android:text="Butona basın" android:textSize="22sp" android:padding="8dp"/>
  <Button android:id="@+id/btnChangeText"
      android:layout_width="wrap_content" android:layout_height="wrap_content"
      android:text="Metni değiştir" android:layout_marginTop="16dp"/>
</LinearLayout>

Kotlin ile minimal Activity (doğru onCreate):

package com.example.myfirstapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val tvGreeting: TextView = findViewById(R.id.tvGreeting)
        val btnChangeText: Button = findViewById(R.id.btnChangeText)
        btnChangeText.setOnClickListener {
            tvGreeting.text = "Metin değiştirildi! Butona bastınız."
        }
    }
}

Modern alternatifler: ViewBinding/Databinding veya Jetpack Compose, findViewById olmadan UI'ı daha kompakt ve güvenli bir şekilde yazmanızı sağlar.

Derleme, çalıştırma ve hata ayıklama

  • Çalıştırma: Panelde cihaz/AVD seçin ve Run ▶ butonuna basın.
  • Hata ayıklama: Breakpoint koyun, loglar için Logcat'i kullanın, optimizasyon için CPU/Bellek profilleyicisini kullanın.
  • APK derleme: Build → Build Bundle(s) / APK(s) → Build APK(s). Yayınlama için Generate Signed Bundle / APK yoluyla imzalı AAB derleyin.

Sürüm öncesi kontroller:

  • minSdk ve targetSdk doğru seçilmiş;
  • İzinler minimal tutulmuş ve dinamik olarak isteniyor (tehlikeli izinler için);
  • Çeşitli API'lerde/ekranlarda test edilmiş;
  • Görseller ve bağımlılıklar optimize edilmiş.

Sonraki adımlar ve en iyi uygulamalar

  • Mimari: MVVM + ViewModel + LiveData/StateFlow. İş mantığını Activity/Fragment dışına çıkarın.
  • Yerel veritabanı: Room.
  • Ağ: Retrofit + OkHttp + coroutine'ler/Flow.
  • Navigasyon: Geçişleri yönetmek için Jetpack Navigation.
  • Test etme: Birim testleri ve UI testleri (Espresso/Compose Testing).

Beceri geliştirme için küçük bir plan: Basit bir "Yapılacaklar Listesi" uygulaması uygulayın → Room'a kaydetme ekleyin → API ile senkronizasyon yapın → ViewModel ve navigasyonu entegre edin.

Sık yapılan hatalar

  • Abonelikleri/coroutine'leri kapatmamak — bellek sızıntıları.
  • Ağ işlemlerinin UI thread'inde yapılması.
  • Activity/Fragment içinde katı mantık kullanılması.
  • İzinlerin ve yaşam döngüsü durumunun yanlış işlenmesi.
  • Farklı Android sürümlerinde ve ekran yönelimlerinde test etmenin ihmal edilmesi.

Emülatör yavaş olabilir: Donanım sanallaştırmayı (HAXM/Hypervisor) kontrol edin veya gerçek bir cihaz kullanın.

SSS

  • Kotlin mi yoksa Java mı — hangisi seçilmeli?
    Yeni projeler için Kotlin. Java, zaten güçlü bilginiz ve çok sayıda mevcut kodunuz varsa uygundur.
  • findViewById sayısını nasıl azaltabilirim?
    ViewBinding'i etkinleştirin veya Jetpack Compose'a geçin.
  • Gizli bilgiler (API anahtarları) nasıl saklanır?
    Kodda saklamayın; sunucu tarafı proxy kullanın veya gradle.properties ve imza anahtarlarını ayrı tutun, ancak depoya commit etmeyin.
  • Başlangıçta çoklu thread mimarisine gerek var mı?
    Başlangıçta arka plan görevleri için coroutine'leri kullanın; çoklu thread karmaşıklığı ölçeklendikçe artacaktır.

Bu set, çalışan bir Android uygulaması oluşturmak, proje yapısını anlamak ve işlevsellik büyüdükçe ağ, veritabanı ve mimari ekleyerek ilerlemek için yeterlidir.