# Gemini CLI ile Kotlin ve Android projeleri: pratik rehber

Adres: https://agentvera.dev/blog/gemini-cli-ile-kotlin/ · Yayın: 2026-11-01

Gemini CLI’yı Kotlin ve Android projelerinde nasıl kullanacağınızı öğrenin: GEMINI.md kurulumu, etkili çalışma döngüsü, test komutları ve sık yapılan hatalar.

**Kısaca:**

- Gemini CLI, terminalde gemini ile başlar; Gradle, test ve lint komutlarını çalıştırarak Kotlin ve Android işlerini hızlandırır.
- GEMINI.md dosyasına build, test, lint komutları ile paket ve mimari kurallarını ekleyin; ajan doğru varsayımlarla çalışır.
- Compose, ViewModel ve coroutines refactoring’inde iyidir; Gradle, manifest ve proguard değişikliklerini mutlaka diff ile inceleyin.

Gemini CLI, terminal üzerinden `gemini` komutuyla başlatılan bir kodlama ajanıdır; Kotlin ve Android projelerinde Gradle, test ve lint komutlarını kendisi çalıştırarak kod üretir, düzenler ve hata mesajlarını yorumlar. Bu rehberde GEMINI.md ile projeyi hazırlamayı, etkili bir çalışma döngüsü kurmayı ve Android’e özgü tuzaklardan kaçınmayı uygulamalı olarak anlatıyorum.

## Neden Gemini CLI Kotlin ve Android işlerine uygun?
Gemini CLI, proje klasöründe `gemini` komutuyla çalıştığı için Gradle task’larını doğal bir terminal ajanı gibi kullanır. Kotlin’in statik tip sistemi ve Android Studio’nun ürettiği hata mesajları, ajanın düzeltme önerilerini netleştirir; özellikle type mismatch, nullability ve suspend fonksiyon hatalarını görüp düzeltebilir. Jetpack Compose, ViewModel ve coroutines gibi kalıp kodların çoğu deterministik olduğundan, ajan küçük adımlarla güvenilir diff’ler üretir. Örneğin bir `StateFlow` dönüşümünü veya repository katmanındaki `suspend` fonksiyon refactor’ünü birkaç iterasyonda tamamlayabilir. Ayrıca mevcut unit testleri çalıştırıp sonuçları yorumlayarak geliştiriciye geri bildirim verir. Gradle kataloğu taşıma, Compose UI testleri yazma veya espresso testleri güncelleme gibi tekrar eden işlerde ciddi zaman kazandırır. Genel kurulum ve temel özellikler için [Gemini CLI](/ajanlar/gemini-cli/) sayfasındaki bilgiler işe yarar.

## Projeyi ajan için hazırlama: GEMINI.md
GEMINI.md dosyasını proje köküne koyun; Gemini CLI bu dosyayı okuyarak build, test ve kod kurallarını varsayılan olarak uygular. Kotlin ve Android projesi için bu dosya kısa ve komut odaklı olmalı. Aşağıdaki örnek, Gradle, paket yapısı ve mimari kuralları içerir:
```markdown
# GEMINI.md

## Komutlar
./gradlew assembleDebug
./gradlew testDebugUnitTest
./gradlew connectedDebugAndroidTest
./gradlew lintDebug

## Paket ve mimari
- Paket: com.example.myapp
- UI: Jetpack Compose, ekran başına ui/<feature>/<Screen>.kt
- State: ViewModel + StateFlow, UI state tek nesnede
- Veri: Repository + suspend fonksiyonlar, Result<T> dönüşü
- Coroutines: viewModelScope, ağır işler için withContext(Dispatchers.IO)

## Kurallar
- Manifest ve Gradle değişikliklerini ayrı commit'te tut
- Bağımlılık eklerken version catalog kullan
- Test: JUnit4, Espresso, Compose UI test; her yeni özellik için en az bir unit test yaz
- Android kaynak dosyalarında hardcoded string kullanma
```
Bu dosyayı özelleştirirken şunlara dikkat edin: build komutları olarak `assembleDebug` yeterlidir; `testDebugUnitTest` hızlı JVM testlerini çalıştırır. Eğer instrumentation testleriniz varsa `connectedDebugAndroidTest` komutunu ekleyin, ancak bu komut emülatör veya cihaz gerektirir ve ajanın çalıştığı ortamda cihaz yoksa başarısız olur. Lint komutu `lintDebug` kod kalitesi uyarılarını verir; ajan bu çıktıyı okuyabilir. Paket yapısı kısmında tek paket örneği verdim; gerçek projede feature paketleri veya modüler yapı varsa onları yazın. State yönetimi için `StateFlow` ve `ViewModel` kullanımını belirtin; ajan böylece eski `LiveData` kalıplarına dönmez. Coroutines kurallarında `viewModelScope` ve `Dispatchers.IO` kullanımını açıkça söyleyin. Ayrıca DI framework’ü (Hilt, Koin) ve veritabanı (Room) gibi projeye özgü kütüphaneleri de ekleyin. Daha ayrıntılı kullanım ipuçları için [Gemini CLI nasıl kullanılır? Adım adım rehber](/blog/gemini-cli-nasil-kullanilir/) sayfasına bakabilirsiniz.

