Android Hata Ayıklama Köprüsü (adb)

Android Debug Bridge (adb), bir cihazla iletişim kurmanıza olanak tanıyan çok yönlü bir komut satırı aracıdır. adb komutu, uygulama yükleme ve hata ayıklama gibi çeşitli cihaz işlemlerini kolaylaştırır. adb, cihazda çeşitli komutlar çalıştırmak için kullanabileceğiniz bir Unix kabuğuna erişim sağlar. Üç bileşenden oluşan bir istemci-sunucu programıdır:

  • Komut gönderen istemci. İstemci, geliştirme makinenizde çalışır. adb komutu vererek istemciyi komut satırı terminalinden çağırabilirsiniz.
  • Cihazda komutları çalıştıran bir arka plan programı (adbd). Arka plan programı, her cihazda arka plan işlemi olarak çalışır.
  • İstemci ile arka plan programı arasındaki iletişimi yöneten bir sunucu. Sunucu, geliştirme makinenizde arka plan işlemi olarak çalışır.

adb, Android SDK Platform Tools paketine dahildir. Bu paketi SDK Manager ile indirin. Bu araç, paketi android_sdk/platform-tools/ konumuna yükler. Bağımsız Android SDK Platform Tools paketini istiyorsanız buradan indirebilirsiniz.

