Android Hata Ayıklama Köprüsü hakkında bilmediğiniz pek çok şey var. ADB'yi kullanmaya yönelik bazı yararlı ipuçları ve püf noktaları için burayı tıklayın!
Hızlı Linkler
- Kabuk erişimi
- Birden fazla cihaza bağlanma
- Dosyaları aktarma
- Kerestecilik
- ADB aracılığıyla yüklü uygulamaları listeleme
- ADB aracılığıyla uygulamaları yükleme ve kaldırma
- APK'ları ADB ile çıkarma
- Uygulama verilerini yedekleme ve geri yükleme
- Uygulama bileşenlerini listeleme
- Etkinlikleri, hizmetleri ve yayın alıcılarını başlatma
- Hemen hemen her uygulamayı devre dışı bırakma ve etkinleştirme
- Ekran görüntüleri yakalama
- PC ile Android cihaz arasında ikili veri aktarımı
Modlama sahnesinde gizlenen bir Android tutkunuysanız veya uzun süredir bir uygulama geliştiricisiyseniz Bir süre sonra, er ya da geç, Android Hata Ayıklama Köprüsü veya ADB adı verilen kullanışlı bir araca rastlayacaksınız. kısa. Android Studio'da bir komut satırı yardımcı programı olarak yaygın olarak kullanılır. Android geliştiricileri ayrıca uygulamaları manuel olarak yüklemek ve test etmek için bunu bağımsız bir çözüm olarak kullanıyor.
Ancak ADB'nin yapabileceği çok şey var ve bunların çoğu yalnızca geliştiriciler için yararlı değil. Geliştirici olmasanız ve bu makaleyi okuyor olsanız bile, muhtemelen ADB'yi bir veya iki kez kullanmışsınızdır. bir uygulamayı yandan yükleme veya bir izni değiştirin. Ancak ADB'nin kullanılabileceği tek şey bu değil. ADB'yi kullanmayla ilgili bilmediğiniz bazı ipuçları ve püf noktaları için okumaya devam edin.
Bilgisayarınızda ADB'nin çalışır durumda olması gerekir. başlıklı yazımıza mutlaka göz atın ADB nasıl kurulur Eğer yardıma ihtiyacın varsa. Windows kullanıyorsanız şunları da yapmanız gerekir: uygun OEM USB sürücülerini yükleyin Android cihazınız için.
Kabuk erişimi
Daha önce ADB kullandıysanız, komutların tamamını tek satırda çalıştırmaya alışkın olabilirsiniz. Ancak cihazınızda bir terminal kabuğu açmak ve komutları doğrudan çalıştırmak için ADB'yi de kullanabilirsiniz. Ve çok kolay!
Terminalinizde veya komut istemi pencerenizde:
adb shell
Daha sonra bir şekilde karşılanacaksınız $
Komutları doğrudan cihazınızda çalıştırabileceğiniz sembol.
Birden fazla cihaza bağlanma
ADB aynı anda birden fazla cihazla iletişim kurabilir. Ancak bu tür senaryolarda ADB komutlarını verirken hedef cihazı belirtmeniz gerekir.
Bunu yapmak için hedef cihazın seri numarasını bilmeniz gerekir. Devices komutunu kullanarak seriyi alabilirsiniz:
adb devices
Şimdi, şunu kullan: -s
Hedef cihazın seri numarasını belirtme seçeneği. Örnek:
adb -s <serialnumber> shell
Dosyaları aktarma
Komut satırı meraklıları için ADB, Android cihazınıza ve cihazınızdan dosya aktarmanın çok kolay bir yolunu sunar. Sadece şunu kullan pull
aygıttan dosya ve dizinleri kopyalama komutu push
Dosyaları ve dizinleri cihaza kopyalama komutu:
Bir dosyayı veya dizini alt dizinleriyle birlikte Android cihaza kopyalamak istiyorsanız:
adb push local_path device_path
- Örnek:
adb push D:\image.png /sdcard
Aşağıdaki komut, bir dosyayı veya dizini alt dizinleriyle birlikte Android cihazından ana bilgisayara kopyalayacaktır:
adb pull device_path local_path
- Örnek:
adb pull /sdcard/backup_April.tar D:\Backup
Kerestecilik
Android Studio şunları sağlar: Logcat penceresi, cihazınızdaki günlüklerin gerçek zamanlı olarak görüntülenmesini destekler. Ancak toplu işleme için tam olarak kullanışlı değildir. Neyse ki, Android cihazlar, sistem ve uygulama günlüğü mesajlarını dökümü yapmak ve bunları ekrana yazdırmak için kullanılabilen, ADB aracılığıyla kullanılabilen logcat komutuyla birlikte gelir.
Temel sözdizimi aşağıdaki gibidir:
adb logcat
Daha fazlasını öğrenmek için eğitimimize göz atın Android'de sistem logcat'leri, çekirdek günlükleri ve dmesg nasıl alınır.
Paskalya yumurtaları
Google, logcat komutuyla ilgili iki şık paskalya yumurtası sunuyor.
- İlki lolcat, bir selam LOLcat meme'i. Normal logcat komutuyla aynı çıktıyı verir.
adb lolcat
- İkincisi ise logcat -v long komutuna eşdeğer olan longcat'tir. Tüm meta veri alanlarını görüntüler ve mesajları boş bir satırla ayırır.
adb longcat
ADB aracılığıyla yüklü uygulamaları listeleme
Cihazınızda yüklü uygulamaları görmek için aşağıdaki komutu kullanabilirsiniz:
adb shell pm list packages
Bu, yüklü uygulamaların paket adlarının bir listesini, her birinin kendi satırında başına eklenmiş şekilde döndürecektir. package:
.
Seçenekler
Daha spesifik listeleri almak için kullanabileceğiniz bazı seçenekler de vardır.
- -F paket adıyla birlikte her uygulamanın temel APK'sına giden yolu içerecektir.
- -A APEX dışı olduğu bilinen tüm paketlerin iade edilmesini sağlayacaktır.
- -D komutun yalnızca devre dışı bırakılan paketleri döndürmesine neden olur.
- -e komutun yalnızca etkinleştirilmiş paketleri döndürmesine neden olur.
- -S komutun yalnızca sistem paketlerini döndürmesine neden olur.
- -3 komutun yalnızca üçüncü taraf paketleri döndürmesine neden olur.
- -Ben her paket için yükleyici paketinin adını içerecektir.
- -U her paket için paket UID'sini içerecektir.
- -u kaldırılan paketleri içerecektir.
- --sürüm kodunu göster her paketin sürüm kodunu içerecektir.
- --yalnızca apex yalnızca APEX paketlerini döndürecektir.
- --uid yalnızca belirtilen UID'ye sahip paketleri gösterecektir.
- --kullanıcı yalnızca verilen kullanıcı kimliğine ait paketleri gösterecektir.
ADB aracılığıyla uygulamaları yükleme ve kaldırma
Bu, ADB'nin nispeten yaygın bir kullanımıdır, ancak yine de bahsetmeye değer. Diğer yolların yanı sıra, ADB'den de yararlanabilirsiniz. Android uygulamalarını yükleme ve kaldırma Android cihazınıza.
APK yükleme
Bilgisayarınızda bir APK varsa aşağıdakileri kullanarak cihazınıza yükleyebilirsiniz:
adbinstall-rsomeapk.apk
Değiştirmeyi unutmayın someapk.apk
Yüklemek istediğiniz APK'nın tam yolunu belirtin.
Seçenekler
APK'ları ADB aracılığıyla yüklemek için birçok seçenek vardır.
- -R seçeneği, ADB'nin mevcut bir uygulamanın üzerine yüklenmesine (yani güncelleme) olanak tanır. Android Pie ve sonraki sürümlerde bu seçeneği belirtmeniz gerekmez.
- -R Android Pie ve sonraki sürümler için seçeneğin kullanılması, uygulama zaten yüklüyse yüklemenin başarısız olmasına neden olur.
- -Ben seçeneği bir yükleyici paketi adı belirlemenizi sağlar. Android APK'yı neyin yüklediğini bilmek isterse döndürülen şey budur.
- -T seçenek bir APK'ya izin verir android: testOnly = "doğru" yüklenecek manifestosunda.
- -D seçeneği, belirtilen APK'nın önceden yüklenmiş bir uygulamaya düşürülmesine olanak tanır. Bu yalnızca uygulamanın her iki sürümünde de hata ayıklanabilir olması durumunda işe yarar.
- -G Android Marshmallow ve sonraki sürümler için seçenek, yüklü uygulamaya tüm çalışma zamanı izinlerini otomatik olarak verir.
Hepsi bu değil. Tam listeyi istiyorsanız yerleşik belgelere göz atabilirsiniz.
Birden fazla APK ve paket
Birden fazla uygulamadan veya bir uygulama paketi yüklediğiniz için aynı anda yüklemek istediğiniz çok sayıda APK'nız varsa ADB'leri kullanabilirsiniz. install-multiple
Ve install-multi-package
özellikler.
APK'larınızın tümü tek bir uygulama içinse şunu kullanın: install-multiple
:
adbinstall-multipleapk1.apkapk2.apk ...
Aksi takdirde kullanın install-multi-package
:
adbinstall-multi-packageapp1.apkapp2.apk ...
Bu komutların seçenekleri şuna benzer: install
, ancak bazı sınırlamalarla. Seçeneklerin mevcut olduğu ADB'nin yerleşik belgelerine göz atın.
Bir uygulamayı kaldırma
ADB'yi kullanarak kaldırmak için kaldırmak istediğiniz uygulamanın paket adına ihtiyacınız olacaktır. için bölüme göz atın Yüklü uygulamaları listeleme eğer henüz yapmadıysanız.
Paket adını aldıktan sonra kaldırma işlemi şu kadar basittir:
adb uninstall <packagename>
Bu komutu kullanarak genellikle sistemi veya önceden yüklenmiş uygulamaları kaldıramazsınız. Ancak bunları ADB ile devre dışı bırakabilirsiniz. Bölüme göz atın Hemen hemen her uygulamayı devre dışı bırakma ve etkinleştirme detaylar için.
APK'ları ADB ile çıkarma
Bir uygulamanın APK'larını çıkarmak isteyebileceğiniz birçok neden vardır. Belki gelecekte kullanmak üzere yedeklemek istiyorsunuz ya da artık çevrimiçi olarak kullanılamıyor ve farklı bir cihaza aktarmak istiyorsunuz.
ADB kullanarak bir uygulamayı çıkarmak oldukça basittir. Öncelikle çıkarmak istediğiniz uygulamanın paket adını bulmanız gerekir. Bunu yapmanın birden fazla yolu vardır, ancak en kolayı genellikle cihazınızın Ayarlar uygulamasını kullanarak yüklü tüm uygulamaların listesinden istediğinizi seçin ve paket adını veya uygulamayı bulana kadar aşağı kaydırın İD.
Paket adını aldıktan sonra aşağıdaki komutu çalıştırın:
adb shell pm path <packagename>
Bu komut, söz konusu paket adı için tüm APK'ların yolunu döndürecektir.
Daha sonra her APK'yı bilgisayarınıza çekmek için aşağıdaki komutu kullanabilirsiniz:
adb pull /path/to/apk.apk
Uygulama verilerini yedekleme ve geri yükleme
Google henüz iOS benzeri tek tıklamayla yedekleme metodolojisi geliştirmemiş olsa da, yüklü uygulamaları verileriyle birlikte yedeklemek ve geri yüklemek için ADB'yi kullanabilirsiniz. Ancak işlevsellik mükemmel olmaktan uzaktır ve Google zaten özelliği kullanımdan kaldırıldı olarak işaretledi.
Destek olmak
Tek bir uygulamayı APK'sıyla yedeklemek için:
adb backup -apk <packagename> -f package_name_backup.ab
Tüm uygulama verilerini bir kerede yedeklemek istemeniz durumunda:
adb backup -f all -all -apk -nosystem
Geri yükleme modülü uygulamaya özel ayrı ayrı geri yükleme gerçekleştiremediğinden, pakete özel yedeklemeler oluşturmak daha iyidir. Aşağıdaki komut parçacığı (Linux/macOS ve Linux için Windows Alt Sistemi ile uyumlu) bunu sizin için yapabilir:
for APP in $(adb shell pm list packages -3)
do
APP=$( echo${APP} | sed "s/^package://")
adb backup -f ${APP}.backup ${APP}
done
Eski haline getirmek
Öncelikle kaydedilen APK'yı yüklemeniz gerekir;
adb install <packagename>.apk
Daha sonra verilerini geri yükleyebilirsiniz:
adbrestorepackage_name_backup.ab
Tekrarlamak gerekirse, ADB yedekleme ve geri yükleme işlevlerinin, ROM'a bağlı olarak değişken sonuçlar da dahil olmak üzere birden fazla uyarısı vardır.
Uygulama bileşenlerini listeleme
Bir uygulamanın bileşenleri, Etkinlikler, Yayın Alıcıları, Hizmetler vb. gibi şeylerdir. Bazen, özellikle gizli Etkinlikleri başlatmak veya belirli verileri içeren bir yayın göndermek istiyorsanız, belirli bir uygulamadaki bu bileşenlerin adlarını bilmek yararlı olabilir.
Maalesef ADB'nin bir uygulamanın bileşenlerini listelemenin çok temiz bir yolu yok. Ama bu mümkün. Aşağıdaki komutu çalıştırın:
adb shell dumpsys package
Bir sürü metin döndürülecek.
- Bulana kadar kaydırın Etkinlik Çözümleyici Tablosu Etkinlikleri görmek için başlık.
- Aşağıya bak Alıcı Çözümleyici Tablosu Yayın Alıcıları için.
- Kontrol edin Hizmet Çözümleyici Tablosu Hizmetler için.
- Ve benzeri.
Her bileşen, onu başlatmak için gereken eylemi, bileşenin adını ve muhtemelen bazı ekstra bilgileri gösterecektir.
Alternatif olarak, Etkinlikleri, Hizmetleri ve Alıcıları görmenin daha kolay bir yolunu istiyorsanız XDA Tanınan Geliştiricinin Kök Etkinlik Başlatıcı uygulamasını kullanabilirsiniz. Zacharee1. Size her uygulama için bu bileşenleri ve diğer birçok kullanışlı özelliği gösterecektir.
Fiyat: 0,99.
Etkinlikleri, hizmetleri ve yayın alıcılarını başlatma
ADB ayrıca Etkinlikleri başlatmak, Hizmetleri başlatmak ve BroadcastReceiver'ları bilgilendirmek için de kullanılabilir. Gerekirse veri URI'lerini ve Amaç ekstralarını bile belirtebilirsiniz.
Bileşenleri başlatmak için başlatmak istediğiniz şeyin bileşen adına ihtiyacınız olacaktır. Bunu nasıl alacağınızı şuradan görebilirsiniz: Uygulama Bileşenlerini Listeleme bölüm.
Bir Etkinliği başlatmak için kullanılan komut sözdizimi şuna benzer:
am start -a <action> -n <component>
Bir Hizmeti başlatmak için komut sözdizimi şuna benzer:
am startservice -a <action> -n <component>
Bir BroadcastReceiver'a bildirimde bulunmak için kullanılan komut sözdizimi şuna benzer:
am broadcast -a <action> -n <component>
Çoğu durumda Etkinlikler ve Hizmetler için açıkça bir eylem belirtmeniz gerekmez. Genellikle buna yalnızca bileşen aşağıdakilerden birini kullanıyorsa ihtiyacınız olacaktır. android.intent.action. ANA.
Temel sözdiziminin yanı sıra, aktarılacak daha fazla veriyi nasıl belirleyeceğiniz aşağıda açıklanmıştır. Genel olarak, tüm veri değerleri çift tırnak içine alınmalıdır.
- -D bir veri URI'si belirtmenize olanak tanır.
- -e veya --es fazladan bir String belirtmenize olanak tanır.
- --esn boş bir String fazladan belirtmenize olanak tanır.
- --ez Boolean ekstrasını belirtmek için kullanılır.
- --ei Ekstra bir tamsayı belirtmek için kullanılır.
- --el uzun bir ekstra belirtmek içindir.
- --ef fazladan bir şamandıra geçecektir.
- --AB fazladan bir URI geçirir.
- --ecn ekstra bir bileşen adı belirtmek için kullanılabilir.
-
--eia
değerleri bir Tamsayı[] ekstrası olarak iletecektir., ,... -
--eial
değerleri Liste olarak iletecek, ,... . - Aynı dizi ve liste argümanları aynı zamanda uzun değerler, kayan noktalar ve Dizeler için de çalışır. Sadece şunu değiştir Ben uygun mektupla.
- -F bir bayrak belirlemenizi sağlar.
Kullanabileceğiniz daha da fazla davranış seçeneği vardır; ayrıntılar için yerleşik belgelere bakın.
Hemen hemen her uygulamayı devre dışı bırakma ve etkinleştirme
Android'deki sistem uygulamaları kaldırılamaz ve ne yazık ki birçoğu da Ayarlar aracılığıyla devre dışı bırakılamaz. ADB bunları kaldırmanıza izin vermese de devre dışı bırakmanıza yardımcı olabilir.
Öncelikle devre dışı bırakmak istediğiniz uygulamanın paket adını aldığınızdan emin olun. Daha sonra bu komutları deneyin. Biri başarısız olursa sonraki seçeneği deneyin.
-
pm devre dışı bırak
- Yeniden etkinleştirmek için şunu kullanın: pm etkinleştir
-
pm devre dışı bırak-kullanıcı --user 0
- Yeniden etkinleştirmek için şunu kullanın: pm etkinleştir
-
özel mesaj gizle
- Yeniden etkinleştirmek için şunu kullanın: pm göster
-
pm askıya alma
- Yeniden etkinleştirmek için şunu kullanın: pm askıya alma durumunu kaldır
-
pm kaldırma -k --user 0
- Yeniden etkinleştirmek için şunu kullanın: pm kurulumu-mevcut
- Bu, uygulamayı kullanıcı profilinizden etkili bir şekilde kaldırır. Yeniden etkinleştirme komutu sırasında meli çalışacağının garantisi yok. Uygulamayı geri yüklemek için fabrika ayarlarına sıfırlamanız gerekebilir.
- Cihazınızda birden fazla kullanıcı profili kullanıyorsanız yukarıdaki komutlarda 0'ı sahip olduğunuz gerçek kullanıcı kimliğiyle değiştirdiğinizden emin olun.
- Yeniden etkinleştirmek için şunu kullanın: pm kurulumu-mevcut
Daha fazlasını öğrenmek için eğitimimize göz atın Kök erişimi olmadan taşıyıcı ve OEM bloatware nasıl kaldırılır.
Ekran görüntüleri yakalama
Çoğu Android ROM, sırasıyla ekran görüntüleri almak ve ekran etkinliklerini kaydetmek için iki kullanışlı kabuk yardımcı programı sunar: screencap ve screenrecord. Telefon ekranınızın statik bir ekran görüntüsünü veya video parçasını yakalamak ve bunu doğrudan cihazın dahili deposuna kaydetmek için bunları doğrudan ADB kabuğundan arayabilirsiniz.
Ekran görüntüsü yakalamanın sözdizimi oldukça basittir:
adb shell screencap /sdcard/screenshot.png
Benzer şekilde, dinamik bir ekran görüntüsü yakalamanız gerekiyorsa aşağıdakileri yapın:
adb shell screenrecord /sdcard/recording.mp4
Tahmin edebileceğiniz gibi, ekran görüntüsü aracı oldukça basittir, oysa ekran kayıt yardımcı programı çeşitli parametreler sunar. İkincisi için seçenekler aşağıdaki gibidir:
-
--boyut WIDTHxHEIGHT
- Video dosyasının çözünürlüğünü ayarlayın (ör. "1280x720"). Varsayılan olarak, hedef cihazın ana ekran çözünürlüğünü (destekleniyorsa) almaya çalışır ve desteklemiyorsa 1280x720'ye geri döner.
-
--bit hızı ORANI
- Video bit hızını saniyedeki bit cinsinden ayarlayın. Değer bit veya megabit olarak belirtilebilir, ör. '4000000', '4M'ye eşdeğerdir.
-
--hata raporu
- Hataları göstermek için yararlı olabilecek zaman damgası katmanı gibi ek bilgiler ekleyebilirsiniz.
-
--time-limit TIME
- Maksimum kayıt süresini saniye cinsinden ayarlayın. Varsayılan / maksimum 180'dir.
-
--görüntü kimliği kimliği
- Kaydedilecek fiziksel ekran kimliğini belirtin. Varsayılan olan birincil ekrana ayarlanmıştır. Geçerli ekran kimlikleri için "dumpsys SurfaceFlinger --display-id" konusuna bakın.
-
--ayrıntılı
- Kayıt oturumuyla ilgili ayrıntılı bilgileri görüntüleyin.
Android'in yerleşik ekran yakalama yardımcı programlarının yeteneklerini şu şekilde daha da genişletebilirsiniz: Scrcpy. ADB'nin gücünden yararlanan açık kaynaklı bir ekran yansıtma çözümüdür.
PC ile Android cihaz arasında ikili veri aktarımı
Tam teşekküllü bir ADB kabuğu oluşturmak istemiyorsanız, ancak ana bilgisayar ile hedef Android cihazı arasında ikili verilerin kolaylaştırılmış geçişini dahil etmek istiyorsanız, aşağıdakileri kullanabilirsiniz: exec-in
Ve exec-out
komutlar.
Onlara rağmen uzun süreli varoluşexec-in ve exec-out komutları hala belgelenmemiştir. Farklı kabukların giriş ve çıkışları işleme şekli nedeniyle dosya bozulmasına yol açabilirler. Dikkatle kullanın.
İlki, Android'de bir komut çalıştırmanıza ve filtrelenmemiş konsol girişini parametre olarak beslemenize yardımcı olurken, ikincisi ise tam tersini yapar, yani Android'de bir komut çalıştırır ve filtrelenmemiş ikili çıktısını ana işletim sistemi tarafından yakalar.
Örnek:
adb exec-out "screencap -p" > "D:\screenshot.png"
Bu, screencap
Android'in telefon ekranının ekran görüntüsünü yakalama komutunu verir, ancak bunu ana bilgisayarın D: bölümüne doğrudan ekran görüntüsü.png olarak kaydeder (Windows çalıştırıyor olması şartıyla). Diğer taraftan,
adb exec-in"cd /sdcard && tar -xf -" < "D:\backup.tar"
Bu, ana bilgisayarın (Windows çalıştıran) D: bölümünde, Android cihazının dahili depolamasının kökünde saklanan backup.tar dosyasının içeriğini çıkaracaktır.
ADB inanılmaz derecede güçlü bir araçtır ve yukarıda belirtilenlerden çok daha fazlasını yapabilir. Bu makaledeki komutlar yalnızca yararlı bir başlangıç noktasıdır. Daha gelişmiş kullanım için aşağıdaki gibi komutlara göz atın: cmd-l etkileşim kurabileceğiniz farklı hizmetleri görmek ve ls -l /sistem/kutu Android ROM'unuzda bulunan farklı komut yürütülebilir dosyalarını görmek için.
Diğer Android gezileri ve işaretleri için şu adresteki kılavuzlarımıza göz atın: Android akıllı telefonunuzu nasıl rootlayabilirsiniz?, TWRP kurtarma nasıl kurulur, Ve Android cihazınıza özel bir ROM nasıl yüklenir.