2019 yılının şubat ayının sonlarına doğru askerlik görevimi tamamladım. İstanbul’da bir akrabamızın evinde geçici olarak kalırken bir yandan da iş arıyordum; zor zamanlardı. Sürekli iş görüşmelerine gidip geliyor, her güne kimi insan kaynaklarıyla kimi teknik pozisyonlarla ilgili 2–3 görüşme sığdırm

Image generated by ChatGPT

2019 yılının şubat ayının sonlarına doğru askerlik görevimi tamamladım. İstanbul’da bir akrabamızın evinde geçici olarak kalırken bir yandan da iş arıyordum; zor zamanlardı. Sürekli iş görüşmelerine gidip geliyor, her güne kimi insan kaynaklarıyla kimi teknik pozisyonlarla ilgili 2–3 görüşme sığdırmaya çalışıyordum. Karşılaştığım sorulardan biri de ADB hakkındaydı.

Peak Games, bir kış günü tüm TV kanallarında aynı anda, aynı saniyede reklama gireli yalnızca birkaç hafta olmuştu. O ünlü reklamı hatırlarsınız, çok konuşuldu. Mart ayında, çalışmayı çok istediğim Peak ile bir iş görüşmesi yaptım. Pozisyon oyun geliştirme ile ilgili değildi; “Android geliştiricisi” pozisyonuydu.

Farklı bir proje üzerinde çalışmayı planlıyorlardı ancak bu proje gizli bilgi olduğundan detay veremeyeceğim. Sonrasında bana verdikleri değerlendirme projesinde Kotlin, RxJava, Data Binding, LiveData ve Navigation kullandım. Modüler MVVM bir yapı tercih ettim. Bayağı tatlış bir proje ortaya çıkararak bu aşamayı da başarıyla geçtim ve sonrasında canlı kod yazmam için ofise çağrıldım. Ne yazık ki bu görüşme başarısız oldu. O dönemde idiomatic Kotlin bile bilmiyordum ve istenen seviyeye ulaşamamıştım.

Hayatımda aldığım en değerli, en iyi, en başarılı ve beni en ileriye taşıyan iş görüşmesi geri bildirimlerini aldım. En büyük e-ticaret platformlarımızın hepsiyle görüşmelerim olmuştur; hiçbirinden bu kadar şey öğrenmemiştim. İşte o kıymetli geri bildirimlerden biri de ADB idi. Bana gönderdikleri mailde, “Bir Android geliştiricinin ADB’yi bilmesini beklerdik,” demişlerdi. Başta “Android Studio bu kadar iyiyken ne gerek var canım?” demiştim ancak böyle önemli bir görüşmede sorulduktan sonra ne olduğunu tabii ki öğrendim ve sonradan çok fazla kullandığım bir araç hâline geldi. Kullanım alanı çeşitliliğini görünce siz de çok şaşıracaksınız.



ADB Nedir?

ADB, Android cihazlar üzerinde çeşitli komutlar çalıştırmanıza olanak tanıyan bir komut satırı aracıdır. Geliştiricilerin Android cihazlarıyla veya Android emülatörleriyle etkileşim kurmasını sağlar ve çeşitli geliştirme ve hata ayıklama işlemlerini gerçekleştirmek için kullanılır. Bilgisayarınızla Android cihazınızı USB ya da ağ üzerinden bağlayarak cihaz üzerinde komutlar çalıştırmanıza olanak tanır.



ADB’nin Temel Kullanım Alanları:

1. Cihaz Bağlantısı ve Yönetimi:

Cihazın durumu ve bağlı olup olmadığını kontrol etmek için kullanılır.

Örnek komut: adb devices ile bağlı Android cihazları listeler.

2. Uygulama Yükleme ve Test Etme:

Uygulama APK dosyalarını doğrudan bir Android cihazına yüklemek ve çalıştırmak için kullanılır.

Örnek komut: adb install myapp.apk ile APK dosyasını yükler.

3. Hata Ayıklama (Debugging):

Cihazdan logcat çıktısı alarak uygulama hatalarını ve sistem mesajlarını izlemeye olanak tanır.