adb üzerinden kullanılacak bir cihazı bağlama hakkında bilgi edinmek için (ör. Bağlantı Yardımcısı'nı kullanarak yaygın sorunları giderme) Uygulamaları donanım cihazda çalıştırma başlıklı makaleyi inceleyin.

adb'nin işleyiş şekli

Bir adb istemcisini başlattığınızda istemci önce halihazırda çalışan bir adb sunucu işlemi olup olmadığını kontrol eder. Yoksa sunucu işlemi başlatılır. Sunucu başlatıldığında yerel TCP bağlantı noktası 5037'ye bağlanır ve adb istemcilerinden gönderilen komutları dinler.

Not: Tüm adb istemcileri, adb sunucusuyla iletişim kurmak için 5037 numaralı bağlantı noktasını kullanır.

Sunucu daha sonra çalışan tüm cihazlarla bağlantı kurar. Bu araç, ilk 16 emülatörün kullandığı aralık olan 5555-5585 aralığındaki tek numaralı bağlantı noktalarını tarayarak emülatörleri bulur. Sunucu, adb daemon (adbd) bulduğu yerde bu bağlantı noktasıyla bağlantı kurar.

Her emülatör, sıralı bağlantı noktalarından oluşan bir çift kullanır. Bunlardan biri konsol bağlantıları için çift numaralı, diğeri ise adb bağlantıları için tek numaralı bağlantı noktasıdır. Örneğin:

Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557
vb.

Gösterildiği gibi, 5555 bağlantı noktasına adb ile bağlanan emülatör, konsolu 5554 bağlantı noktasını dinleyen emülatörle aynıdır.

Sunucu tüm cihazlarla bağlantı kurduktan sonra adb komutlarını kullanarak bu cihazlara erişebilirsiniz. Sunucu, cihazlara bağlantıları yönettiği ve birden fazla adb istemciden gelen komutları işlediği için herhangi bir cihazı herhangi bir istemciden veya bir komut dosyasından kontrol edebilirsiniz.

Cihazınızda adb hata ayıklama işlevini etkinleştirme

USB üzerinden bağlı bir cihazla adb'yi kullanmak için cihazın sistem ayarlarındaki Geliştirici seçenekleri bölümünde USB üzerinden hata ayıklama'yı etkinleştirmeniz gerekir. Android 4.2 (API düzeyi 17) ve sonraki sürümlerde Geliştirici seçenekleri ekranı varsayılan olarak gizlidir. Görünür hale getirmek için Geliştirici seçeneklerini etkinleştirin.

Artık cihazınızı USB ile bağlayabilirsiniz. adb devices komutunu android_sdk/platform-tools/ dizininden çalıştırarak cihazınızın bağlı olduğunu doğrulayabilirsiniz. Bağlıysa cihaz adını "cihaz" olarak listelenmiş şekilde görürsünüz.

Not: Android 4.2.2 (API düzeyi 17) veya sonraki sürümleri çalıştıran bir cihazı bağladığınızda sistem, bu bilgisayar üzerinden hata ayıklamaya izin veren bir RSA anahtarının kabul edilip edilmeyeceğini soran bir iletişim kutusu gösterir. Bu güvenlik mekanizması, cihazın kilidini açıp iletişim kutusunu onaylamadığınız sürece USB üzerinden hata ayıklama ve diğer adb komutlarının yürütülememesini sağlayarak kullanıcı cihazlarını korur.

USB üzerinden bir cihaza bağlanma hakkında daha fazla bilgi için Uygulamaları donanım cihazda çalıştırma başlıklı makaleyi inceleyin.

Kablosuz ağ üzerinden bir cihaza bağlanma

Not: Aşağıdaki talimatlar, Android 11 (API düzeyi 30) çalıştıran Wear cihazlar için geçerli değildir. Daha fazla bilgi için Wear OS uygulamasında hata ayıklama kılavuzuna bakın.

Android 11 (API düzeyi 30) ve sonraki sürümlerde, Android Debug Bridge (adb) kullanarak uygulamanızı iş istasyonunuzdan kablosuz olarak dağıtıp hatalarını ayıklayabilirsiniz. Örneğin, hata ayıklanabilir uygulamanızı cihazınızı USB üzerinden fiziksel olarak bağlamanıza gerek kalmadan birden fazla uzak cihaza dağıtabilirsiniz. Bu sayede, sürücü yükleme gibi yaygın USB bağlantı sorunlarıyla uğraşmanıza gerek kalmaz.

Android 17, adb 37.0.0 ile birlikte önceki sürümdeki birçok kullanılabilirlik sorununu çözen adb Wi-Fi 2.0'ı sunar. Özellikle, cihaz kablosuz hata ayıklama için güvenilen bir ağa bağlandığında iş istasyonuna otomatik olarak bağlanır.

Kablosuz hata ayıklamayı kullanmaya başlamadan önce şunları yapın:

  • İş istasyonunuzun ve cihazınızın aynı kablosuz ağa bağlı olduğundan emin olun.

  • Telefon için cihazınızda Android 11 (API düzeyi 30) veya sonraki bir sürümün, TV ve WearOS için ise Android 13 (API düzeyi 33) veya sonraki bir sürümün yüklü olduğundan emin olun. Daha fazla bilgi için Android sürümünüzü kontrol etme ve güncelleme başlıklı makaleyi inceleyin.

  • İş istasyonunuzda SDK Platform Araçları'nın en son sürümüne güncelleyin.

Kablosuz hata ayıklamayı kullanmak için cihazınızı iş istasyonunuzla QR kodu veya eşleme kodu kullanarak eşlemeniz gerekir. İş istasyonunuz ve cihazınız aynı kablosuz ağa bağlı olmalıdır. Cihazınızla eşlemek için aşağıdaki adımları uygulayın:

Not: Cihazınızı iş istasyonunuzla yalnızca bir kez eşlemeniz gerekir. Cihaz, siz açıkça unutana veya cihazınızda adb hata ayıklama yetkilerini iptal edene kadar iş istasyonunuzla eşlenmiş olarak kalır. Cihaz ve iş istasyonu aynı ağda olduğunda otomatik olarak bağlanır.

  1. Cihazınızda geliştirici seçeneklerini etkinleştirin.

  2. Cihazınızda Kablosuz hata ayıklama'ya dokunun:

    Kablosuz hata ayıklama isteminin gösterildiği bir Pixel telefonun ekran görüntüsü.
    Şekil 1. Google Pixel telefonda Kablosuz hata ayıklama istemi
  3. Ağınızda kablosuz hata ayıklamaya izin verin. Bu ağda her zaman izin ver onay kutusunu tıkladığınızda ağın güvenilir bir kablosuz hata ayıklama ağı haline geldiğini unutmayın. Cihazınız ağa bağlandığı anda bu ağda her zaman kablosuz hata ayıklamaya izin verir.

  4. Kablosuz hata ayıklama sistemleri ayarının gösterildiği Google Pixel telefonun ekran görüntüsü.
    Şekil 2. Google Pixel telefondaki Kablosuz hata ayıklama ayarı.

    Not: Android Studio kullanıcıları, cihazlarını QR koduyla eşleyebilir. Bunun için Cihazı QR koduyla eşle'yi seçip Android Studio'daki Cihazları kablosuz ağ üzerinden eşle iletişim kutusundan alınan QR kodunu taramaları gerekir.

  5. Cihazınızda Eşleme kodu kullanarak eşle'yi seçin ve cihazda gösterilen IP adresini, bağlantı noktası numarasını ve eşleme kodunu not edin.

  6. İş istasyonunuzda bir terminal penceresi açın ve android_sdk/platform-tools dizinine gidin.

  7. İş istasyonunuzun terminalinde adb pair ipaddr:port komutunu çalıştırın. Yukarıdaki IP adresini ve bağlantı noktası numarasını kullanın.

  8. İstendiğinde, aşağıda gösterildiği gibi eşleştirme kodunu girin.

    Komut satırında eşlemenin ekran görüntüsü.
    Şekil 3. Cihazınızın başarıyla eşlendiğini belirten bir mesaj gösterilir.
  9. Cihazınız eşlendikten sonra bağlı olup olmadığını doğrulayın. Artık cihazınızı kablosuz olarak, USB bağlantısı kullanıyormuş gibi kullanabilirsiniz.

    İş istasyonunuzun eşlemesini kaldırmak için cihazınızda Kablosuz hata ayıklama'ya gidin. Eşlenen cihazlar bölümünde iş istasyonunuzun adına dokunun ve Unut'u seçin. Alternatif olarak, iş istasyonunuzun ve daha önce eşlenmiş diğer tüm iş istasyonlarının eşlemesini kaldırmak için cihazınızın Ayarlar sayfasında adb hata ayıklama yetkilerini iptal et'i tıklayabilirsiniz.

  10. Kablosuz hata ayıklamayı hızlıca açıp kapatmak istiyorsanız Geliştirici Seçenekleri > Hızlı ayarlar geliştirici kutuları bölümünde bulunan Kablosuz hata ayıklama için Hızlı ayarlar geliştirici kutularını kullanabilirsiniz.

    Google Pixel telefondaki
            Hızlı ayarlar geliştirici kutularının ekran görüntüsü.
    Şekil 4. Hızlı ayarlar geliştirici kutuları ayarı, kablosuz hata ayıklamayı hızlı bir şekilde açıp kapatmanıza olanak tanır.

Kablosuz bağlantı sorunlarını çözme

Cihazınıza kablosuz olarak bağlanırken sorun yaşıyorsanız sorunu çözmek için aşağıdaki sorun giderme adımlarını deneyin.

İş istasyonunuzun ve cihazınızın ön koşulları karşılayıp karşılamadığını kontrol edin.

İş istasyonunun ve cihazın, bu bölümün başında listelenen ön koşulları karşıladığını kontrol edin.

İş istasyonunuzdaki adb kurulumunun doğru olup olmadığını kontrol edin.

İş istasyonunuzdaki ADB kurulumunuzun doğru olduğunu doğrulamak için iş istasyonunuzda bir terminal açın ve adb server-status girin. Çıkışın aşağıdakileri gösterdiğini doğrulayın:

  • version: "37.0.0" veya daha yeni bir sürüm: Bu durum geçerli değilse SDK Platform Araçları'nın en son sürümünü indirin.
  • mdns_enabled: true: Bu ayar false olarak belirlenirse adb, ağınızdaki cihazları otomatik olarak bulamaz. Bu sorunu çözmek için ADB_MDNS ortam değişkenini 1 olarak ayarlamanız, ardından adb kill-server ve adb start-server komutlarını çalıştırarak adb sunucusunu yeniden başlatmanız gerekir.
  • mdns_backend: LIBADBMDNS: Bu durum söz konusu değilse adb, ağınızdaki cihazları otomatik olarak keşfetmek için eski bir kitaplık kullanıyordur. Bu sorunu çözmek için ADB_MDNS_OPENSCREEN ortam değişkenini 0 olarak ayarlamanız, ardından adb kill-server ve adb start-server komutlarını çalıştırarak adb sunucusunu yeniden başlatmanız gerekir.

Ağınızın mDNS'yi destekleyip desteklemediğini kontrol edin

adb, eşlenen cihazları otomatik olarak keşfetmek ve bu cihazlara bağlanmak için mDNS'yi kullanır. Ağınızın mDNS'yi destekleyip desteklemediğini kontrol etmek için aşağıdakileri yapın:

  1. Cihazınızda, Kablosuz bağlantı üzerinden cihaza bağlanma bölümünde açıklandığı şekilde kablosuz hata ayıklamayı etkinleştirin.

  2. İş istasyonunuzda bir terminal açın ve adb mdns track-services --proto-text yazın.

  3. Çıktının boş olmadığını ve cihazınızın IP adresi ile bağlantı noktası numarasını içeren bir TLS hizmeti içerdiğini doğrulayın. Çıktı boşsa ağınız mDNS'yi desteklemiyor demektir. Örnek çıkış:

    tls {
      service {
        instance: "adb-35121FDJH000R8-xyMD0H"
        service: "_adb-tls-connect._tcp"
        ipv4: "192.168.84.23"
        ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c"
        port: 37895
        product_model: "Pixel 8"
        build_version_sdk_full: "37.0"
        given_name: "sherifeid Pixel"
        serial: "35121FDJH000R8"
        mdns_service_version: "2.0"
        hostname: "Android_CXUKYJY1.local"
      }
    }
              

Cihazınızın ADB Wi-Fi 2.0'ı destekleyip desteklemediğini kontrol edin.

Not: ADB Wi-Fi 2.0, Android 17 ve sonraki sürümlerde desteklenir.

Cihazınızın ADB Wi-Fi 2.0'ı destekleyip desteklemediğini kontrol etmek için aşağıdakileri yapın:

  1. Cihazınızda, Kablosuz bağlantı üzerinden cihaza bağlanma bölümünde açıklandığı şekilde kablosuz hata ayıklamayı etkinleştirin.

  2. İş istasyonunuzda bir terminal açın ve adb mdns track-services --proto-text yazın.

  3. Çıkışın mdns_service_version: "2.0" veya daha yüksek bir değer içerdiğini doğrulayın. Bu durum geçerli değilse cihazınızda Android 17 veya daha yeni bir sürüm yüklü değildir ve ADB Wi-Fi 2.0 desteklenmiyordur. Android 17 veya sonraki bir sürüme güncellemek için cihazınızda bekleyen sistem güncellemesi olup olmadığını kontrol edin. Android sürümünüzü kontrol edin ve güncelleyin.

Yeni sorun bildirme

Cihazınıza kablosuz olarak bağlanmayla ilgili sorun yaşamaya devam ediyorsanız yeni bir sorun bildirebilirsiniz. Lütfen raporunuzda aşağıdaki bilgileri sağladığınızdan emin olun:

  • Cihazınızdaki günlükler: Sorunu yeniden oluşturun ve cihaz günlüklerini ekleyin.
  • İş istasyonunuzdaki adb'den alınan günlükler:
    1. Ortam değişkenini ayarlayın ADB_TRACE=all.
    2. adb kill-server ve ardından adb start-server komutunu çalıştırarak adb sunucusunu yeniden başlatın.
    3. Sorunu yeniden oluşturun.
    4. Günlük dosyalarını bulun: adb server-status komutunu çalıştırın ve çıkışta log_absolute_path referans verilen günlük dosyasını ekleyin.

İlk USB bağlantısından sonra bir cihaza kablosuz olarak bağlanma (Android 10 ve önceki sürümlerdeki tek seçenek)

Not: Bu iş akışı Android 11 (ve sonraki sürümler) için de geçerlidir. Ancak bu iş akışında fiziksel USB üzerinden *ilk* bağlantı da gerekir.

Not: Aşağıdaki talimatlar, Android 10 (API düzeyi 29) veya önceki sürümleri çalıştıran Wear cihazlar için geçerli değildir. Daha fazla bilgi için Wear OS uygulamasında hata ayıklama hakkındaki kılavuza bakın.

adb genellikle cihazla USB üzerinden iletişim kurar ancak adb'yı kablosuz olarak da kullanabilirsiniz. Android 10 (API seviyesi 29) veya daha eski bir sürümü çalıştıran bir cihazı bağlamak için USB üzerinden şu ilk adımları uygulayın:

  1. Android cihazınızı ve adbana bilgisayarı ortak bir kablosuz ağa bağlayın.
  2. Not: Tüm erişim noktalarının uygun olmadığını unutmayın. adb'yı desteklemek için güvenlik duvarı düzgün şekilde yapılandırılmış bir erişim noktası kullanmanız gerekebilir.

  3. Cihazı bir USB kablosuyla ana bilgisayara bağlayın.
  4. Hedef cihazı 5555 numaralı bağlantı noktasında TCP/IP bağlantısını dinleyecek şekilde ayarlayın:
    adb tcpip 5555
    
  5. USB kablosunu hedef cihazdan çıkarın.
  6. Android cihazın IP adresini bulun. Örneğin, Nexus cihazlarda IP adresini Ayarlar > Tablet hakkında (veya Telefon hakkında) > Durum > IP adresi bölümünde bulabilirsiniz.
  7. Cihaza IP adresini kullanarak bağlanın:
    adb connect device_ip_address:5555
    
  8. Ana bilgisayarınızın hedef cihaza bağlı olduğunu doğrulayın:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

Cihazınız artık adb ağına bağlı.

Cihazınızla adb bağlantısı kesilirse:

  • Sunucunuzun Android cihazınızla aynı kablosuz ağa bağlı olduğundan emin olun.
  • adb connect adımını tekrar uygulayarak yeniden bağlanın.
  • Bu yöntem işe yaramazsa adb ana makinenizi sıfırlayın:
    adb kill-server
    

    Ardından baştan başlayın.

Cihaz sorgulama

adb komutlarını vermeden önce adb sunucusuna hangi cihaz örneklerinin bağlı olduğunu bilmek faydalıdır. devices komutunu kullanarak bağlı cihazların listesini oluşturun:

  adb devices -l
  

Buna karşılık adb, her cihaz için şu durum bilgilerini yazdırır:

  • Seri numarası: adb, cihazı bağlantı noktası numarasına göre benzersiz şekilde tanımlayan bir dize oluşturur. Örnek bir seri numarası: emulator-5554
  • Durum: Cihazın bağlantı durumu aşağıdakilerden biri olabilir:
    • offline: Cihaz adb'a bağlı değil veya yanıt vermiyor.
    • device: Cihaz, adb sunucusuna bağlıdır. Bu durumun, Android sisteminin tamamen başlatıldığı ve çalışır durumda olduğu anlamına gelmediğini unutmayın. Çünkü cihaz, sistem başlatılırken adb'ya bağlanır. Bu, cihazın normal çalışma durumudur.
    • no device: Bağlı cihaz yok.
  • Açıklama: -l seçeneğini eklerseniz devices komutu, cihazın ne olduğunu söyler. Bu bilgi, birden fazla cihaz bağlıyken cihazları birbirinden ayırt edebilmeniz için yararlıdır.

Aşağıdaki örnekte devices komutu ve çıkışı gösterilmektedir. Üç cihaz çalışıyor. Listedeki ilk iki satır emülatör, üçüncü satır ise bilgisayara bağlı bir donanım cihazıdır.

$ adb devices
List of devices attached
emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64
emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86
0a388e93      device usb:1-1 product:razor model:Nexus_7 device:flo

Emülatör listede yok

adb devices komutunda, çalışan emülatörlerin masaüstünüzde görünmesine rağmen adb devices çıkışında gösterilmemesine neden olan bir köşe durumu komut sırası var. Bu durum, aşağıdaki koşulların tümü doğru olduğunda gerçekleşir:

  • adb sunucusu çalışmıyor.
  • emulator komutunu -port veya -ports seçeneğiyle birlikte 5554 ile 5584 arasında tek sayılı bir bağlantı noktası değeriyle kullanırsınız.
  • Seçtiğiniz tek numaralı bağlantı noktası meşgul değilse bağlantı, belirtilen bağlantı noktası numarası üzerinden kurulabilir. Meşgulse emülatör, 2. adımda belirtilen koşulları karşılayan başka bir bağlantı noktasına geçer.
  • Emülatörü başlattıktan sonra adb sunucusunu başlatırsınız.

Bu durumu önlemenin bir yolu, emülatörün kendi bağlantı noktalarını seçmesine izin vermek ve aynı anda 16'dan fazla emülatör çalıştırmamaktır. Diğer bir yöntem ise aşağıdaki örneklerde açıklandığı gibi, emulator komutunu kullanmadan önce her zaman adb sunucusunu başlatmaktır.

1. örnek: Aşağıdaki komut dizisinde, adb devices komutu adb sunucusunu başlatır ancak cihaz listesi görünmez.

adb sunucusunu durdurun ve aşağıdaki komutları gösterilen sırayla girin. AVD adı için sisteminizdeki geçerli bir AVD adını girin. AVD adlarının listesini almak için emulator -list-avds yazın. emulator komutu android_sdk/tools dizininde bulunur.

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5555
$ adb devices

List of devices attached
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

2. örnek: Aşağıdaki komut dizisinde, adb sunucusu önce başlatıldığı için adb devices cihaz listesini görüntüler.

Emülatörü adb devices çıkışında görmek için adb sunucusunu durdurun ve ardından emulator komutunu kullandıktan sonra ve adb devices komutunu kullanmadan önce aşağıdaki şekilde tekrar başlatın:

$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5557
$ adb start-server
$ adb devices

List of devices attached
emulator-5557 device

Emülatör komut satırı seçenekleri hakkında daha fazla bilgi için Komut satırı başlangıç seçenekleri başlıklı makaleyi inceleyin.

Belirli bir cihaza komut gönderme

Birden fazla cihaz çalışıyorsa adb komutunu verirken hedef cihazı belirtmeniz gerekir. Hedefi belirtmek için aşağıdaki adımları uygulayın:

  1. Hedefin seri numarasını almak için devices komutunu kullanın.
  2. Seri numarasını aldıktan sonra, seri numarasını belirtmek için adb komutlarıyla birlikte -s seçeneğini kullanın.
    1. Çok sayıda adb komutu verecekseniz bunun yerine $ANDROID_SERIAL ortam değişkenini seri numarasını içerecek şekilde ayarlayabilirsiniz.
    2. Hem -s hem de $ANDROID_SERIAL kullanırsanız -s, $ANDROID_SERIAL'ı geçersiz kılar.

Aşağıdaki örnekte, bağlı cihazların listesi alınır ve ardından cihazlardan birinin seri numarası, ilgili cihaza helloWorld.apk yüklemek için kullanılır:

$ adb devices
List of devices attached
emulator-5554 device
emulator-5555 device
0.0.0.0:6520  device

# To install on emulator-5555
$ adb -s emulator-5555 install helloWorld.apk
# To install on 0.0.0.0:6520
$ adb -s 0.0.0.0:6520 install helloWorld.apk

Not: Birden fazla cihaz kullanılabilirken hedef cihazı belirtmeden komut verirseniz adb, "adb: more than one device/emulator" (adb: birden fazla cihaz/emülatör) hatasını gösterir.

Birden fazla cihazınız varsa ancak bunlardan yalnızca biri emülatörse emülatöre komut göndermek için -e seçeneğini kullanın. Birden fazla cihaz varsa ancak yalnızca bir donanım cihazı bağlıysa donanım cihazına komut göndermek için -d seçeneğini kullanın.

Uygulama yükleme

adb komutuyla bir emülatöre veya bağlı cihaza APK yüklemek için adb kullanabilirsiniz:install

adb install path_to_apk

Bir test APK'sı yüklerken install komutuyla birlikte -t seçeneğini kullanmanız gerekir. Daha fazla bilgi için -t sayfasına bakın.

Birden fazla APK yüklemek için install-multiple kullanın. Bu özellik, Play Console'dan uygulamanız için belirli bir cihaza yönelik tüm APK'ları indirip bunları bir emülatöre veya fiziksel cihaza yüklemek istediğinizde kullanışlıdır.

Bir emülatör/cihaz örneğine yükleyebileceğiniz bir APK dosyası oluşturma hakkında daha fazla bilgi için Uygulamanızı oluşturma ve çalıştırma başlıklı makaleyi inceleyin.

Not: Android Studio kullanıyorsanız uygulamanızı emülatöre veya cihaza yüklemek için doğrudan adb kullanmanız gerekmez. Bunun yerine, Android Studio uygulamanın paketlenmesini ve yüklenmesini sizin için gerçekleştirir.

Bağlantı noktası yönlendirmeyi kur

Belirli bir ana makine bağlantı noktasındaki istekleri bir cihazdaki farklı bir bağlantı noktasına yönlendiren rastgele bağlantı noktası yönlendirmeyi ayarlamak için forward komutunu kullanın. Aşağıdaki örnekte, ana makine bağlantı noktası 6100'ün cihaz bağlantı noktası 7100'e yönlendirilmesi ayarlanmaktadır:

adb forward tcp:6100 tcp:7100

Aşağıdaki örnekte, ana makine bağlantı noktası 6100'ün local:logd'ye yönlendirilmesi ayarlanmaktadır:

adb forward tcp:6100 local:logd

Bu, cihazdaki belirli bir bağlantı noktasına ne gönderildiğini belirlemeye çalışıyorsanız faydalı olabilir. Alınan tüm veriler, sistem günlüğü tutma arka plan programına yazılır ve cihaz günlüklerinde gösterilir.

Dosyaları bir cihaza ve cihazdan kopyalama

Dosyaları bir cihaza ve cihazdan kopyalamak için pull ve push komutlarını kullanın. Yalnızca bir APK dosyasını belirli bir konuma kopyalayan install komutunun aksine, pull ve push komutları, rastgele dizinleri ve dosyaları bir cihazdaki herhangi bir konuma kopyalamanıza olanak tanır.

Bir dosyayı veya dizini ve alt dizinlerini cihazdan kopyalamak için:

adb pull remote local

Bir dosyayı veya dizini ve alt dizinlerini cihaza kopyalamak için aşağıdakileri yapın:

adb push local remote

local ve remote değerlerini, geliştirme makinenizdeki (yerel) ve cihazdaki (uzak) hedef dosyaların/dizinin yollarıyla değiştirin. Örneğin:

adb push myfile.txt /sdcard/myfile.txt

adb sunucusunu durdurma

Bazı durumlarda, sorunu çözmek için adb sunucu sürecini sonlandırıp yeniden başlatmanız gerekebilir. Örneğin, adb bir komuta yanıt vermediğinde bu durum söz konusu olabilir.

adb sunucusunu durdurmak için adb kill-server komutunu kullanın. Ardından, başka bir adb komutu vererek sunucuyu yeniden başlatabilirsiniz.

adb komutları yayınlama

Geliştirme makinenizdeki bir komut satırından veya aşağıdaki komutları kullanarak bir komut dosyası üzerinden adb komutları verin:

adb [-d | -e | -s serial_number] command

Yalnızca bir emülatör çalışıyorsa veya yalnızca bir cihaz bağlıysa adb komutu varsayılan olarak bu cihaza gönderilir. Birden fazla emülatör çalışıyorsa ve/veya birden fazla cihaz bağlıysa komutun yönlendirileceği hedef cihazı belirtmek için -d, -e veya -s seçeneğini kullanmanız gerekir.

Aşağıdaki komutu kullanarak desteklenen tüm adb komutlarının ayrıntılı listesini görebilirsiniz:

adb --help

Kabuk komutları verme

shell komutunu kullanarak adb üzerinden cihaz komutları verebilir veya etkileşimli bir kabuk başlatabilirsiniz. Tek bir komut vermek için shell komutunu şu şekilde kullanın:

adb [-d |-e | -s serial_number] shell shell_command

Bir cihazda etkileşimli kabuk başlatmak için shell komutunu şu şekilde kullanın:

adb [-d | -e | -s serial_number] shell

Etkileşimli bir kabuktan çıkmak için Control+D tuşuna basın veya exit yazın.

Android, normal Unix komut satırı araçlarının çoğunu sağlar. Kullanılabilir araçların listesi için aşağıdaki komutu kullanın:

adb shell ls /system/bin

Komutların çoğu için --help bağımsız değişkeniyle yardım alabilirsiniz. Kabuk komutlarının çoğu toybox tarafından sağlanır. Tüm toybox komutları için geçerli olan genel yardım toybox --help ile kullanılabilir.

Android Platform Tools 23 ve sonraki sürümlerde adb, bağımsız değişkenleri ssh(1) komutuyla aynı şekilde işler. Bu değişiklik, komut yerleştirme ile ilgili birçok sorunu düzeltti ve kabuk metakarakterleri (ör. adb install Let\'sGo.apk) içeren komutların güvenli bir şekilde yürütülmesini sağladı. Bu değişiklik, kabuk metakarakterleri içeren komutların yorumlanmasının da değiştiği anlamına gelir.

Örneğin, tırnak işaretleri yerel kabuk tarafından yutulduğu ve cihaz adb shell setprop key two words gördüğü için adb shell setprop key 'two words' artık bir hatadır. Komutun çalışması için ssh(1) ile yaptığınız gibi iki kez alıntı yapın (bir kez yerel kabuk için, bir kez de uzak kabuk için). Örneğin, adb shell setprop key "'two words'" çalışır. Bunun nedeni, yerel kabuğun dış tırnak düzeyini alması ve cihazın yine de iç tırnak düzeyini (setprop key 'two words') görmesidir. Kaçış karakteri kullanmak da bir seçenektir ancak genellikle iki kez tırnak işareti kullanmak daha kolaydır.

Sistem günlüğünü izlemek için yararlı olan Logcat komut satırı aracını da inceleyin.

Arama etkinliği yöneticisi

Bir adb kabuğunda, etkinlik yöneticisi (am) aracıyla komutlar vererek etkinlik başlatma, işlemi durdurmaya zorlama, amaç yayınlama, cihaz ekran özelliklerini değiştirme gibi çeşitli sistem işlemleri gerçekleştirebilirsiniz.

Kabukta am söz dizimi şu şekildedir:

am command

Ayrıca, uzak kabuğa girmeden doğrudan adb etkinlik yöneticisi komutu da verebilirsiniz. Örneğin:

adb shell am start -a android.intent.action.VIEW

Tablo 1. Kullanılabilir etkinlik yöneticisi komutları

Komut Açıklama
start [options] intent intent tarafından belirtilen Activity başlatın.

Niyet bağımsız değişkenleri spesifikasyonuna bakın.

Şu seçenekleri kullanabilirsiniz:

  • -D: Hata ayıklamayı etkinleştirin.
  • -W: Lansmanın tamamlanmasını bekleyin.
  • --start-profiler file: Profil aracını başlatın ve sonuçları file adresine gönderin.
  • -P file: --start-profiler gibi, ancak uygulama boşta kaldığında profil oluşturma durur.
  • -R count: Etkinlik başlatma işlemini count kez tekrarlayın. Her tekrardan önce en üstteki etkinlik tamamlanır.
  • -S: Etkinliği başlatmadan önce hedef uygulamayı zorla durdurun.
  • --opengl-trace: OpenGL işlevlerinin izlenmesini etkinleştirin.
  • --user user_id | current: Hangi kullanıcı olarak çalıştırılacağını belirtin. Belirtilmezse geçerli kullanıcı olarak çalıştırılır.
startservice [options] intent intent tarafından belirtilen Service başlatır.

Niyet bağımsız değişkenleri spesifikasyonuna bakın.

Şu seçenekleri kullanabilirsiniz:

  • --user user_id | current: Hangi kullanıcının çalıştırılacağını belirtin. Belirtilmezse geçerli kullanıcı olarak çalıştırılır.
force-stop package package ile ilişkili her şeyi zorla durdurun.
kill [options] package package ile ilişkili tüm işlemleri sonlandırın. Bu komut yalnızca sonlandırılması güvenli olan ve kullanıcı deneyimini etkilemeyecek işlemleri sonlandırır.

Şu seçenekleri kullanabilirsiniz:

  • --user user_id | all | current: Hangi kullanıcının işlemlerinin sonlandırılacağını belirtin. Belirtilmezse tüm kullanıcıların işlemlerini sonlandırın.
kill-all Tüm arka plan işlemlerini sonlandırın.
broadcast [options] intent Bir yayın intent'i yayınlayın.

Niyet bağımsız değişkenleri spesifikasyonuna bakın.

Şu seçenekleri kullanabilirsiniz:

  • [--user user_id | all | current]: Hangi kullanıcıya gönderileceğini belirtin. Belirtilmezse tüm kullanıcılara gönderilir.
instrument [options] component Instrumentation örneğiyle izlemeye başlayın. Genellikle hedef component test_package/runner_class biçimindedir.

Şu seçenekleri kullanabilirsiniz:

  • -r: Ham sonuçları yazdırın (aksi takdirde kod çözülür report_key_streamresult). Performans ölçümleri için ham çıkış oluşturmak üzere [-e perf true] ile birlikte kullanın.
  • -e name value: name bağımsız değişkenini value olarak ayarlayın. Test çalıştırıcıları için yaygın bir biçim -e testrunner_flag value[,value...] şeklindedir.
  • -p file: Profil oluşturma verilerini file konumuna yazın.
  • -w: Geri dönmeden önce enstrümantasyonun tamamlanmasını bekleyin. Test çalıştırıcıları için gereklidir.
  • --no-window-animation: Çalışırken pencere animasyonlarını devre dışı bırakın.
  • --user user_id | current: Hangi kullanıcı enstrümantasyonunun çalıştırılacağını belirtin. Belirtilmezse geçerli kullanıcıda çalıştırılır.
profile start process file process üzerinde profil oluşturma aracını başlatın, sonuçları file konumuna yazın.
profile stop process process üzerinde profiler'ı durdurun.
dumpheap [options] process file process yığınını boşaltın, file adresine yazın.

Şu seçenekleri kullanabilirsiniz:

  • --user [user_id | current]: İşlem adı sağlarken, dökümü alınacak işlemin kullanıcısını belirtin. Belirtilmezse mevcut kullanıcı kullanılır.
  • -b [| png | jpg | webp]: Grafikler belleğinden bit eşlemleri boşaltır (API düzeyi 35 ve üzeri). İsteğe bağlı olarak, döküm yapılacak biçimi belirtin (varsayılan olarak PNG).
  • -n: Yönetilen bellek yığını yerine yerel bellek yığını dökümü oluşturun.
dumpbitmaps [options] [-p process] process (API düzeyi 36 ve üzeri) sürümünden bit eşlem bilgilerini döküm yapın.

Şu seçenekleri kullanabilirsiniz:

  • -d|--dump [format]: Belirtilen format'deki bitmap içeriklerini boşaltır. format, png, jpg veya webp olabilir. Hiçbiri belirtilmemişse varsayılan olarak png kullanılır. Bit eşlemlerle bir zip dosyası dumpbitmaps-<time>.zip oluşturulur.
  • -p process: process konumundan bit eşlemleri boşaltır. Birden fazla -p process belirtilebilir.
process belirtilmezse tüm işlemlerden bit eşlemler dökülür.
set-debug-app [options] package Hata ayıklanacak uygulamayı package olarak ayarlayın.

Şu seçenekleri kullanabilirsiniz:

  • -w: Uygulama başladığında hata ayıklayıcının beklemesini sağlar.
  • --persistent: Bu değeri koruyun.
clear-debug-app set-debug-app ile hata ayıklama için daha önce ayarlanan paketi temizleyin.
monitor [options] Kilitlenmeleri veya ANR'leri izlemeye başlayın.

Şu seçenekleri kullanabilirsiniz:

  • --gdb: Kilitlenme/ANR sırasında belirtilen bağlantı noktasında gdbserv başlatın.
screen-compat {on | off} package package'ın ekran uyumluluğu modunu kontrol edin.
display-size [reset | widthxheight] Cihazın görüntü boyutunu geçersiz kılın. Bu komut, büyük ekranlı bir cihaz kullanarak küçük ekran çözünürlüğünü taklit ederek uygulamanızı farklı ekran boyutlarında test etmek için kullanışlıdır ve bunun tersi de geçerlidir.

Örnek:
am display-size 1280x800

display-density dpi Cihazın görüntü yoğunluğunu geçersiz kılın. Bu komut, düşük yoğunluklu bir ekran kullanarak yüksek yoğunluklu bir ekran ortamını taklit ederek uygulamanızı farklı ekran yoğunluklarında test etmenize yardımcı olur ve bunun tersi de geçerlidir.

Örnek:
am display-density 480

to-uri intent Belirtilen amaç spesifikasyonunu URI olarak yazdır.

Niyet bağımsız değişkenleri spesifikasyonuna bakın.

to-intent-uri intent Belirtilen amaç spesifikasyonunu intent: URI'si olarak yazdır.

Niyet bağımsız değişkenleri spesifikasyonuna bakın.

Niyet bağımsız değişkenlerinin özellikleri

intent bağımsız değişkeni alan etkinlik yöneticisi komutları için amacı aşağıdaki seçeneklerle belirtebilirsiniz:

Paket yöneticisini çağırın (pm)

Bir adb kabuğunda, cihazda yüklü uygulama paketlerinde işlem ve sorgu gerçekleştirmek için paket yöneticisi (pm) aracıyla komutlar verebilirsiniz.

Kabukta pm söz dizimi şu şekildedir:

pm command

Ayrıca, uzak kabuk girmeden doğrudan adb üzerinden bir paket yöneticisi komutu da verebilirsiniz. Örneğin:

adb shell pm uninstall com.example.MyApp

Tablo 2. Kullanılabilir paket yöneticisi komutları

Komut Açıklama
list packages [options] filter Tüm paketleri yazdırın. İsteğe bağlı olarak yalnızca paket adında filter içindeki metni içeren paketleri yazdırabilirsiniz.

Seçenekler:

  • -f: İlişkilendirilmiş dosyayı görün.
  • -d: Yalnızca devre dışı bırakılmış paketleri göstermek için filtreleyin.
  • -e: Yalnızca etkin paketleri göstermek için filtreleyin.
  • -s: Yalnızca sistem paketlerini gösterecek şekilde filtreleyin.
  • -3: Yalnızca üçüncü taraf paketlerini göstermek için filtreleyin.
  • -i: Paketlerin yükleyicisini görün.
  • -u: Kaldırılan paketleri dahil edin.
  • --user user_id: Sorgulanacak kullanıcı alanı.
list permission-groups Bilinen tüm izin gruplarını yazdırın.
list permissions [options] group Bilinen tüm izinleri yazdırın. İsteğe bağlı olarak yalnızca group içindeki izinleri yazdırabilirsiniz.

Seçenekler:

  • -g: Gruplara göre düzenleyin.
  • -f: Tüm bilgileri yazdırın.
  • -s: Kısa özet.
  • -d: Yalnızca tehlikeli izinleri listeleyin.
  • -u: Yalnızca kullanıcıların göreceği izinleri listeleyin.
list instrumentation [options] Tüm test paketlerini listeleyin.

Seçenekler:

  • -f: Test paketinin APK dosyasını listeleyin.
  • target_package: Yalnızca bu uygulama için test paketlerini listeler.
list features Sistemin tüm özelliklerini yazdırın.
list libraries Mevcut cihaz tarafından desteklenen tüm kitaplıkları yazdırın.
list users Sistemdeki tüm kullanıcıları yazdırın.
path package Belirtilen package APK'sının yolunu yazdırın.
install [options] path path tarafından belirtilen bir paketi sisteme yükler.

Seçenekler:

  • -r: Mevcut bir uygulamayı verilerini koruyarak yeniden yükleyin.
  • -t: Test APK'larının yüklenmesine izin verin. Gradle, yalnızca uygulamanızı çalıştırdığınızda veya hata ayıklama işlemini gerçekleştirdiğinizde ya da Android Studio'nun Build > Build APK komutunu kullandığınızda bir test APK'sı oluşturur. APK, geliştirici önizleme SDK'sı kullanılarak oluşturulduysa test APK'sı yüklüyorsanız install komutuyla birlikte -t seçeneğini eklemeniz gerekir.
  • -i installer_package_name: Yükleyici paket adını belirtin.
  • --user user_id: Paketin yükleneceği kullanıcıyı belirtin. Varsayılan olarak, paket cihazda bulunan tüm kullanıcılar için yüklenir.
  • --install-location location: Aşağıdaki değerlerden birini kullanarak yükleme konumunu ayarlayın:
    • 0: Varsayılan yükleme konumunu kullanın.
    • 1: Dahili cihaz depolama alanına yükleyin.
    • 2: Harici medyaya yükleme
  • -f: Paketi dahili sistem belleğine yükleyin.
  • -d: Sürüm kodu düşürmeye izin verin.
  • -g: Uygulama manifestinde listelenen tüm izinleri verin.
  • --fastdeploy: Yüklü bir paketi, yalnızca değişen APK bölümlerini güncelleyerek hızlıca güncelleyin.
  • --incremental: Uygulamayı başlatmak için yeterli miktarda APK'yı yüklerken kalan verileri arka planda yayınlar. Bu özelliği kullanmak için APK'yı imzalamanız, APK İmza Şeması v4 dosyası oluşturmanız ve bu dosyayı APK ile aynı dizine yerleştirmeniz gerekir. Bu özellik yalnızca belirli cihazlarda desteklenir. Bu seçenek, adb özelliğin kullanılmasını zorunlu kılar. Özellik desteklenmiyorsa ayrıntılı bilgilerle birlikte başarısız olur. APK'ya erişim izni vermeden önce APK'nın tamamen yüklenmesini beklemek için --wait seçeneğini ekleyin.

    --no-incremental, adb uygulamasının bu özelliği kullanmasını engelliyor.

uninstall [options] package Paketi sistemden kaldırır.

Seçenekler:

  • -k: Paket kaldırıldıktan sonra veri ve önbellek dizinlerini koruyun.
  • --user user_id: Paketin kaldırıldığı kullanıcıyı belirtir. Varsayılan olarak, paket cihazdaki tüm kullanıcılar için kaldırılır.
  • --versionCode version_code: Yalnızca uygulama belirtilen sürüm koduna sahipse kaldırılır.
clear package Bir paketle ilişkili tüm verileri silin.
enable package_or_component Belirtilen paketi veya bileşeni (ör. "package/class") etkinleştirin.
disable package_or_component Belirtilen paketi veya bileşeni devre dışı bırakır ("paket/sınıf" olarak yazılır).
disable-user [options] package_or_component

Seçenekler:

  • --user user_id: Devre dışı bırakılacak kullanıcı.
grant package_name permission Bir uygulamaya izin verme. Android 6.0 (API seviyesi 23) ve sonraki sürümlerin yüklü olduğu cihazlarda izin, uygulama manifest dosyasında belirtilen herhangi bir izin olabilir. Android 5.1 (API düzeyi 22) ve önceki sürümlerin yüklü olduğu cihazlarda, uygulama tarafından tanımlanan isteğe bağlı bir izin olmalıdır.
revoke package_name permission Uygulamadan izni iptal etme. Android 6.0 (API düzeyi 23) ve sonraki sürümlerini çalıştıran cihazlarda izin, uygulama manifest dosyasında belirtilen herhangi bir izin olabilir. Android 5.1 (API düzeyi 22) ve önceki sürümlerini çalıştıran cihazlarda ise uygulama tarafından tanımlanan isteğe bağlı bir izin olmalıdır.
set-install-location location Varsayılan yükleme konumunu değiştirin. Konum değerleri:
  • 0: Otomatik: En iyi konuma sistemin karar vermesine izin verin.
  • 1: Dahili: Dahili cihaz depolama alanına yükleyin.
  • 2: Harici: Harici medyaya yükleyin.

Not: Bu özellik yalnızca hata ayıklama amacıyla kullanılır. Bunu kullanmak, uygulamaların bozulmasına ve diğer istenmeyen davranışlara neden olabilir.

get-install-location Mevcut yükleme konumunu döndürür. Döndürülen değerler:
  • 0 [auto]: En iyi konuma sistem karar versin
  • 1 [internal]: Dahili cihaz depolama alanına yükleme
  • 2 [external]: Harici medyaya yükleme
set-permission-enforced permission [true | false] Belirtilen iznin zorunlu kılınıp kılınmayacağını belirtin.
trim-caches desired_free_space Belirtilen boş alana ulaşmak için önbellek dosyalarını kırpın.
create-user user_name Belirtilen user_name ile yeni bir kullanıcı oluşturun, kullanıcının yeni kullanıcı tanımlayıcısını yazdırın.
remove-user user_id Belirtilen user_id ile kullanıcıyı kaldırın ve bu kullanıcıyla ilişkili tüm verileri silin.
get-max-users Cihazın desteklediği maksimum kullanıcı sayısını yazdırın.
get-app-links [options] [package]

Belirtilen package için veya hiçbiri belirtilmemişse tüm paketler için alan adı doğrulama durumunu yazdırın. Durum kodları aşağıdaki gibi tanımlanır:

  • none: Bu alan için hiçbir şey kaydedilmedi
  • verified: Alan başarıyla doğrulandı
  • approved: genellikle kabuk üzerinden zorunlu olarak onaylandı
  • denied: Genellikle kabuk üzerinden zorla reddedilir.
  • migrated: Eski bir yanıttan doğrulama korunmuş
  • restored: Kullanıcı verileri geri yüklenirken doğrulama korunur.
  • legacy_failure: eski bir doğrulayıcı tarafından reddedildi, nedeni bilinmiyor
  • system_configured: cihaz yapılandırması tarafından otomatik olarak onaylandı
  • >= 1024: Cihaz doğrulayıcıya özgü özel hata kodu

Şu seçenekleri kullanabilirsiniz:

  • --user user_id: kullanıcı seçimlerini içerir. Yalnızca otomatik doğrulama alanları değil, tüm alanları dahil edin.
reset-app-links [options] [package]

Belirtilen paketin veya belirtilmemişse tüm paketlerin alan adı doğrulama durumunu sıfırlar.

  • package: Sıfırlanacak paket veya tüm paketleri sıfırlamak için "all"

Şu seçenekleri kullanabilirsiniz:

  • --user user_id: kullanıcı seçimlerini içerir. Yalnızca otomatik doğrulama alanları değil, tüm alanları dahil edin.
verify-app-links [--re-verify] [package]

Belirtilen package için veya belirtilmemişse tüm paketler için doğrulama isteği yayınlayın. Yalnızca paket daha önce yanıt kaydetmediyse gönderilir.

  • --re-verify: Paket yanıt kaydetmiş olsa bile gönder
set-app-links [--package package] state domains

Bir paketin alan durumunu manuel olarak ayarlayın. Bu özelliğin çalışması için alan, paket tarafından autoVerify olarak bildirilmelidir. Bu komut, uygulanamayan alanlar için hata bildirmez.

  • --package package: Ayarlanacak paket veya tüm paketleri ayarlamak için "all"
  • state: Alanların ayarlanacağı kod. Geçerli değerler:
    • STATE_NO_RESPONSE (0): Hiç yanıt kaydedilmemiş gibi sıfırlayın.
    • STATE_SUCCESS (1): Alanın, alan doğrulama aracısı tarafından başarıyla doğrulanmış gibi ele alınması. Alan doğrulama aracısının bu durumu geçersiz kılabileceğini unutmayın.
    • STATE_APPROVED (2): Alanı her zaman onaylanmış olarak kabul edin. Bu, alan doğrulama aracısının alanı değiştirmesini engeller.
    • STATE_DENIED (3): Alanı her zaman reddedilmiş olarak değerlendirir ve alan doğrulama aracısının alanı değiştirmesini engeller.
  • domains: Değiştirilecek alanların boşlukla ayrılmış listesi veya her alanı değiştirmek için "all".
set-app-links-user-selection --user user_id [--package package] enabled domains

Bir paket için ana makine kullanıcı seçiminin durumunu manuel olarak ayarlayın. Bu özelliğin çalışması için alan adı paket tarafından bildirilmelidir. Bu komut, uygulanamayan alanlar için hata bildirmez.

  • --user user_id: Seçimleri değiştirilecek kullanıcı
  • --package package: ayarlanacak paket
  • enabled: Alanın onaylanıp onaylanmayacağı
  • domains: Değiştirilecek alanların boşlukla ayrılmış listesi veya her alanı değiştirmek için "all" (tümü)
set-app-links-allowed --user user_id [--package package] allowed

Bir paket için otomatik olarak doğrulanmış bağlantı işleme ayarını açın veya kapatın.

  • --user user_id: Seçimleri değiştirilecek kullanıcı
  • --package package: Ayarlanacak paket veya tüm paketleri ayarlamak için "all"; paket belirtilmezse paketler sıfırlanır
  • allowed: Paketin otomatik olarak doğrulanmış bağlantıları açmasına izin vermek için true, devre dışı bırakmak için false
get-app-link-owners --user user_id [--package package] domains

Belirli bir alanın sahiplerini, belirli bir kullanıcı için düşükten yükseğe öncelik sırasına göre yazdırın.

  • --user user_id: Sorgulanacak kullanıcı
  • --package package: İsteğe bağlı olarak, bir paket tarafından beyan edilen tüm web alanları için de yazdırın veya tüm paketleri yazdırmak için "all" (tümü) seçeneğini kullanın.
  • domains: sorgulanacak alanların boşlukla ayrılmış listesi

Cihaz politikası yöneticisini arama (dpm)

Cihaz yönetimi uygulamalarınızı geliştirip test etmenize yardımcı olması için cihaz politikası yöneticisi (dpm) aracına komutlar verin. Etkin yönetici uygulamasını kontrol etmek veya cihazdaki bir politikanın durum verilerini değiştirmek için bu aracı kullanın.

Kabukta dpmsöz dizimi:

dpm command

Ayrıca, adb üzerinden doğrudan cihaz politikası yöneticisi komutu da verebilirsiniz. Uzak kabuk girmenize gerek yoktur:

adb shell dpm command

Tablo 3. Kullanılabilir cihaz politikası yöneticisi komutları

Komut Açıklama
set-active-admin [options] component component öğesini etkin yönetici olarak ayarlar.

Şu seçenekleri kullanabilirsiniz:

  • --user user_id: Hedef kullanıcıyı belirtin. Mevcut kullanıcıyı seçmek için --user current değerini de iletebilirsiniz.
set-profile-owner [options] component Mevcut bir kullanıcı için component adlı ürünü etkin yönetici ve paketini profil sahibi olarak ayarlayın.

Şu seçenekleri kullanabilirsiniz:

  • --user user_id: Hedef kullanıcıyı belirtin. Ayrıca, geçerli kullanıcıyı seçmek için --user current tuşuna da basabilirsiniz.
  • --name name: Kullanıcılar tarafından okunabilen kuruluş adını belirtin.
set-device-owner [options] component component uygulamasını etkin yönetici, paketini ise cihaz sahibi olarak ayarlayın.

Şu seçenekleri kullanabilirsiniz:

  • --user user_id: Hedef kullanıcıyı belirtin. Mevcut kullanıcıyı seçmek için --user current değerini de iletebilirsiniz.
  • --name name: Kullanıcılar tarafından okunabilen kuruluş adını belirtin.
remove-active-admin [options] component Etkin bir yöneticiyi devre dışı bırakın. Uygulama, manifest dosyasında android:testOnly beyan etmelidir. Bu komut, cihaz ve profil sahiplerini de kaldırır.

Şu seçenekleri kullanabilirsiniz:

  • --user user_id: Hedef kullanıcıyı belirtin. Mevcut kullanıcıyı seçmek için --user current değerini de iletebilirsiniz.
clear-freeze-period-record Cihazın, sistem OTA güncellemeleri için daha önce ayarlanan dondurma dönemleriyle ilgili kaydını temizleyin. Bu, dondurma dönemlerini yöneten uygulamalar geliştirirken cihaz planlama kısıtlamalarını önlemek için kullanışlıdır. Sistem güncellemelerini yönetme başlıklı makaleyi inceleyin.

Android 9.0 (API düzeyi 28) ve sonraki sürümlerin yüklü olduğu cihazlarda desteklenir.

force-network-logs Sistemi, mevcut ağ günlüklerini bir DPC tarafından alınmaya hazır hale getirmeye zorlayın. Bağlantı veya DNS günlükleri varsa DPC, onNetworkLogsAvailable() geri araması alır. Ağ etkinliği günlük kaydı bölümüne bakın.

Bu komutun kullanım sıklığı sınırlıdır. Android 9.0 (API düzeyi 28) ve sonraki sürümleri çalıştıran cihazlarda desteklenir.

force-security-logs Sistemi, mevcut güvenlik günlüklerini DPC'ye sunmaya zorlayın. Günlükler varsa DPC, onSecurityLogsAvailable() geri aramasını alır. Kurumsal cihaz etkinliğini günlüğe kaydetme başlıklı makaleyi inceleyin.

Bu komutun kullanım sıklığı sınırlıdır. Android 9.0 (API düzeyi 28) ve sonraki sürümleri çalıştıran cihazlarda desteklenir.

Ekran görüntüsü al

screencap komutu, cihaz ekranının ekran görüntüsünü almak için kullanılan bir kabuk yardımcı programıdır.

Kabukta screencap söz dizimi:

screencap filename

screencap komut satırını kullanmak için aşağıdakileri girin:

adb shell screencap /sdcard/screen.png

Ekran görüntüsünü yakalamak için adb kabuğunun, dosyayı cihazdan indirmek için ise pull komutunun kullanıldığı örnek bir ekran görüntüsü oturumunu aşağıda bulabilirsiniz:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

Alternatif olarak, dosya adını atlarsanız screencap, resmi standart çıkışa yazar. PNG biçimini belirtmek için -p seçeneğiyle birlikte kullanıldığında cihaz ekran görüntüsünü doğrudan yerel makinenizdeki bir dosyaya aktarabilirsiniz.

Ekran görüntüsü alma ve tek bir komutla yerel olarak kaydetme örneğini aşağıda bulabilirsiniz:

# use 'exec-out' instead of 'shell' to get raw data
$ adb exec-out screencap -p > screen.png

Video kaydetme

screenrecord komutu, Android 4.4 (API düzeyi 19) ve sonraki sürümleri çalıştıran cihazların ekranını kaydetmek için kullanılan bir kabuk yardımcı programıdır. Yardımcı program, ekran etkinliğini MPEG-4 dosyasına kaydeder. Bu dosyayı tanıtım veya eğitim videoları oluşturmak ya da hata ayıklama ve test için kullanabilirsiniz.

Bir kabukta aşağıdaki söz dizimini kullanın:

screenrecord [options] filename

screenrecord komut satırını kullanmak için aşağıdakileri girin:

adb shell screenrecord /sdcard/demo.mp4

Control+C tuşlarına basarak ekran kaydını durdurun. Aksi takdirde kayıt, üç dakika sonra veya --time-limit tarafından belirlenen süre sınırında otomatik olarak durdurulur.

Cihazınızın ekranını kaydetmeye başlamak için screenrecord komutunu çalıştırarak videoyu kaydedin. Ardından, videoyu cihazdan ana bilgisayara indirmek için pull komutunu çalıştırın. Aşağıda örnek bir kayıt oturumu verilmiştir:

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

screenrecord yardımcı programı, istediğiniz desteklenen çözünürlük ve bit hızında kayıt yapabilirken cihaz ekranının en-boy oranını korur. Yardımcı program, varsayılan olarak yerel ekran çözünürlüğünde ve yönünde kayıt yapar. Maksimum uzunluk üç dakikadır.

screenrecord yardımcı programının sınırlamaları:

  • Ses, video dosyasıyla birlikte kaydedilmez.
  • Video kaydı, Wear OS çalıştıran cihazlarda kullanılamaz.
  • Bazı cihazlar, yerel ekran çözünürlüklerinde kayıt yapamayabilir. Ekran kaydıyla ilgili sorun yaşarsanız daha düşük bir ekran çözünürlüğü kullanmayı deneyin.
  • Kayıt sırasında ekranın döndürülmesi desteklenmez. Kayıt sırasında ekran dönerse kayıtta ekranın bir kısmı kesilir.

Tablo 4. screenrecord seçenek

Seçenekler Açıklama
--help Komut söz dizimini ve seçeneklerini görüntüleme
--size widthxheight Video boyutunu ayarlayın: 1280x720. Varsayılan değer, cihazın yerel ekran çözünürlüğüdür (destekleniyorsa). Desteklenmiyorsa 1280x720'dir. En iyi sonuçlar için cihazınızın Advanced Video Coding (AVC) kodlayıcısı tarafından desteklenen bir boyut kullanın.
--bit-rate rate Videonun video bit hızını saniye başına megabit cinsinden ayarlayın. Varsayılan değer 20 Mb/sn'dir. Video kalitesini artırmak için bit hızını yükseltebilirsiniz ancak bu durumda film dosyaları daha büyük olur. Aşağıdaki örnekte kayıt bit hızı 6 Mbps olarak ayarlanmıştır:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time Maksimum kayıt süresini saniye cinsinden ayarlayın. Varsayılan ve maksimum değer 180'dir (3 dakika).
--rotate Çıkışı 90 derece döndürün. Bu özellik deneyseldir.
--verbose Komut satırı ekranında günlük bilgilerini gösterir. Bu seçeneği ayarlamazsanız program çalışırken herhangi bir bilgi göstermez.

Uygulamalar için ART profillerini okuma

Android 7.0 (API düzeyi 24) sürümünden itibaren Android Çalışma Zamanı (ART), yüklü uygulamalar için yürütme profilleri toplar. Bu profiller, uygulama performansını optimize etmek için kullanılır. Hangi yöntemlerin sık sık yürütüldüğünü ve uygulama başlatılırken hangi sınıfların kullanıldığını anlamak için toplanan profilleri inceleyin.

Not: Yürütme profili dosya adını yalnızca dosya sistemine kök erişiminiz varsa (ör. bir emülatörde) alabilirsiniz.

Profil bilgilerinin metin biçimini oluşturmak için aşağıdaki komutu kullanın:

adb shell cmd package dump-profiles package

Üretilen dosyayı almak için:

adb pull /data/misc/profman/package.prof.txt

Test cihazlarını sıfırlama

Uygulamanızı birden fazla test cihazında test ediyorsanız testler arasında cihazınızı sıfırlamak (ör. kullanıcı verilerini kaldırmak ve test ortamını sıfırlamak için) faydalı olabilir. Android 10 (API düzeyi 29) veya sonraki sürümleri çalıştıran bir test cihazını fabrika ayarlarına sıfırlamak için testharness adb kabuk komutunu aşağıdaki şekilde kullanabilirsiniz:

adb shell cmd testharness enable

testharness kullanılarak cihaz geri yüklendiğinde cihaz, mevcut iş istasyonu üzerinden hata ayıklamaya olanak tanıyan RSA anahtarını kalıcı bir konuma otomatik olarak yedekler. Yani cihaz sıfırlandıktan sonra iş istasyonu, yeni bir anahtarı manuel olarak kaydetmeden hata ayıklamaya ve cihaza adb komutları vermeye devam edebilir.

Ayrıca, uygulamanızı test etmeye devam etmenizi kolaylaştırmak ve güvenliğini artırmak için testharness kullanılarak cihaz geri yüklendiğinde aşağıdaki cihaz ayarları da değiştirilir:

  • Cihaz, ilk cihaz kurulumu sihirbazlarının görünmemesi için belirli sistem ayarlarını yapar. Yani cihaz, uygulamanızı hızlı bir şekilde yükleyebileceğiniz, hata ayıklayabileceğiniz ve test edebileceğiniz bir duruma girer.
  • Ayarlar:
    • Kilit ekranını devre dışı bırakır.
    • Acil durum uyarılarını devre dışı bırakır.
    • Hesaplar için otomatik senkronizasyonu devre dışı bırakır.
    • Otomatik sistem güncellemelerini devre dışı bırakır.
  • Diğer:
    • Önceden yüklenmiş güvenlik uygulamalarını devre dışı bırakır.

Uygulamanızın testharness komutunun varsayılan ayarlarını algılaması ve bu ayarlara uyum sağlaması gerekiyorsa ActivityManager.isRunningInUserTestHarness() kullanın.

sqlite

sqlite3, SQLite veritabanlarını incelemek için sqlite komut satırı programını başlatır. Tablo içeriğini yazdırmak için .dump ve mevcut bir tablo için SQL CREATE ifadesini yazdırmak için .schema gibi komutlar içerir. Ayrıca, gösterildiği gibi komut satırından SQLite komutları da yürütebilirsiniz:

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

Not: SQLite veritabanına yalnızca dosya sistemine kök erişiminiz varsa (ör. bir emülatörde) erişebilirsiniz.

Daha fazla bilgi için sqlite3 komut satırı belgelerini inceleyin.

adb USB arka uçları

adb sunucusu, USB yığınıyla iki arka uç üzerinden etkileşim kurabilir. İşletim sisteminin (Windows, Linux veya macOS) yerel arka ucunu ya da libusb arka ucunu kullanabilir. attach, detach ve USB hız algılama gibi bazı özellikler yalnızca libusb arka ucu kullanılırken kullanılabilir.

ADB_LIBUSB ortam değişkenini kullanarak bir arka uç seçebilirsiniz. Ayarlanmazsa adb, varsayılan arka ucunu kullanır. Varsayılan davranış, işletim sistemine göre değişir. ADB v34'ten itibaren, yerel arka uçun varsayılan olarak kullanıldığı Windows hariç tüm işletim sistemlerinde varsayılan olarak liubusb arka ucu kullanılır. ADB_LIBUSB ayarlanırsa yerel arka ucun mu yoksa libusb'nin mi kullanılacağını belirler. adb ortam değişkenleri hakkında daha fazla bilgi için adb kılavuz sayfasına bakın.

adb mDNS arka uçları

ADB, kablosuz hata ayıklama için sunucuyu ve cihazları otomatik olarak bağlamak üzere mDNS (çoklu yayın DNS) protokolünü kullanır. ADB v37 itibarıyla ADB sunucusu, libadbmdns ve openscreen olmak üzere iki mDNS arka ucuyla birlikte gelir.

Varsayılan ve önerilen arka uç libadbmdns'dır. Bu davranış, ADB_MDNS_OPENSCREEN ortam değişkeni (1 veya 0 olarak ayarlanır) kullanılarak değiştirilebilir. macOS'te Openscreen arka ucu desteği ADB v35'ten itibaren kullanılabilir. ADB v34'ten itibaren Windows ve Linux desteklenmektedir.

adb Burst Mode (ADB 36.0.0'dan itibaren)

Patlatma modu, cihaz önceki pakete yanıt vermeden önce bile ADB'nin cihaza paket göndermeye devam etmesini sağlayan deneysel bir özelliktir. Bu, büyük dosyalar aktarılırken ADB'nin işleme hızını önemli ölçüde artırır ve hata ayıklama sırasında gecikmeyi azaltır.

Seri çekim modu varsayılan olarak devre dışıdır. Özelliği etkinleştirmek için aşağıdakilerden birini yapın:

  • ADB_BURST_MODE ortam değişkenini 1 olarak ayarlayın.
  • Android Studio'da File (veya macOS'te Android Studio) > Settings > Build, Execution, Deployment > Debugger bölümündeki hata ayıklayıcı ayarlarına gidin ve ADB Server Burst Mode'u Enabled (Etkin) olarak ayarlayın.