Mobil Uygulama Geliştirmeye Giriş

Mobil uygulama geliştirme, Android ve iOS platformlarında çalışan uygulamalar oluşturma sürecidir. Günümüzde native (yerel) ve cross-platform (çapraz platform) olmak üzere iki ana yaklaşım bulunur.

Neden Mobil Uygulama Geliştirmeyi Öğrenmelisiniz?

Mobil Geliştirme Yaklaşımları

🔹 Native Android

  • Java veya Kotlin dili
  • Android Studio IDE
  • En iyi performans
  • Tüm Android API'lerine erişim
  • Sadece Android için

🔹 Native iOS

  • Swift veya Objective-C
  • Xcode IDE (Mac gerekli)
  • En iyi performans
  • Tüm iOS API'lerine erişim
  • Sadece iOS için

🔹 Flutter (Cross-Platform)

  • Dart dili
  • Android, iOS, Web, Desktop
  • Tek kod tabanı
  • Hızlı geliştirme (Hot Reload)
  • Güzel UI widget'ları

🔹 React Native

  • JavaScript / TypeScript
  • Android ve iOS
  • React bilgisi yeterli
  • Geniş ekosistem
  • Native modül desteği

Platform Karşılaştırması

Hangi teknolojiyi öğrenmeniz gerektiğine karar vermek için avantaj ve dezavantajları inceleyin.

Native vs Cross-Platform

Özellik Native (Java/Kotlin) Flutter React Native
Performans ⭐⭐⭐ En iyi ⭐⭐ Çok iyi ⭐ İyi
Geliştirme Hızı ⭐ Orta ⭐⭐⭐ En hızlı ⭐⭐ Hızlı
Öğrenme Kolaylığı ⭐ Orta ⭐⭐ Kolay ⭐⭐ Kolay (JS biliyorsa)
Platform Desteği Sadece Android Android, iOS, Web, Desktop Android, iOS
UI Esnekliği ⭐⭐⭐ Tam kontrol ⭐⭐⭐ Widget sistemi ⭐⭐ Native bileşenler
Topluluk ⭐⭐⭐ En geniş ⭐⭐ Hızla büyüyor ⭐⭐ Geniş

Android Studio vs Flutter

Kriter Android Studio (Native) Flutter
Dil Java veya Kotlin Dart
IDE Android Studio VS Code veya Android Studio
Hot Reload 🔹 Yok (yeniden derleme) 🔹 Var (anında güncelleme)
APK Boyutu Küçük (~5-10 MB) Büyük (~15-25 MB)
Google Play Hizmetleri Doğrudan erişim Plugin ile erişim
İş İlanları Daha fazla (şimdilik) Hızla artıyor
🔹 Öneri: Yeni başlıyorsanız Flutter ile başlayın - hem Android hem iOS için uygulama geliştirebilirsiniz. Derin Android bilgisi istiyorsanız Kotlin öğrenin.

Android Studio

Android Studio, Google'ın resmi Android geliştirme ortamıdır. IntelliJ IDEA tabanlıdır ve Android uygulamaları oluşturmak için gereken tüm araçları içerir.

Kurulum

Android Proje Yapısı

Proje Yapısı

MyApp/
+¦¦ app/
-   +¦¦ src/
-   -   +¦¦ main/
-   -   -   +¦¦ java/com/example/myapp/   # Kotlin/Java kodları
-   -   -   -   L¦¦ MainActivity.kt
-   -   -   +¦¦ res/                      # Kaynaklar
-   -   -   -   +¦¦ layout/               # XML layout dosyaları
-   -   -   -   -   L¦¦ activity_main.xml
-   -   -   -   +¦¦ values/               # Renkler, stringler
-   -   -   -   -   +¦¦ colors.xml
-   -   -   -   -   +¦¦ strings.xml
-   -   -   -   -   L¦¦ themes.xml
-   -   -   -   L¦¦ drawable/             # Görseller
-   -   -   L¦¦ AndroidManifest.xml       # Uygulama ayarları
-   -   L¦¦ build.gradle                  # Modül bağımlılıkları
+¦¦ build.gradle                          # Proje bağımlılıkları
L¦¦ settings.gradle
                

AndroidManifest.xml

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.MyApp">
        <activity android:name=".MainActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
                

Java ile Android Geliştirme

Java, Android'in orijinal programlama dilidir. Hala birçok projede kullanılmaktadır ve OOP kavramlarını anlamak için iyi bir başlangıçtır.

İlk Java Activity

MainActivity.java

package com.example.myapp;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private TextView textView;
    private Button button;
    private int counter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        textView = findViewById(R.id.textView);
        button = findViewById(R.id.button);
        
        button.setOnClickListener(view -> {
            counter++;
            textView.setText("Sayaç: " + counter);
            Toast.makeText(this, "Tıklandı!", Toast.LENGTH_SHORT).show();
        });
    }
}
                

XML Layout

activity_main.xml

<?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" android:padding="24dp">
    <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="Sayaç: 0" android:textSize="32sp" android:textStyle="bold" android:layout_marginBottom="24dp" />
    <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="Arttır" android:textSize="18sp" android:paddingHorizontal="32dp" />
</LinearLayout>
                

Kotlin ile Android Geliştirme

Kotlin, Google'ın resmi olarak desteklediği modern Android dilidir. Java'ya göre daha kısa, güvenli ve okunabilir kod yazmanızı sağlar.

Java vs Kotlin Karşılaştırma

Özellik Java Kotlin
Null Güvenliği 🔹 NullPointerException riski 🔹 Derleme zamanı kontrolü
Kod Uzunluğu Daha uzun (boilerplate) %40 daha kısa
Data Class Düzinelerce satır Tek satır: data class
Coroutines Karmaşık Thread yönetimi Kolay asenkron işlemler
Extension Functions 🔹 Yok 🔹 Mevcut sınıflara fonksiyon ekleme

İlk Kotlin Activity

MainActivity.kt

package com.example.myapp
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.myapp.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private var counter = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        
        binding.button.setOnClickListener {
            counter++
            binding.textView.text = "Sayaç: $counter"
            Toast.makeText(this, "Tıklandı!", Toast.LENGTH_SHORT).show()
        }
    }
}
                

Kotlin Özellikleri

KotlinOzellikleri.kt

data class User(val id: Int, val name: String, val email: String)
fun String.addEmoji(): String = "🔹 $this ?"
val message = "Merhaba".addEmoji()
                
🔹 Kotlin İpucu: Java kodunu Kotlin'e çevirmek için Android Studio'da "Convert code from Java" seçeneğini kullanabilirsiniz.

Flutter ile Mobil Geliştirme

Flutter, Google'ın açık kaynak UI framework'üdür. Tek kod tabanıyla Android, iOS, Web ve Desktop uygulamaları oluşturabilirsiniz.

Flutter Kurulumu

İlk Flutter Uygulaması

main.dart

import 'package:flutter/material.dart';

void main() { runApp(const MyApp()); }

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  void _incrementCounter() { setState(() { _counter++; }); }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
            Text('Butona tıkladınız:'),
            Text('$_counter', style: Theme.of(context).textTheme.headlineMedium),
        ]),
      ),
      floatingActionButton: FloatingActionButton(onPressed: _incrementCounter, tooltip: 'Arttır', child: Icon(Icons.add)),
    );
  }
}
                

Dart Programlama Dili

Dart, Flutter uygulamaları için kullanılan programlama dilidir. Java, JavaScript ve C# dillerine benzer sözdizimi vardır.

Dart Temelleri

temeller.dart

var name = 'Ali';
String city = 'Kayseri';
int add(int a, int b) => a + b;