Örnek komut: adb logcat ile cihazdan gelen logları görüntüleyebilirsiniz.

4. Dosya Aktarımı:

Bilgisayar ile Android cihaz arasında dosya transferi yapmanızı sağlar.

Örnek komut: adb push local_file /sdcard/ ile bilgisayarınızdaki bir dosyayı Android cihaza aktarabilirsiniz.

5. Komut Satırı ile Cihaz Yönetimi:

Cihazda shell komutları çalıştırmanıza olanak tanır. Bu, cihazda doğrudan komut satırı işlemleri yapabileceğiniz anlamına gelir.

Örnek komut: adb shell ile cihazın komut satırına erişim sağlayabilirsiniz.

6. Uygulamaları Çalıştırma ve Durdurma:

Yüklü uygulamaları başlatma veya kapatma, sistem ayarlarını değiştirme gibi işlemler için ADB kullanılabilir.

Örnek komut: adb shell am start -n com.example/.MainActivity ile belirli bir uygulamayı başlatabilirsiniz.



ADB Nasıl Kullanılır?

Android logosu USB kablosu ile bağlantılı, Android Debug Bridge yazısı ile birlikte gösterilmektedir.

Image created by Tom

ADB’yi Yükleme:

ADB, genellikle Android SDK Platform Tools ile gelir. Bu araçları Android Studio ile veya Android Developer Sitesi’nden bağımsız olarak indirebilirsiniz. Android Studio indirmek zorunda değilsiniz.

Geliştirici Modunu ve USB Hata Ayıklamayı Açın

Gerçek bir Android cihazı kullanmak için cihazın geliştirici seçeneklerinden USB hata ayıklama (USB Debugging) özelliğini etkinleştirmeniz gerekiyor. Korkmayın, telefonunuz ve verileriniz herhangi bir zarar görmeyecek. Bunun için izlemeniz gereken adımlar şunlardır:

  1. Android cihazınızda Ayarlar>Telefon Hakkında bölümüne gidin.

  2. Yapı Numarası (Build Number) üzerine 7 kez tıklayarak geliştirici modunu açın.

  3. Geliştirici moduna geçtikten sonra, Ayarlar> Geliştirici Seçenekleri altında USB hata ayıklama seçeneğini aktif hâle getirin.

ADB Komutlarını Kullanma:

ADB terminalden veya komut satırından çalıştırılır. Örneğin, bağlı Android cihazlarını listeleyen komutu çalıştıralım:

typescript
adb devices


ADB’nin Genel Kullanım Senaryoları:

  • Uygulama geliştirme ve test etme: Geliştiriciler, uygulamalarını gerçek cihazlar üzerinde test etmek ve uygulama çıktısı/logları almak için kullanır. Ben en çok şu senaryoda kullandım: Test veya Google Play Store’a göndereceğim APK dosyasını gradlew clean ve gradlew assembleRelease ile çıkardıktan sonra cd komutu ile android\app\release dosya yoluna giderek APK dosyasını buldum. Cihazımdaki uygulamayı silip üzerine adb install komutu kullandım ve mağazaya göndermeden önce kişisel cihazımda son bir test yaptım.

  • Sistem modifikasyonu: Android sistemine özel ayarlar yapmak veya özelleştirmeler uygulamak isteyen kullanıcılar, ADB komutlarını kullanarak cihazın derinliklerine erişebilir. Android cihazlarda varsayılan animasyon hızlarını değiştirmek ADB ile mümkündür. Geliştiriciler, testler sırasında cihazın performansını daha hızlı görmek için animasyon hızlarını düşürebilir veya kapatabilirler. Aşağıdaki komutlar sayesinde, cihazın tüm animasyonları devre dışı bırakılır ve kullanıcı arayüzündeki geçişler daha hızlı hâle gelir. Özellikle performans testlerinde bu modifikasyon, cihazın animasyonlardan bağımsız gerçek hızını görmenizi sağlar. Komutlar:

