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?
- Büyük Pazar: Dünyada 6+ milyar akıllı telefon kullanıcısı
- Yüksek Talep: Mobil geliştiricilere sürekli ihtiyaç var
- Girişimcilik: Kendi uygulamanızı geliştirip yayınlayabilirsiniz
- Çeşitli Kariyer: Oyun, fintech, sağlık, e-ticaret gibi sektörler
- Sürekli Gelişim: Yeni teknolojiler ve özellikler
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 |
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
- developer.android.com/studio adresinden indirin
- Windows, macOS veya Linux için uygun sürümü seçin
- Kurulum sihirbazını takip edin
- Android SDK'yı otomatik olarak indirecektir
Android 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
<?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
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
<?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
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
data class User(val id: Int, val name: String, val email: String)
fun String.addEmoji(): String = "🔹 $this ?"
val message = "Merhaba".addEmoji()
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
- flutter.dev adresinden SDK'yı indirin
- PATH'e ekleyin:
flutter/bin - Kurulumu doğrulayın:
flutter doctor
İlk Flutter Uygulaması
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
var name = 'Ali';
String city = 'Kayseri';
int add(int a, int b) => a + b;