Android Debug Bridge obsahuje spoustu věcí, o kterých možná nevíte. Klikněte sem pro několik užitečných tipů a triků pro používání ADB!
Rychlé odkazy
- Shell přístup
- Připojení k více zařízením
- Přenos souborů
- Protokolování
- Výpis nainstalovaných aplikací prostřednictvím ADB
- Instalace a odinstalace aplikací prostřednictvím ADB
- Extrahování souborů APK pomocí ADB
- Zálohování a obnova dat aplikace
- Výpis komponent aplikace
- Spouštění činností, služeb a přijímačů vysílání
- Zakázání a povolení téměř jakékoli aplikace
- Pořizování snímků obrazovky
- Přenos binárních dat mezi počítačem a zařízením Android
Pokud jste byli nadšenci pro Android, kteří číhají na scéně moddingu, nebo vývojáři aplikací na jakoukoli délku dříve nebo později narazíte na úhledný nástroj nazvaný Android Debug Bridge nebo ADB pro krátký. Je široce používán v Android Studio jako doprovodný nástroj příkazového řádku. Vývojáři Androidu jej také používají jako samostatné řešení pro ruční instalaci a testování aplikací smartphony Android stejně jako emulovaná zařízení Android.
ADB toho ale umí hodně a většina z toho není užitečná pouze pro vývojáře. I když nejste vývojář a čtete tento článek, je velká šance, že jste pravděpodobně jednou nebo dvakrát použili ADB boční načtení aplikace nebo upravit povolení. Ale to není vše, na co lze ADB použít. Pokračujte ve čtení, kde najdete některé tipy a triky pro používání ADB, o kterých jste možná nevěděli.
V počítači budete muset mít spuštěnou službu ADB. Určitě se podívejte na náš článek o jak nainstalovat ADB Pokud potřebuješ pomoc. V případě, že používáte Windows, musíte také nainstalujte příslušné ovladače USB OEM pro vaše zařízení Android.
Shell přístup
Pokud jste již dříve používali ADB, možná jste zvyklí spouštět příkazy všechny na jednom řádku. Ale můžete také použít ADB k otevření shellu terminálu na vašem zařízení a spouštění příkazů přímo. A je to snadné!
V okně terminálu nebo příkazového řádku:
adb shell
Poté vás přivítá a $
symbol, kde můžete spouštět příkazy přímo na vašem zařízení.
Připojení k více zařízením
ADB může komunikovat s více zařízeními současně. Při vydávání příkazů ADB v takových scénářích však musíte zadat cílové zařízení.
K tomu budete potřebovat znát sériové číslo cílového zařízení. Seriál můžete získat pomocí příkazu devices:
adb devices
Nyní použijte -s
možnost zadat sériové číslo cílového zařízení. Příklad:
adb -s <serialnumber> shell
Přenos souborů
Pro milovníky příkazového řádku poskytuje ADB velmi snadný způsob přenosu souborů do a ze zařízení Android. Stačí použít pull
příkaz ke kopírování souborů a adresářů ze zařízení a push
příkaz pro zkopírování souborů a adresářů do zařízení:
Pokud chcete zkopírovat soubor nebo adresář s jeho podadresáři do zařízení Android:
adb push local_path device_path
- Příklad:
adb push D:\image.png /sdcard
Následující příkaz zkopíruje soubor nebo adresář s jeho podadresáři ze zařízení Android do hostitelského počítače:
adb pull device_path local_path
- Příklad:
adb pull /sdcard/backup_April.tar D:\Backup
Protokolování
Android Studio poskytuje Okno Logcat, který podporuje zobrazování protokolů z vašeho zařízení v reálném čase. Není to však zrovna užitečné pro dávkové zpracování. Naštěstí se zařízení Android dodávají s příkazem logcat dostupným prostřednictvím ADB, který lze použít k výpisu zpráv protokolu systému a aplikací a jejich vytištění na obrazovku.
Základní syntaxe je následující:
adb logcat
Chcete-li vědět více, podívejte se na náš tutoriál jak vzít systémové logcats, kernel logs a dmesg na Android.
velikonoční vajíčka
Google nabízí dvě šikovná velikonoční vajíčka související s příkazem logcat.
- První je lolcat, kývnutí na LOLcat meme. Poskytuje stejný výstup jako běžný příkaz logcat.
adb lolcat
- Druhým je longcat, což je ekvivalent příkazu logcat -v long. Zobrazuje všechna pole metadat a samostatné zprávy s prázdným řádkem.
adb longcat
Výpis nainstalovaných aplikací prostřednictvím ADB
Chcete-li zobrazit nainstalované aplikace v zařízení, můžete použít následující příkaz:
adb shell pm list packages
Tím se vrátí seznam názvů balíčků nainstalovaných aplikací, přičemž před každým z nich je na samostatném řádku package:
.
Možnosti
Existují také některé možnosti, které můžete použít k načtení konkrétnějších seznamů.
- -F bude obsahovat cestu k základnímu souboru APK pro každou aplikaci spolu s názvem balíčku.
- -A zajistí, aby byly vráceny všechny známé balíčky mimo APEX.
- -d způsobí, že příkaz vrátí pouze zakázané balíčky.
- -E způsobí, že příkaz vrátí pouze povolené balíčky.
- -s způsobí, že příkaz vrátí pouze systémové balíčky.
- -3 způsobí, že příkaz vrátí pouze balíčky třetích stran.
- -i bude obsahovat název instalačního balíčku pro každý balíček.
- -U bude obsahovat UID balíčku pro každý balíček.
- -u bude obsahovat odinstalované balíčky.
- --show-versioncode bude obsahovat kód verze pro každý balíček.
- --pouze apex vrátí pouze balíčky APEX.
- --uid zobrazí pouze balíčky s daným UID.
- --uživatel zobrazí pouze balíčky patřící danému ID uživatele.
Instalace a odinstalace aplikací prostřednictvím ADB
Jedná se o poměrně běžné použití ADB, ale každopádně stojí za zmínku. Mimo jiné můžete také využít ADB k instalovat a odinstalovat aplikace pro Android do vašeho zařízení Android.
Instalace souboru APK
Pokud máte v počítači soubor APK, můžete jej nainstalovat do zařízení pomocí následujícího:
adbinstall-rsomeapk.apk
Nezapomeňte vyměnit someapk.apk
s úplnou cestou k souboru APK, který chcete nainstalovat.
Možnosti
Existuje spousta možností pro instalaci souborů APK prostřednictvím ADB.
- The -r možnost umožňuje ADB nainstalovat přes existující aplikaci (tj. aktualizovat). V systému Android Pie a novějších tuto možnost zadávat nemusíte.
- The -R pro Android Pie a novější způsobí selhání instalace, pokud je aplikace již nainstalována.
- The -i volba umožňuje zadat název instalačního balíčku. To je to, co se vrátí, pokud Android chce vědět, co nainstalovalo soubor APK.
- The -t možnost umožňuje APK s android: testOnly="true" v jeho manifestu k instalaci.
- The -d umožňuje, aby zadaný soubor APK byl downgrade na již nainstalovanou aplikaci. To funguje pouze v případě, že jsou obě verze aplikace laditelné.
- The -G volba pro Android Marshmallow a novější automaticky uděluje všechna runtime oprávnění nainstalované aplikaci.
To nejsou všechny. Pokud chcete úplný seznam, můžete se podívat na vestavěnou dokumentaci.
Více souborů APK a balíčků
Pokud máte spoustu souborů APK, které chcete nainstalovat najednou, buď z více aplikací, nebo protože instalujete balíček aplikací, můžete použít ADB install-multiple
a install-multi-package
funkce.
Pokud jsou všechny vaše soubory APK pro jednu aplikaci, použijte install-multiple
:
adbinstall-multipleapk1.apkapk2.apk ...
V opačném případě použijte install-multi-package
:
adbinstall-multi-packageapp1.apkapp2.apk ...
Možnosti těchto příkazů jsou podobné jako install
, ale s určitými omezeními. Prohlédněte si vestavěnou dokumentaci ADB, kde jsou dostupné možnosti.
Odinstalování aplikace
Chcete-li odinstalovat pomocí ADB, budete potřebovat název balíčku aplikace, kterou chcete odinstalovat. Podívejte se na sekci pro Výpis nainstalovaných aplikací pokud jste to ještě neudělali.
Jakmile máte název balíčku, odinstalování je stejně jednoduché jako:
adb uninstall <packagename>
Pomocí tohoto příkazu obecně nelze odinstalovat systém nebo předinstalované aplikace. Můžete je však zakázat pomocí ADB. Podívejte se na sekci Zakázání a povolení téměř jakékoli aplikace pro detaily.
Extrahování souborů APK pomocí ADB
Existuje mnoho důvodů, proč byste mohli chtít extrahovat soubory APK pro aplikaci. Možná jej chcete zálohovat pro budoucí použití, nebo možná již není k dispozici online a chcete jej přenést do jiného zařízení.
Extrahování aplikace pomocí ADB je docela jednoduché. Nejprve budete chtít najít název balíčku aplikace, kterou chcete extrahovat. Existuje několik způsobů, jak to provést, ale nejjednodušší je obvykle použít k zobrazení aplikaci Nastavení vašeho zařízení seznam všech nainstalovaných aplikací, vyberte tu, kterou chcete, a přejděte dolů, dokud nenajdete název balíčku nebo aplikaci ID.
Jakmile máte název balíčku, spusťte následující příkaz:
adb shell pm path <packagename>
Tento příkaz vrátí cestu ke všem souborům APK pro daný název balíčku.
Poté můžete pomocí následujícího příkazu stáhnout každý soubor APK do počítače:
adb pull /path/to/apk.apk
Zálohování a obnova dat aplikace
Ačkoli Google ještě nepřišel s metodikou zálohování jedním kliknutím ve stylu iOS, můžete použít ADB k zálohování a obnově nainstalovaných aplikací spolu s jejich daty. Funkčnost však zdaleka není dokonalá a Google už to udělal označil funkci jako zastaralou.
Záloha
Chcete-li zálohovat jednu aplikaci s jejím APK:
adb backup -apk <packagename> -f package_name_backup.ab
V případě, že chcete zálohovat všechna data aplikace najednou:
adb backup -f all -all -apk -nosystem
Vzhledem k tomu, že obnovovací modul nemůže provádět obnovu specifické pro jednotlivé aplikace, je lepší vytvořit zálohy specifické pro balíček. Následující fragment příkazu (kompatibilní s Linux/macOS a Windows Subsystem for Linux) to dokáže za vás:
for APP in $(adb shell pm list packages -3)
do
APP=$( echo${APP} | sed "s/^package://")
adb backup -f ${APP}.backup ${APP}
done
Obnovit
Nejprve musíte nainstalovat uložený soubor APK;
adb install <packagename>.apk
Poté můžete obnovit jeho data:
adbrestorepackage_name_backup.ab
Pro zopakování, funkce zálohování a obnovy ADB mají několik upozornění, včetně proměnlivých výsledků v závislosti na ROM
Výpis komponent aplikace
Komponenty aplikace jsou věci jako její aktivity, přijímače vysílání, služby a tak dále. Někdy je užitečné znát názvy těchto součástí v konkrétní aplikaci, zejména pokud chcete spustit skryté aktivity nebo odeslat vysílání s konkrétními daty.
ADB bohužel nemá velmi čistý způsob výpisu součástí aplikace. Ale je to možné. Spusťte následující příkaz:
adb shell dumpsys package
Vrátí se celá hromada textu.
- Procházejte, dokud nenajdete Tabulka analyzátoru aktivity název pro zobrazení aktivit.
- Podívejte se pod Tabulka Resolver Receiver pro BroadcastReceivers.
- Zkontrolovat Tabulka analyzátoru služeb pro Služby.
- A tak dále.
Každá komponenta zobrazí akci potřebnou k jejímu spuštění, název komponenty a případně nějaké další informace.
Případně, pokud chcete snadnější způsob, jak zobrazit aktivity, služby a přijímače, můžete použít aplikaci Root Activity Launcher od XDA Recognized Developer Zacharee1. Ukáže vám tyto součásti pro každou aplikaci spolu s řadou dalších užitečných funkcí.
Cena: 0,99.
Spouštění činností, služeb a přijímačů vysílání
ADB lze také použít ke spouštění aktivit, spouštění služeb a upozorňování BroadcastReceivers. V případě potřeby můžete dokonce zadat identifikátory URI dat a doplňky záměru.
Chcete-li spustit komponenty, budete potřebovat název komponenty toho, co chcete spustit. Můžete vidět, jak to získat z Výpis komponent aplikace sekce.
Syntaxe příkazu pro spuštění aktivity je něco takového:
am start -a <action> -n <component>
Syntaxe příkazu pro spuštění služby je něco takového:
am startservice -a <action> -n <component>
Syntaxe příkazu pro upozornění BroadcastReceiver je něco takového:
am broadcast -a <action> -n <component>
Ve většině případů pro Aktivity a služby nemusíte akci explicitně specifikovat. Obvykle jej budete potřebovat pouze v případě, že komponenta používá jinou než android.intent.action. HLAVNÍ.
Kromě základní syntaxe je zde uveden postup, jak zadat další data, která se mají předat. Obecně platí, že všechny hodnoty dat by měly být uzavřeny do dvojitých uvozovek.
- -d umožňuje zadat URI dat.
- -E nebo --es umožňuje zadat řetězec navíc.
- --esn umožňuje zadat navíc nulový řetězec.
- --ez se používá k určení booleovské extra.
- --ei se používá k určení celého čísla navíc.
- --el je pro specifikaci dlouhé extra.
- --ef projde plovákem navíc.
- --eu předá URI navíc.
- --ecn lze použít k určení názvu komponenty navíc.
-
--eia
předá hodnoty jako Integer[] navíc., ,... -
--eial
předá hodnoty jako seznam, ,... . - Stejné argumenty pole a seznamu fungují také pro longs, floats a Strings. Stačí vyměnit i s příslušným písmenem.
- -F umožňuje zadat příznak.
Existuje ještě více možností chování, které můžete použít, takže podrobnosti najdete ve vestavěné dokumentaci.
Zakázání a povolení téměř jakékoli aplikace
Systémové aplikace v Androidu nelze odinstalovat a mnoho z nich bohužel také nelze deaktivovat prostřednictvím Nastavení. Ačkoli vám je ADB nedovolí odinstalovat, může vám pomoci je zakázat.
Nejprve se ujistěte, že máte název balíčku aplikace, kterou chcete zakázat. Pak vyzkoušejte tyto příkazy. Pokud jeden selže, zkuste další možnost.
-
pm zakázat
- Chcete-li znovu povolit, použijte pm povolit
-
pm disable-user --user 0
- Chcete-li znovu povolit, použijte pm povolit
-
pm skrýt
- Chcete-li znovu povolit, použijte pm odkrýt
-
odpoledne pozastaveno
- Chcete-li znovu povolit, použijte pm unspend
-
pm odinstalovat -k --user 0
- Chcete-li znovu povolit, použijte pm instalace-existující
- Tento efektivně odinstaluje aplikaci z vašeho uživatelského profilu. Zatímco příkaz znovu povolit by měl fungovat, není žádná záruka, že bude. K obnovení aplikace možná budete muset obnovit tovární nastavení.
- Pokud na svém zařízení používáte více uživatelských profilů, nezapomeňte nahradit 0 ve výše uvedených příkazech skutečným ID uživatele, které máte.
- Chcete-li znovu povolit, použijte pm instalace-existující
Chcete-li vědět více, podívejte se na náš tutoriál jak odinstalovat bloatware operátora a OEM bez přístupu root.
Pořizování snímků obrazovky
Většina ROM se systémem Android nabízí dva praktické nástroje prostředí – screencap a screenrecord – pro pořizování snímků obrazovky a nahrávání aktivit na obrazovce. Můžete jim zavolat přímo z prostředí ADB, abyste pořídili statický snímek obrazovky nebo úryvek videa z obrazovky telefonu a uložili jej přímo do interní paměti zařízení.
Syntaxe pro pořízení snímku obrazovky je docela jednoduchá:
adb shell screencap /sdcard/screenshot.png
Podobně, pokud potřebujete chytit dynamický screengrab, proveďte následující:
adb shell screenrecord /sdcard/recording.mp4
Jak můžete očekávat, nástroj screencap je poměrně jednoduchý, zatímco nástroj screenrecord nabízí několik parametrů. Možnosti pro druhé jsou následující:
-
--velikost WIDTHxHEIGHT
- Nastavte rozlišení souboru videa (např. „1280x720“). Ve výchozím nastavení se pokusí převzít hlavní rozlišení displeje cílového zařízení (pokud je podporováno), a pokud ne, spadne zpět na 1280x720.
-
--bitová rychlost
- Nastavte datový tok videa v bitech za sekundu. Hodnota může být specifikována jako bity nebo megabity, např. '4000000' je ekvivalentní '4M'.
-
--hlášení o chybách
- Můžete přidat další informace, jako je překrytí časového razítka, které může být užitečné pro ilustraci chyb.
-
--time-limit TIME
- Nastavte maximální dobu záznamu v sekundách. Výchozí / maximum je 180.
-
--display-id ID
- Zadejte fyzické ID zobrazení, které chcete zaznamenat. Výchozí zobrazení je nastaveno na primární displej. Platná ID zobrazení viz "dumpsys SurfaceFlinger --display-id".
-
-- podrobné
- Zobrazte podrobné informace o relaci nahrávání.
Možnosti vestavěných nástrojů pro snímání obrazovky systému Android můžete dále rozšířit pomocí scrcpy. Jedná se o open source řešení zrcadlení obrazovky, které využívá sílu ADB.
Přenos binárních dat mezi počítačem a zařízením Android
V případě, že nechcete vytvářet plnohodnotný ADB shell, ale rádi byste začlenili efektivní předávání binárních dat mezi hostitelský počítač a cílové zařízení Android, můžete využít exec-in
a exec-out
příkazy.
Navzdory jejich prodloužená existence, příkazy exec-in a exec-out jsou stále nezdokumentované. Mohou vést k poškození souboru kvůli způsobu, jakým různé shelly zpracovávají vstupy a výstupy. Používejte opatrně.
První z nich vám pomůže provést příkaz v systému Android a načíst nefiltrovaný vstup konzoly jako jeho parametr, zatímco druhý dělá přesný opak, tj. spustí příkaz na Androidu a zachytí jeho nefiltrovaný binární výstup hostitelským OS.
Příklad:
adb exec-out "screencap -p" > "D:\screenshot.png"
Tím se použije screencap
příkaz Android k pořízení snímku obrazovky displeje telefonu, ale přímo jej uloží jako screenshot.png do oddílu D: hostitelského počítače (za předpokladu, že běží na Windows). Na druhou stranu,
adb exec-in"cd /sdcard && tar -xf -" < "D:\backup.tar"
Tím se extrahuje obsah souboru backup.tar uloženého v oddílu D: hostitelského počítače (se systémem Windows) v kořenovém adresáři interního úložiště zařízení Android.
ADB je neuvěřitelně mocný nástroj a dokáže mnohem víc než jen to, co je uvedeno výše. Příkazy v tomto článku jsou jen užitečným výchozím bodem. Pro pokročilejší použití se podívejte na příkazy jako cmd -l zobrazíte různé služby, se kterými byste mohli pracovat, a ls -l /system/bin zobrazíte různé spustitelné soubory příkazů dostupné ve vaší Android ROM.
Pro další výlety a klíšťata pro Android se podívejte na naše průvodce na jak rootovat svůj smartphone s Androidem, jak nainstalovat obnovu TWRP, a jak nainstalovat vlastní ROM do vašeho zařízení Android.