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 bir istemci. İstemci, geliştirme makinenizde çalışır. adb komutu vererek komut satırı terminalinden bir istemci ç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 Araçları paketine dahildir. Bu paketi SDK Manager ile indirin. Bu paket, android_sdk/platform-tools/ konumuna yüklenir. 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) Donanım cihazda uygulama çalıştırma başlıklı makaleyi inceleyin.

adb'nin işleyiş şekli

Bir adb istemcisini başlattığınızda istemci önce adb sunucu işleminin zaten çalışıp çalışmadığını kontrol eder. Yoksa sunucu işlemini başlatı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.

Ardından sunucu, çalışan tüm cihazlarla bağlantı kurar. İlk 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 arka plan programını (adbd) bulduğunda bu bağlantı noktasıyla bağlantı kurar.

Her emülatör, sıralı bir bağlantı noktası çifti kullanır. Konsol bağlantıları için çift numaralı bir bağlantı noktası, adb bağlantıları için ise tek numaralı bir bağlantı noktası kullanılır. Örneğin:

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

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

Sunucu tüm cihazlarla bağlantı kurduktan sonra, bu cihazlara erişmek için adb komutlarını kullanabilirsiniz. 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 komut dosyasından kontrol edebilirsiniz.

Cihazınızda adb hata ayıklamayı etkinleştirme

USB üzerinden bağlı bir cihazla adb'yi kullanmak için cihaz sistem ayarlarında Geliştirici seçenekleri bölümünden 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 gizlenir. Görünür hale getirmek için Geliştirici seçenekleri'ni 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ın "cihaz" olarak listelendiğini 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.

Cihazlara kablosuz ağ üzerinden 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 iş istasyonunuzdan uygulamanızı kablosuz olarak dağıtıp hatalarını ayıklayabilirsiniz. Örneğin, hata ayıklanabilir uygulamanızı cihazınızı USB ile 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'ı kullanıma sunar. Özellikle, cihaz güvenilen bir kablosuz hata ayıklama ağına 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.

  • Cihazınızda telefon için Android 11 (API düzeyi 30) veya sonraki sürümlerin, TV ve WearOS için ise Android 13 (API düzeyi 33) veya sonraki sürümlerin 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, 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 istemini gösteren 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 kutusunun işaretlenmesiyle 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 kablosuz hata ayıklamaya her zaman izin verir.

    Kablosuz hata ayıklama sistemleri ayarını gösteren bir Google Pixel telefonun ekran görüntüsü.
    Şekil 2. Google Pixel telefonda Kablosuz hata ayıklama ayarı

    Not: Android Studio kullanıcıları cihazlarını QR koduyla eşleyebilir, Cihazı QR koduyla eşle'yi seçip Android Studio'daki Cihazları Wi-Fi üzerinden eşle iletişim kutusundan alınan QR kodunu tarayabilir.

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

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

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

  7. İstendiğinde, aşağıda gösterildiği gibi eşleme 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.
  8. Cihazınız eşlendikten sonra bağlı olup olmadığını doğrulayın. Artık cihazınızı USB bağlantısında olduğu gibi kablosuz olarak 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.

  9. 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 kutucuklarının ekran görüntüsü.
    Şekil 4. Hızlı Ayarlar geliştirici kutuları ayarı, kablosuz hata ayıklamayı hızlıca açıp kapatmanıza olanak tanır.

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

Cihazınıza kablosuz olarak bağlanmayla ilgili 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çıp adb server-status komutunu girin. Çıkışın aşağıdakileri gösterdiğini doğrulayın:

  • version: "37.0.0" veya daha yeni: 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 bulmak 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. Çıkış 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 etme

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 sürüm içerdiğini doğrulayın. Bu durum söz konusu değilse cihazınızda Android 17 veya sonraki bir sürüm yüklü değildir ve ADB Wi-Fi 2.0 desteklenmiyordur. Android 17 veya sonraki sürümlere güncellemek için cihazınızda bekleyen sistem güncellemeleri 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 referans verilen günlük dosyasını log_absolute_path ekleyin.