## Çalışma döngüsü: planla, küçük adımlar, testleri çalıştır, diff incele
Android projelerinde en verimli döngü şudur: önce yapılacak değişikliği tek cümleyle sınırlandırın, `gemini` komutunu proje klasöründe çalıştırıp isteği verin. Ajan kodu ürettikten sonra önce diff’i inceleyin; ardından `./gradlew testDebugUnitTest` ile hızlı testleri çalıştırın. Eğer emülatör veya cihaz bağlıysa `./gradlew connectedDebugAndroidTest` ile instrumentation testlerini de koşun. Küçük adımlar, Gradle senkronizasyonu ve Compose önizleme hatalarını erken yakalamanızı sağlar. Prompt yazarken [Kodlama ajanları için prompt nasıl yazılır?](/blog/kodlama-ajanlari-icin-prompt-yazmak/) sayfasındaki ipuçları işe yarar. Aşağıda tipik görevler için örnek promptlar veriyorum:
- 'LoginViewModel içindeki formState’i tek bir data class StateFlow’a taşı, input validation’ı ViewModel’de yap ve birim test ekle.'
- '`UserRepository` içindeki fetchUser fonksiyonunu Result`<T>` döndürecek şekilde refactor et, network hatasını coroutine exception olarak ilet ve mevcut testleri güncelle.'
- 'Compose `HomeScreen` içindeki state hoisting’i düzelt, remember ve collectAsStateWithLifecycle kullan ve Compose UI testi yaz.'
- '`build.gradle.kts` içindeki hardcoded bağımlılık versiyonlarını `libs.versions.toml` kataloğuna taşı, kullanılmayan bağımlılıkları kaldır.'
- 'Retrofit servisinde suspend fonksiyonlara geç, coroutine exception handler ekle ve unit test ile hata durumunu doğrula.'
- '`MainActivity` içindeki gereksiz `setContent` bloğunu ayır, `AppNavigation` composable’ını oluştur ve NavHost kullan.'
Her prompttan sonra ajanın ürettiği farkı inceleyin. Gradle dosyaları, manifest ve proguard değişikliklerini mutlaka gözden geçirin; tek bir commit içinde hem UI hem build değişikliği istemeyin. Testleri ajan çalıştırdıktan sonra siz de aynı komutu tekrar çalıştırıp sonuçları doğrulayın; bazen ajan önbellek nedeniyle yanlış sonuç raporlayabilir.

## Ajanın iyi olduğu Kotlin ve Android işleri ve dikkat edilmesi gerekenler
Gemini CLI şu işlerde güvenilirdir: ViewModel state refactoring, Compose composable’ları, coroutine flow dönüşümleri, JUnit test yazımı, Gradle version catalog geçişi, basit DI ve Room şema güncellemeleri. Android’e özgü tuzaklar daha çok manifest, Gradle plugin sürümleri, resource linking ve proguard/R8 kurallarındadır. Ajan bu dosyaları değiştirdiğinde mutlaka diff’i inceleyin; bazen `minSdk` veya `targetSdk` değerini yanlış değiştirebilir. Compose preview’da görünen hatalar çalışma zamanında oluşmayabilir, bu yüzden emülatörde doğrulamak şarttır. Özellikle `AndroidManifest.xml` içindeki intent filter, permission veya provider değişikliklerinde dikkatli olun; ajan bazen gereksiz permission ekleyebilir veya mevcut bir provider’ı yanlış yapılandırabilir. `proguard-rules.pro` dosyasına eklenen kurallar, reflection kullanan kütüphaneleri kırabilir; bu yüzden R8 daraltma açıksa release build’i de test edin. Aşağıdaki tablo sık kullanılan işler için iyi prompt örneklerini gösteriyor:

| İş | İyi prompt |
| --- | --- |
| State yönetimi | '`CartViewModel` içindeki `MutableStateFlow` listesini immmutable `StateFlow` olarak dışarı aç ve UI state’i tek veri sınıfında topla.' |
| Coroutine dönüşümü | '`loadUser` fonksiyonunu `callbackFlow` yerine `suspend` + `Result` olarak yeniden yaz, mevcut testleri uyarla.' |
| Compose testi | '`ProductCard` için `createComposeRule` ile state ve click testi ekle, test tag kullan.' |
| Gradle kataloğu | 'Bağımlılık versiyonlarını `libs.versions.toml` içine al, build.gradle.kts referanslarını güncelle.' |
| Manifest düzeltmesi | '`AndroidManifest.xml` içindeki `exported` attribute’unu API 31+ için düzelt ve gerekirse intent filter ekle.' |

