adb shell am'in pratik kullanımı: şablonlar ve kullanım senaryoları
adb shell am, konsoldan intent'leri (action, data, component, extras, bayraklar) oluşturarak Activity, Service başlatmanıza ve Broadcast göndermenize olanak tanır; tek ihtiyacınız olan am start, am startservice ve am broadcast sözdizimini bilmektir.
Kısaca — hatırlamanız gerekenler: adb shell am <altkomut> [seçenekler] [INTENT] komut formatı, temel altkomutlar start, startservice, start-foreground-service, broadcast, force-stop ve action, data, component, extras ile bayraklar için seçenek seti.
Hızlı başlangıç: sözdizimi ve temel komutlar
Temel kalıp:
adb shell am <altkomut> [INTENT parametreleri]
Sık kullanılan altkomutlar:
start— Activity başlatır.startservice/start-foreground-service— servis başlatır.broadcast— broadcast gönderir.force-stop— uygulamayı zorla durdurur.
Intent için anahtarlar:
-n paket/.Activity— belirli bileşen.-a ACTION— action.-d URI— data URI.-c CATEGORY— category.-t MIME_TYPE— veri türü.-f FLAGS— bayraklar (maske, hex).- Extras:
--es(String),--ei(int),--el(long),--ez(boolean),--ef(float),--esa(String[]).
Activity/Receiver adından emin değilseniz — Android Studio'da manifest dosyasına bakın veya adb shell dumpsys package your.package / dumpsys activity kullanın.
Activity başlatma ve Intent ile çalışma (pratik)
- Component ile başlatma (güvenilir):
adb shell am start -n com.example.app/.MainActivity
Tam isimle:
adb shell am start -n com.example.app/com.example.app.ui.MainActivity
- Deep link (action + data):
adb shell am start -a android.intent.action.VIEW -d "https://example.com/product/123" com.example.app
Paket belirtilmezse — birden fazla işleyici varsa Android chooser gösterir.
- LAUNCHER olarak başlatma:
adb shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n com.example.app/.MainActivity
- Extras gönderme:
adb shell am start -n com.example.app/.ProfileActivity --es "source" "push" --ei "userId" 12345 --ez "featureEnabled" true
Diziler için:
adb shell am start -n com.example.app/.ListActivity --esa "tags" "news,sport,tech"
- Yığın bayrakları (bitmask):
adb shell am start -n com.example.app/.MainActivity -f 0x10008000
0x10008000 = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP. Bayraklar tek bir sayı olarak (bitlerin OR işlemiyle) belirtilir.
Bayraklar onaltılık maske olarak belirtilir. İhtiyaç duyulan değeri elde etmek için — bayrak değerlerini birleştirin (OR).
- Karmaşık yapıların aktarılması: am Parcelable oluşturmaz — JSON'u string extra olarak gönderin ve uygulamada ayrıştırın:
adb shell am start -n com.example.app/.OrderActivity --es "order_json" '{"id":42,"price":99.9}'
Komut satırında tırnak işaretlerini/özel karakterleri escape edin.
Servisler, broadcast, hata ayıklama senaryoları ve şablonlar
- Normal servis başlatma:
adb shell am startservice -n com.example.app/.SyncService --es "source" "manual"
- Foreground servis başlatma:
adb shell am start-foreground-service -n com.example.app/.LocationService
- Broadcast gönderme:
adb shell am broadcast -a com.example.app.ACTION_SYNC --es "reason" "manual"
Receiver belirterek:
adb shell am broadcast -n com.example.app/.SyncReceiver -a com.example.app.ACTION_SYNC
- Uygulamayı force-stop etme:
adb shell am force-stop com.example.app
(verileri temizlemek için adb shell pm clear com.example.app kullanın — bu zaten pm komutudur)
Pratik kullanım senaryoları:
- Deep link testi: bağlantıyı taklit eder ve parametre ayrıştırmasını kontrol edersiniz.
- UI testleri: debug-only Activity ve parametreleri geçirerek doğrudan istenen ekranı açarsınız.
- Push testi: push davranışını taklit eden action ile Activity başlatma.
- BroadcastReceiver hata ayıklama: özel action gönderir ve onReceive'i kontrol edersiniz.
Mini komut kılavuzu
| Komut | Ne yapar |
|---|---|
am start -n paket/.Activity | Component ile Activity başlatır |
am start -a ACTION -d URI [paket] | Action/data içeren Intent başlatır |
am startservice -n paket/.Service | Servis başlatır |
am start-foreground-service -n paket/.Service | Foreground servis başlatır |
am broadcast -a ACTION | Broadcast gönderir |
am force-stop paket | Uygulamayı durdurur |
Sık karşılaşılan hatalar
- Error: Activity class does not exist — isimde yazım hatası, yanlış applicationId veya Activity bu build variant'ta mevcut değil.
- SecurityException — bileşen export edilmemiş (android:exported="false") veya sistem izinleri gerekiyor.
- Intent chooser çağırıyor — paket belirtilmemiş ve birden fazla işleyici var.
- Tırnak işaretleri/escape sorunları — kabukta doğru tek/çift tırnak kombinasyonunu kullanın.
Bazı sistem action'ları ve çağrıları Android güvenlik politikalarıyla kısıtlanmıştır — imzalanmamış cihazda normal adb üzerinden taklit edilemezler.
SSS
- Activity'nin tam adını nasıl öğrenirim?
- Android Studio aracılığıyla (Profile or Debug APK) veya
adb shell dumpsys package your.packageile.
- Android Studio aracılığıyla (Profile or Debug APK) veya
- am üzerinden Parcelable aktarabilir miyim?
- Hayır — JSON/string gönderin ve uygulama içinde deserialize edin.
- Bayrak maskesi nasıl oluşturulur?
- Dokümantasyondan bayrak değerlerini alın ve birleştirin (OR). Komut satırında sonucu hex olarak belirtin, örneğin
-f 0x20000000.
- Dokümantasyondan bayrak değerlerini alın ve birleştirin (OR). Komut satırında sonucu hex olarak belirtin, örneğin
- Am emülatör ve gerçek cihazda çalışır mı?
- Evet — adb üzerinden bağlı cihaz/emülatör olduğunda.
Gerekirse — senaryonuz için özel komut şablonlarını hazırlayabilirim (UI testleri, deep link, push emülasyonu, profil oluşturma).