csharp
adb shell settings put global window_animation_scale 0
adb shell settings put global transition_animation_scale 0
adb shell settings put global animator_duration_scale 0
  • Root işlemleri: Root yetkilerine sahip cihazlarda, sistem dosyalarına erişim sağlamak ve çeşitli işlemler gerçekleştirmek için ADB kullanılır. Root işlemini sevmediğim için burada hiç kullanmadım ancak merak etmiyor da değilim.



ADB’de Kullandığım Komutlar

Peki ADB bilgisi gerçek hayatta nerelerde işime yaradı? ING Türkiye’de çalışırken sıfırdan yazdığımız bankacılık uygulamasında performans ve hafıza (memory) en büyük önceliklerimizdi. ADB ile performansı izlemek için şunları kullandık, Android Profiler o zamanlar çok yeniydi tabii. :)

1. CPU Kullanımı İzleme

Cihazdaki CPU kullanımını gerçek zamanlı olarak izlemek için aşağıdaki komutu kullanabilirsiniz:

css
adb shell top

Bu komut, cihazdaki işlemcinin anlık kullanımını ve hangi uygulamaların CPU kaynaklarını tükettiğini gösterir.

2. GPU Kullanımı İzleme

Grafik performansını izlemek için Android’de GPU gösterge çubuğunu etkinleştirebilirsiniz. Bu özellik, belirli bir uygulamanın grafik performansına dair kare hızını ve gecikmeleri gösterir, GPU kullanımını görselleştirir. Komutla etkinleştirmek için:

xml
adb shell dumpsys gfxinfo <uygulama_paketi_adı> framestats

3. Hafıza Kullanımı (Memory Usage)

Cihazda çalışan uygulamaların bellek kullanımını izlemek için aşağıdaki komut kullanılabilir:

typescript
adb shell dumpsys meminfo

Bu komut, cihazdaki tüm uygulamaların bellek kullanımını gösterir. Ayrıca, sadece belirli bir uygulamanın bellek kullanımını görmek için uygulama paketini belirterek şu komutu da kullanabilirsiniz:

xml
adb shell dumpsys meminfo <uygulama_paketi_adı>

4. Pil Performansı

Pil durumu ve pil tüketimini görmek için şu komutu kullanabilirsiniz:

typescript
adb shell dumpsys battery

Bu komut, cihazın pil seviyesi, sıcaklık, voltaj ve şarj durumu gibi bilgileri döner. Uygulamanızın pil üzerindeki etkisini gözlemlemek için kullanışlıdır.

5. Network Performansı

Cihazdaki veri kullanımı ve ağ performansını izlemek için şu komutları kullanabilirsiniz:

typescript
adb shell dumpsys netstats

Bu komut, cihazın ağ verileri (Wi-Fi, mobil veri) kullanımı hakkında bilgi verir. Uygulamanızın veri kullanımını analiz etmek için faydalıdır.



6. Profiling Komutları (Systrace)

Daha ayrıntılı bir performans analizi için Systrace aracını kullanabilirsiniz. Bu araç, CPU, GPU, I/O, bellek ve daha fazlasını izler. Aşağıdaki komut ile çalıştırabilirsiniz:

lua
adb shell atrace --categories gfx,view,wm,am,sm --buffer-size=100000 --duration=10

Bu komut, 10 saniyelik bir izleme yapar ve sonuçları size verir. Daha derinlemesine analizler için Systrace komutunu ve aracını kullanmak, Android performans optimizasyonu için oldukça etkilidir.

ADB, ilk başta gözden kaçırdığım ama Android geliştirme sürecinde bana çok şey katan bir araç oldu. Peak Games ile yaptığım iş görüşmesinden aldığım geri bildirimler hem teknik bilgimi hem de problem çözme becerimi geliştirmemde büyük bir rol oynadı. ADB’yi öğrendikten sonra, uygulamalarımı test etmek ve cihazlar üzerinde daha derin işlemler yapmak mümkün hâle geldi. Eğer Android geliştiricisiyseniz ADB’yi mutlaka öğrenmenizi öneririm; işinizi bir üst seviyeye taşıyacak bir yetenek.