## Test ve doğrulama
Ajan, unit testleri `./gradlew testDebugUnitTest` ile hızlıca çalıştırıp sonuçları yorumlar. Instrumentation testleri için `./gradlew connectedDebugAndroidTest` komutu emülatör veya cihaz gerektirir; Gemini CLI bu komutu çalıştırabilir ancak cihaz yoksa başarısız olur. Lint için `./gradlew lintDebug` çıktısını da inceletin; özellikle Compose ve Android kaynak uyarılarına dikkat edin. Test sonrası `git diff` ile ajanın değiştirdiği dosyaları tek tek gözden geçirin. Özellikle `build.gradle.kts`, `AndroidManifest.xml`, `proguard-rules.pro` ve `libs.versions.toml` değişikliklerini elle onaylamadan merge etmeyin. Ajan bir hatayı test ekleyerek doğrulayabilir; bunu isteyin. Ayrıca ajanın çalıştırdığı testlerin raporlarını `app/build/reports/tests/` altında bulabilirsiniz; oradan hata detaylarını okuyun. Eğer CI kullanıyorsanız, ajanın commit’lerini CI’da da test ettirin; yerelde geçen testler CI’da farklı ortam nedeniyle başarısız olabilir. Son olarak, Compose UI testlerinde `composeTestRule` ile yazılan testlerin emülatörde stabilitesini kontrol edin; ajan bazen yanlış `waitUntil` koşulları ekleyebilir.

## Aynı projede birden fazla ajan: AgentVera
AgentVera, Gemini CLI ve diğer terminal ajanlarının gerçek komut satırlarını aynı pencerede, her biri kendi terminal panelinde yan yana çalıştıran bir masaüstü uygulamasıdır. Ajanlar ayrı git worktree’lerde paralel çalışabildiği için biri Compose ekranını, diğeri ViewModel’i düzenlerken dosyalar çakışmaz. Tur sonunda ikinci bir model kod incelemesi yapar ve bulgular dosya:satır bağlantılarıyla gelir; bu, Kotlin nullability veya Gradle sürüm hatalarını erken yakalamak için çok değerlidir. Ayrıca her turun anlık görüntüsü alınır; yanlış bir Android manifest değişikliğini tek tıkla geri alabilirsiniz. [Yapay zeka ajan ekibi: yönetici, roller ve iş teslimi](/blog/yapay-zeka-ajan-ekibi/) sayfasında çok ajanlı iş teslimi anlatılıyor.

## Sonuç
Gemini CLI, Kotlin ve Android projelerinde tek başına IDE yerine geçmez; ancak GEMINI.md ile doğru komutları ve kuralları verdiğinizde Gradle, test ve refactoring döngüsünü ciddi şekilde hızlandırır. Her değişikliği küçük tutun, diff’i okuyun ve testleri siz de çalıştırın. Zamanla GEMINI.md dosyanızı projeye özel kurallarla zenginleştirin; ajan da sizinle birlikte daha isabetli hale gelir. Özellikle Compose, ViewModel ve coroutines gibi modern Android bileşenlerinde ajanın üretkenliği yüksektir; kritik yapılandırma dosyalarında ise insan incelemesi şarttır.

## Sık sorulanlar

**Gemini CLI, Android projelerinde hangi komutları çalıştırabilir?** Gemini CLI, proje kökünde gemini komutuyla başlar ve GEMINI.md içinde tanımlı Gradle task’larını çalıştırabilir; örneğin ./gradlew assembleDebug, ./gradlew testDebugUnitTest, ./gradlew lintDebug gibi.

**Gemini CLI için GEMINI.md dosyasına neler yazmalıyım?** Build, test ve lint komutlarını, paket yapısını, mimari kuralları (MVVM, Compose, StateFlow) ve test yaklaşımını yazın. Bu, ajanın doğru komutları seçmesini ve kod üretirken kurallara uymasını sağlar.

**Gemini CLI, Jetpack Compose kodunu düzenleyebilir mi?** Evet, composable fonksiyonlar, state hoisting ve Compose testleri yazabilir. Ancak preview hataları çalışma zamanını yansıtmayabilir; emülatörde veya cihazda doğrulamak gerekir.

**Gemini CLI, Android projelerinde en çok hangi hataları yapar?** Gradle versiyon uyumsuzlukları, manifest ve resource linking hataları, proguard/R8 kurallarını bozma ve minSdk/targetSdk değişiklikleri görülür. Bu dosyaları diff ile inceleyip elle onaylayın.

---

**AgentVera hakkında.** AgentVera, Solviera Teknoloji tarafından geliştirilen macOS, Windows ve Linux masaüstü uygulamasıdır. 18 yapay zeka kodlama ajanını (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) proje bazında, gerçek terminallerde ve kullanıcının kendi CLI kurulum ve girişleriyle yan yana çalıştırır. Ücretsiz planda sınırsız ajan vardır. İndir: https://agentvera.dev/indir/ · Fiyatlar: https://agentvera.dev/fiyatlar/