İlk USB bağlantısından sonra bir cihaza kablosuz olarak bağlanma (yalnızca Android 10 ve önceki sürümlerde kullanılabilir)

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 daha düşük bir sürümü ç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 ağ üzerinden de kullanabilirsiniz. Android 10 (API düzeyi 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ı 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'ya 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 barındırıcınızı sıfırlayın:
    adb kill-server
    

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

Cihazlar için sorgu oluşturma

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ğına bağlı değil veya yanıt vermiyor.
    • device: Cihaz, adb sunucusuna bağlı. Bu durum, Android sisteminin tam olarak başlatıldığı ve çalıştığı anlamına gelmez. Çü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ı 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 komutunun, ç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 dizisi var. Bu durum, aşağıdaki koşulların tümü geçerli olduğunda ortaya çıkar:

  • adb sunucusu çalışmıyor.
  • emulator komutunu -port veya -ports seçeneğiyle birlikte 5554 ile 5584 arasında tek numaralı bir bağlantı noktası değeriyle kullanıyorsunuz.
  • Seçtiğiniz tek numaralı bağlantı noktası meşgul değilse bağlantı noktası bağlantısı 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 durumdan kaçınmanın 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. Başka bir yöntem de aşağıdaki örneklerde açıklandığı gibi, adb sunucusunu emulator komutunu kullanmadan önce her zaman 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 devices, adb sunucusu önce başlatıldığı için 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 yeniden 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'yi geçersiz kılar.

Aşağıdaki örnekte, bağlı cihazların listesi alınır ve ardından cihazlardan birinin seri numarası, helloWorld.apk uygulamasını ilgili cihaza 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 bir 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 install komutunu kullanabilirsiniz:

adb install path_to_apk

Test APK'sı yüklerken -t seçeneğini install komutuyla birlikte kullanmanız gerekir. Daha fazla bilgi için -t başlıklı makaleyi inceleyin.

Birden fazla APK yüklemek için install-multiple kullanın. Bu özellik, uygulamanız için belirli bir cihaza yönelik tüm APK'ları Play Console'dan indirip 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 ayarlanır:

adb forward tcp:6100 tcp:7100

Aşağıdaki örnekte, ana makine bağlantı noktası 6100'ün local:logd'ye yönlendirilmesi ayarlanı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.

Cihazlara ve cihazlardan dosya 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 işlemini 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ı verme

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 bilgilerine toybox --help üzerinden ulaşabilirsiniz.

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üzeltir ve kabuk metakarakterleri (ör. adb install Let\'sGo.apk) içeren komutların güvenli bir şekilde yürütülmesini sağlar. 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, bir kez de uzak kabuk için. Örneğin, adb shell setprop key "'two words'" çalışır. Çünkü yerel kabuk, dış tırnak düzeyini alır ve cihaz, iç tırnak düzeyini (setprop key 'two words') görmeye devam eder. 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 kabuk içinde, etkinlik yöneticisi (am) aracıyla çeşitli sistem işlemleri (ör. etkinlik başlatma, işlemi durdurmaya zorlama, amaç yayınlama, cihaz ekran özelliklerini değiştirme) gerçekleştirmek için komutlar verebilirsiniz.

Kabukta am söz dizimi şu şekildedir:

am command

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

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

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

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

Specification for intent arguments (Niyet bağımsız değişkenleri için spesifikasyon) başlıklı makaleyi inceleyin.

Şu seçenekleri kullanabilirsiniz:

  • -D: Hata ayıklamayı etkinleştirin.
  • -W: Başlatma işleminin tamamlanmasını bekleyin.
  • --start-profiler file: Profil oluşturucuyu 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ının çalıştırılacağını belirtin. Belirtilmezse geçerli kullanıcı olarak çalıştırılır.
  • --debug-link: (Android 17 ve üzeri) Eşleşen manifest amaç filtrelerini ve dinamik uygulama bağlantısı kurallarını yazdırarak uygulama bağlantıları için URL ve amaç çözümlemesini teşhis edin.
startservice [options] intent Service tarafından belirtilen intent başlatır.

Specification for intent arguments (Niyet bağımsız değişkenleri için spesifikasyon) başlıklı makaleyi inceleyin.

Ş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 kapatı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şlemleri sonlandırılır.
kill-all Tüm arka plan işlemlerini sonlandırın.
broadcast [options] intent Yayın intent'i yayınlayın.

Specification for intent arguments (Niyet bağımsız değişkenleri için spesifikasyon) başlıklı makaleyi inceleyin.

Şu seçenekleri kullanabilirsiniz:

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

Şu seçenekleri kullanabilirsiniz:

  • -r: Ham sonuçları yazdırın (aksi takdirde kod çözme 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şturmaya başlayın, sonuçları file konumuna yazın.
profile stop process process üzerinde profiler'ı durdurun.
dumpheap [options] process file process yığınını boşalt, file adresine yaz.

Şu seçenekleri kullanabilirsiniz:

  • --user [user_id | current]: İşlem adı sağlarken dökümü yapılacak 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ün yapılacağı biçimi (varsayılan olarak PNG) belirtin.
  • -n: Yönetilen yığın yerine yerel yığını boşaltın.
dumpbitmaps [options] [-p process] process (API düzeyi 36 ve üzeri) sürümünden bit eşlem bilgilerini boşaltın.

Şu seçenekleri kullanabilirsiniz:

  • -d|--dump [format]: Belirtilen format'deki bit eşlem içeriklerini döküm yapın. Bu, 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: dump bitmaps from process, multiple -p process can be specified.
process belirtilmezse tüm işlemlerden bit eşlemlerin dökümü alınır.
set-debug-app [options] package Hata ayıklama için package uygulamasını ayarlayın.

Şu seçenekleri kullanabilirsiniz:

  • -w: Uygulama başladığında hata ayıklayıcıyı bekleyin.
  • --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 uygulamasının ekran uyumluluğu modunu kontrol etme
display-size [reset | widthxheight] Cihazın görüntü boyutunu geçersiz kılın. Bu komut, büyük ekranlı bir cihazda küçük ekran çözünürlüğünü taklit ederek uygulamanızı farklı ekran boyutlarında test etmenize yardımcı olur.

Ö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 ekran ortamını taklit ederek ve bunun tersini yaparak uygulamanızı farklı ekran yoğunluklarında test etmek için kullanışlıdır.

Örnek:
am display-density 480

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

Specification for intent arguments (Niyet bağımsız değişkenleri için spesifikasyon) başlıklı makaleyi inceleyin.

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

Specification for intent arguments (Niyet bağımsız değişkenleri için spesifikasyon) başlıklı makaleyi inceleyin.

memory-limiter subcommand [options]

Android 17 ve sonraki sürümlerin yüklü olduğu cihazlarda uygulanan bellek sınırlarını ayarlayabilir veya devre dışı bırakabilirsiniz. Android 16 ve önceki sürümlerin yüklü olduğu cihazları etkilemez.

Alt komutlar:

  • ignore uid|none|all: Bellek sınırlayıcıya bazı veya tüm işlemleri yoksayma talimatı verir. UID (Android kullanıcı kimliği) iletmek, bellek sınırlayıcıya bu UID ile ilişkili tüm süreçlerde zorlamayı yoksayma talimatı verir. Ayrıca all (tüm uygulamaları yoksay) veya none (hiçbir uygulamayı yoksayma) değerini de iletebilirsiniz. none parametresinin iletilmesi, am memory-limiter ignore için yapılan önceki tüm çağrıları geçersiz kılar.

    Bellek sınırlayıcıya bir UID'yi yoksayma talimatı verirseniz am memory-limiter manual işlevini çağırarak uygulama içindeki bir işleme manuel bellek sınırı uygulayabilirsiniz.

  • manual pid limit|max|none: Sisteme, belirtilen PID'ye (işlem kimliği) sahip işleme bellek kısıtlaması uygulama talimatı verir. Bellek kısıtlaması, MB cinsinden bir tam sayı olarak belirtilir. Örneğin, 30 değeri, işlemin 30 MB bellek ile sınırlı olduğunu belirtir. max iletildiğinde bu işlemle ilgili tüm bellek sınırlamaları kaldırılır. none iletildiğinde, süreçte belirlenen tüm manuel sınırlar kaldırılır ve sistemin varsayılan sınırı (varsa) geri yüklenir.
  • status: Bellek sınırlayıcının mevcut durumunu bildirir. Durum, görünür ve görünür olmayan işlemlere uygulanan bellek sınırlarını içerir.

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

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

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

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

Kabukta pm söz dizimi şu şekildedir:

pm command

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

adb shell pm uninstall com.example.MyApp

Tablo 2. Kullanılabilen 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şkili dosyayı görün.
  • -d: Yalnızca devre dışı bırakılmış paketleri gösterecek şekilde filtreleyin.
  • -e: Yalnızca etkinleştirilmiş paketleri gösterecek şekilde filtreleyin.
  • -s: Yalnızca sistem paketlerini gösterecek şekilde filtreleyin.
  • -3: Yalnızca üçüncü taraf paketlerini gösterecek şekilde filtreleyin.
  • -i: Paketlerin yükleyicisini inceleyin.
  • -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: Gruplandırarak düzenleyin.
  • -f: Tüm bilgileri yazdırın.
  • -s: Kısa özet.
  • -d: Yalnızca tehlikeli izinleri listeler.
  • -u: Yalnızca kullanıcıların göreceği izinleri listeleyin.
list instrumentation [options] Tüm test paketlerini listeler.

Seçenekler:

  • -f: Test paketinin APK dosyasını listeleyin.
  • target_package: Yalnızca bu uygulamaya ait 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 uygulamasının APK'sının yolunu yazdırın.
install [options] path path ile 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 verilir. Gradle, yalnızca uygulamanızı çalıştırdığınızda veya uygulamanızda hata ayıklama yaptığınızda 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ü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'nin 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 tutun.
  • --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 silme
enable package_or_component Belirtilen paketi veya bileşeni ("paket/sınıf" olarak yazılır) etkinleştirin.
disable package_or_component Belirtilen paketi veya bileşeni devre dışı bırakın ("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 düzeyi 23) ve sonraki sürümleri ç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ümlerin yüklü olduğu cihazlarda, uygulama tarafından tanımlanan isteğe bağlı bir izin olmalıdır.
revoke package_name permission Uygulamalardan izinleri iptal etme. Android 6.0 (API düzeyi 23) ve sonraki sürümlerin yüklü olduğu cihazlarda, izin uygulama manifestinde 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.
set-install-location location Varsayılan yükleme konumunu değiştirin. Konum değerleri:
  • 0: Otomatik: Sistem, en iyi konuma karar verir.
  • 1: Dahili: Dahili cihaz depolama alanına yükleyin.
  • 2: Harici: Harici medyaya yükleyin.

Not: Bu yalnızca hata ayıklama amaçlıdır. Bunun kullanılması, uygulamaların bozulmasına ve diğer istenmeyen davranışlara neden olabilir.

get-install-location Geçerli yükleme konumunu döndürür. Döndürülen değerler:
  • 0 [auto]: En iyi konuma sistemin karar vermesine izin verin.
  • 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 ve 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ırma, bu kullanıcıyla ilişkili tüm verileri silme
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 belirtilmemişse tüm paketler için alan adı doğrulama durumunu yazdırın. Eyalet kodları aşağıdaki şekilde 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 zorunlu olarak reddedildi.
  • migrated: Eski bir yanıttan doğrulama korundu
  • 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 onaylanır.
  • >= 1024: Cihaz doğrulayıcıya özel ö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 paket veya belirtilmemişse tüm paketler için alan adı doğrulama durumunu sıfırlayın.

  • 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önderilir.
set-app-links [--package package] state domains

Bir paketin alan durumunu manuel olarak ayarlayın. Bu özelliğin çalışması için alan adı, 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 bunu geçersiz kılabileceğini unutmayın.
    • STATE_APPROVED (2): Alanı her zaman onaylanmış olarak kabul edin. Böylece alan doğrulama aracısının alanı değiştirmesi engellenir.
    • STATE_DENIED (3): Alanı her zaman reddedilmiş olarak değerlendirin. Bu sayede alan doğrulama aracısının alanı değiştirmesi engellenir.
  • 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. Bunun ç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"
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 doğru, devre dışı bırakmak için yanlış
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ı olmak için cihaz politikası yöneticisi (dpm) aracına komutlar gönderin. Etkin yönetici uygulamasını kontrol etmek veya cihazdaki bir politikanın durum verilerini değiştirmek için aracı kullanın.

Kabukta dpmsöz dizimi:

dpm command

Ayrıca, uzak kabuk girmeden doğrudan adb içinden bir cihaz politikası yöneticisi komutu da verebilirsiniz:

adb shell dpm command

Tablo 3. Kullanılabilir Cihaz Politikası Yöneticisi komutları

Komut Açıklama
set-active-admin [options] component component adresini 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 tuşunu da kullanabilirsiniz.
set-profile-owner [options] component Mevcut bir kullanıcı için component öğesini etkin yönetici ve paketini profil 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 tuşuna da basabilirsiniz.
  • --name name: İnsan tarafından okunabilen kuruluş adını belirtin.
set-device-owner [options] component component öğesini 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 tuşunu da kullanabilirsiniz.
  • --name name: İnsan 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 öğesini 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 tuşunu da kullanabilirsiniz.
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ını alır. Ağ etkinliği günlük kaydı başlıklı makaleyi inceleyin.

Bu komutun hızı sınırlandırılmıştır. Android 9.0 (API düzeyi 28) ve sonraki sürümlerin yüklü olduğu 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 hızı sınırlandırılmıştır. Android 9.0 (API düzeyi 28) ve sonraki sürümlerin yüklü olduğu cihazlarda desteklenir.

Ekran görüntüsü alma

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 şu şekildedir:

screencap filename

Komut satırından screencap 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 görüntüyü standart çıkışa yazar. PNG biçimini belirtme -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 bunu 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

Komut satırından screenrecord 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ı, cihaz ekranının en boy oranını koruyarak istediğiniz desteklenen çözünürlük ve bit hızında kayıt yapabilir. Yardımcı program, varsayılan olarak yerel ekran çözünürlüğünde ve yönünde kayıt yapar. Kayıt süresi en fazla üç 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, kendi ekran çözünürlüklerinde kayıt yapamayabilir. Ekran kaydıyla ilgili sorunlarla karşılaşırsanı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 Mb/sn olarak ayarlanı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'dan (API düzeyi 24) 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 şunu kullanın:

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ırlamanız (ö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ümlerin yüklü olduğu bir test cihazını, gösterildiği gibi testharness adb kabuk komutunu kullanarak fabrika ayarlarına sıfırlayabilirsiniz:

adb shell cmd testharness enable

Cihaz, testharness kullanılarak geri yüklendiğinde, mevcut iş istasyonunda 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 cihazda hata ayıklamaya ve cihaza adb komutları vermeye devam edebilir.

Ayrıca, uygulamanızı test etmeye devam etmenizi kolaylaştırmak ve güvenli hale getirmek 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 bunlara 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. SQLite komutlarını komut satırından da aşağıdaki gibi çalıştırabilirsiniz:

$ 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ı belgelerine bakın.

adb USB arka uçları

adb sunucusu, USB yığınıyla iki arka uç üzerinden etkileşime girebilir. İş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ç hizmetinin varsayılan olarak kullanıldığı Windows hariç tüm işletim sistemlerinde varsayılan olarak libusb 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 backends

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

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 başlar. ADB v34'ten itibaren Windows ve Linux desteklenmektedir.

adb Burst Mode (ADB 36.0.0'dan itibaren)

Patlatma modu, ADB'nin cihaz önceki pakete yanıt vermeden önce bile 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.