Det finns mycket med Android Debug Bridge som du kanske inte vet om. Klicka här för några användbara tips och tricks för att använda ADB!
snabblänkar
- Shell-åtkomst
- Ansluter till flera enheter
- Överföra filer
- Skogsavverkning
- Listar installerade appar via ADB
- Installera och avinstallera appar via ADB
- Extrahera APK-filer med ADB
- Säkerhetskopiera och återställa programdata
- Lista appkomponenter
- Lansering av aktiviteter, tjänster och sändningsmottagare
- Inaktivera och aktivera nästan alla appar
- Ta skärmdumpar
- Överföra binära data mellan datorn och Android-enheten
Om du har varit en Android-entusiast som lurar i moddingscenen, eller en apputvecklare hur länge som helst gång, förr eller senare, kommer du att snubbla över ett snyggt verktyg som heter Android Debug Bridge, eller ADB för kort. Det används flitigt i Android Studio som ett kommandoradskompanjonsverktyg. Android-utvecklare använder det också som en fristående lösning för att manuellt installera och testa appar på Android smartphones samt emulerade Android-enheter.
Men det finns mycket ADB kan göra, och det mesta är inte bara användbart för utvecklare. Även om du inte är en utvecklare, och du läser den här artikeln, finns det en god chans att du förmodligen har använt ADB en eller två gånger för att sidladda en app eller justera en behörighet. Men det är inte allt ADB kan användas till. Fortsätt läsa för några tips och tricks för att använda ADB som du kanske inte visste om.
Du måste ha ADB igång på din dator. Se till att kolla in vår artikel om hur man installerar ADB om du behöver hjälp. Om du använder Windows måste du också göra det installera lämpliga OEM USB-drivrutiner för din Android-enhet.
Shell-åtkomst
Om du har använt ADB tidigare kan du vara van vid att köra kommandon på en rad. Men du kan också använda ADB för att öppna ett terminalskal på din enhet och köra kommandon direkt. Och det är lätt!
I din terminal eller kommandotolksfönster:
adb shell
Du kommer då att hälsas med en $
symbol där du kan köra kommandon direkt på din enhet.
Ansluter till flera enheter
ADB kan kommunicera med flera enheter samtidigt. Du måste dock ange målenheten när du utfärdar ADB-kommandon i sådana scenarier.
För att göra detta måste du känna till målenhetens serienummer. Du kan få serien genom att använda kommandot devices:
adb devices
Använd nu -s
alternativ för att ange serienumret för målenheten. Exempel:
adb -s <serialnumber> shell
Överföra filer
För kommandoradsanhängare erbjuder ADB ett mycket enkelt sätt att överföra filer till och från din Android-enhet. Använd bara pull
kommando för att kopiera filer och kataloger från enheten och push
kommando för att kopiera filer och kataloger till enheten:
Om du vill kopiera en fil eller katalog med dess underkataloger till Android-enheten:
adb push local_path device_path
- Exempel:
adb push D:\image.png /sdcard
Följande kommando kopierar en fil eller katalog med dess underkataloger från Android-enheten till värddatorn:
adb pull device_path local_path
- Exempel:
adb pull /sdcard/backup_April.tar D:\Backup
Skogsavverkning
Android Studio tillhandahåller Logcat fönster, som stöder visning av loggar från din enhet i realtid. Det är dock inte direkt användbart för batchbearbetning. Lyckligtvis levereras Android-enheter med logcat-kommandot tillgängligt via ADB, som kan användas för att dumpa system- och programloggmeddelanden och skriva ut dem på skärmen.
Den grundläggande syntaxen är följande:
adb logcat
För att veta mer, ta en titt på vår handledning om hur man tar systemlogcats, kernel-loggar och dmesg på Android.
påskägg
Google erbjuder två snygga påskägg relaterade till logcat-kommandot.
- Den första är lolcat, en nick till LOLcat meme. Det ger samma utdata som det vanliga logcat-kommandot.
adb lolcat
- Den andra är longcat, vilket motsvarar kommandot logcat -v long. Den visar alla metadatafält och separata meddelanden med en tom rad.
adb longcat
Listar installerade appar via ADB
För att se de installerade apparna på din enhet kan du använda följande kommando:
adb shell pm list packages
Detta kommer att returnera en lista över paketnamnen för de installerade apparna, med var och en på sin egen rad införd med package:
.
alternativ
Det finns också några alternativ du kan använda för att hämta mer specifika listor.
- -f kommer att inkludera sökvägen till bas-APK för varje app, tillsammans med dess paketnamn.
- -a kommer att se till att alla kända icke-APEX-paket returneras.
- -d kommer att göra att kommandot endast returnerar inaktiverade paket.
- -e kommer att göra att kommandot endast returnerar aktiverade paket.
- -s kommer att göra att kommandot endast returnerar systempaket.
- -3 kommer att göra att kommandot endast returnerar tredjepartspaket.
- -jag kommer att inkludera installationspaketets namn för varje paket.
- -U kommer att inkludera paketets UID för varje paket.
- -u kommer att inkludera avinstallerade paket.
- --visa-versionskod kommer att inkludera versionskoden för varje paket.
- --endast apex kommer endast att returnera APEX-paket.
- --uid kommer endast att visa paket med angivet UID.
- --användare visar endast paket som tillhör det angivna användar-ID.
Installera och avinstallera appar via ADB
Detta är en relativt vanlig användning av ADB, men det är värt att nämna ändå. Du kan bland annat även använda dig av ADB för att installera och avinstallera Android-appar till din Android-enhet.
Installerar en APK
Om du har en APK på din dator kan du installera den på din enhet med följande:
adbinstall-rsomeapk.apk
Kom ihåg att byta ut someapk.apk
med den fullständiga sökvägen till APK-filen du vill installera.
alternativ
Det finns ett gäng alternativ för att installera APK-filer via ADB.
- De -r alternativet tillåter ADB att installera över en befintlig app (dvs. uppdatera). På Android Pie och senare behöver du inte ange det här alternativet.
- De -R alternativ, för Android Pie och senare kommer installationen att misslyckas om appen redan är installerad.
- De -jag alternativet låter dig ange ett installationspaketnamn. Detta är vad som returneras om Android vill veta vad som installerade APK.
- De -t alternativet tillåter en APK med android: testOnly="true" i sitt manifest som ska installeras.
- De -d alternativet tillåter den angivna APK-filen att vara en nedgradering till en redan installerad app. Detta fungerar bara om båda versionerna av appen är felsökningsbara.
- De -g alternativet för Android Marshmallow och senare ger automatiskt alla körtidsbehörigheter till den installerade appen.
Det är inte alla. Om du vill ha en fullständig lista kan du kolla in den inbyggda dokumentationen.
Flera APK-filer och paket
Om du har ett gäng APK-filer som du vill installera på en gång, antingen från flera appar, eller för att du installerar ett app-paket, kan du använda ADB: s install-multiple
och install-multi-package
Funktioner.
Om alla dina APK-filer är för en app, använd install-multiple
:
adbinstall-multipleapk1.apkapk2.apk ...
Annars, använd install-multi-package
:
adbinstall-multi-packageapp1.apkapp2.apk ...
Alternativen för dessa kommandon liknar install
men med vissa begränsningar. Kolla in ADB: s inbyggda dokumentation för vilka alternativ som finns.
Avinstallera en app
För att avinstallera med ADB behöver du paketnamnet för appen du vill avinstallera. Kolla in avsnittet för Listar installerade appar om du inte redan har gjort det.
När du har paketnamnet är avinstallationen så enkel som:
adb uninstall <packagename>
Du kan vanligtvis inte avinstallera system eller förinstallerade appar med det här kommandot. Du kanske kan inaktivera dem med ADB, dock. Kolla in avsnittet Inaktivera och aktivera nästan alla appar för detaljer.
Extrahera APK-filer med ADB
Det finns många anledningar till att du kanske vill extrahera APK-filerna för en app. Kanske vill du säkerhetskopiera den för framtida användning, eller så är den inte längre tillgänglig online och du vill överföra den till en annan enhet.
Att extrahera en app med ADB är ganska enkelt. Först vill du hitta paketnamnet för appen du vill extrahera. Det finns flera sätt att göra detta, men det enklaste är vanligtvis att använda enhetens Inställningar-app för att visa lista över alla installerade appar, välj den du vill ha och scrolla ner tills du hittar paketnamnet eller appen ID.
När du har paketnamnet, kör följande kommando:
adb shell pm path <packagename>
Detta kommando returnerar sökvägen till alla APK-filer för det paketnamnet.
Du kan sedan använda följande kommando för att dra varje APK till din dator:
adb pull /path/to/apk.apk
Säkerhetskopiera och återställa programdata
Även om Google ännu inte har kommit med en iOS-liknande metod för säkerhetskopiering med ett klick, kan du använda ADB för att säkerhetskopiera och återställa installerade appar tillsammans med deras data. Funktionaliteten är dock långt ifrån perfekt, och det har Google redan gjort markerade funktionen som utfasad.
Backa upp
Så här säkerhetskopierar du en enskild applikation med dess APK:
adb backup -apk <packagename> -f package_name_backup.ab
Om du vill säkerhetskopiera all appdata på en gång:
adb backup -f all -all -apk -nosystem
Eftersom återställningsmodulen inte kan utföra individuell app-specifik återställning, är det bättre att skapa en paketspecifik säkerhetskopia. Följande kommandokod (kompatibelt med Linux/macOS och Windows Subsystem för Linux) kan göra det åt dig:
for APP in $(adb shell pm list packages -3)
do
APP=$( echo${APP} | sed "s/^package://")
adb backup -f ${APP}.backup ${APP}
done
Återställ
Först måste du installera den sparade APK-filen;
adb install <packagename>.apk
Sedan kan du återställa dess data:
adbrestorepackage_name_backup.ab
För att upprepa, ADB säkerhetskopiering och återställningsfunktioner har flera varningar, inklusive variabla resultat beroende på ROM
Lista appkomponenter
En apps komponenter är saker som dess aktiviteter, sändningsmottagare, tjänster och så vidare. Ibland är det användbart att känna till namnen på dessa komponenter i en specifik app, speciellt om du vill starta dolda aktiviteter eller skicka en sändning med specifik data.
Tyvärr har ADB inte ett särskilt rent sätt att lista en apps komponenter. Men det är möjligt. Kör följande kommando:
adb shell dumpsys package
En hel massa text kommer att returneras.
- Bläddra tills du hittar Aktivitetsupplösningstabell titel för att se aktiviteterna.
- Titta under Receiver Resolver Tabell för BroadcastReceivers.
- Kolla Service Resolver Tabell för tjänster.
- Och så vidare.
Varje komponent kommer att visa den åtgärd som behövs för att starta den, namnet på komponenten och eventuellt lite extra information.
Alternativt, om du vill ha ett enklare sätt att se aktiviteter, tjänster och mottagare kan du använda appen Root Activity Launcher från XDA Recognized Developer Zacharee1. Det kommer att visa dig dessa komponenter för varje app, tillsammans med en massa andra praktiska funktioner.
Pris: 0,99.
Lansering av aktiviteter, tjänster och sändningsmottagare
ADB kan också användas för att starta aktiviteter, starta tjänster och meddela BroadcastReceivers. Du kan till och med ange data-URI och Intent-extra om det behövs.
För att starta komponenter behöver du komponentnamnet för det du vill starta. Du kan se hur du får det från Lista appkomponenter sektion.
Kommandosyntaxen för att starta en aktivitet är ungefär så här:
am start -a <action> -n <component>
Kommandosyntaxen för att starta en tjänst är ungefär så här:
am startservice -a <action> -n <component>
Kommandosyntaxen för att meddela en BroadcastReceiver är ungefär så här:
am broadcast -a <action> -n <component>
I de flesta fall, för aktiviteter och tjänster, behöver du inte ange en åtgärd uttryckligen. Du behöver det vanligtvis bara om komponenten använder en annan än android.intent.action. HUVUDSAK.
Utöver den grundläggande syntaxen, så här anger du mer data som ska skickas. I allmänhet bör alla datavärden omges av dubbla citattecken.
- -d låter dig ange en data-URI.
- -e eller --es låter dig ange en extra sträng.
- --esn låter dig ange en extra nollsträng.
- --ez används för att ange en boolesk extra.
- --ei används för att ange ett heltal extra.
- --el är för att ange ett långt extra.
- --ef kommer att passera en flottör extra.
- --eu klarar en URI-extra.
- --ecn kan användas för att ange ett extra komponentnamn.
-
--eja
kommer att skicka värdena som ett heltal[] extra., ,... -
--eial
skickar värdena som en lista, ,... . - Samma array- och listargument fungerar även för longs, floats och strängar. Byt bara ut i med lämplig bokstav.
- -f låter dig ange en flagga.
Det finns ännu fler beteendealternativ du kan använda, så kolla in den inbyggda dokumentationen för detaljer.
Inaktivera och aktivera nästan alla appar
Systemappar i Android kan inte avinstalleras, och tyvärr kan många av dem inte heller inaktiveras via Inställningar. Även om ADB inte låter dig avinstallera dem, kan det hjälpa dig att inaktivera dem.
Se först till att få paketnamnet för appen du vill inaktivera. Prova sedan dessa kommandon. Om ett misslyckas, prova nästa alternativ.
-
pm inaktivera
- För att återaktivera, använd pm aktivera
-
pm disable-user --user 0
- För att återaktivera, använd pm aktivera
-
pm gömma sig
- För att återaktivera, använd pm dölja
-
pm avbryta
- För att återaktivera, använd pm avstäng
-
pm avinstallera -k --user 0
- För att återaktivera, använd pm installation-existerande
- Den här avinstallerar effektivt programmet från din användarprofil. Medan kommandot för att återaktivera skall fungerar, det finns ingen garanti för att det kommer att fungera. Du kan behöva återställa fabriksinställningarna för att återställa appen.
- Om du använder flera användarprofiler på din enhet, se till att ersätta 0 i kommandona ovan med det faktiska användar-ID du har.
- För att återaktivera, använd pm installation-existerande
För att veta mer, kolla in vår handledning om hur man avinstallerar carrier och OEM bloatware utan root-åtkomst.
Ta skärmdumpar
De flesta Android-ROM-skivor erbjuder två praktiska skalverktyg - screencap och screenrecord - för att ta skärmdumpar respektive spela in skärmaktiviteter. Du kan ringa dem direkt från ADB-skalet för att fånga en statisk skärmdump eller ett videoklipp av din telefonskärm och spara det direkt på enhetens interna lagring.
Syntaxen för att ta en skärmdump är ganska enkel:
adb shell screencap /sdcard/screenshot.png
På samma sätt, om du behöver ta ett dynamiskt skärmgrepp, gör följande:
adb shell screenrecord /sdcard/recording.mp4
Som du kan förvänta dig är screencap-verktyget ganska enkelt, medan screenrecord-verktyget erbjuder flera parametrar. Alternativen för det senare är följande:
-
--storlek WIDTHxHEIGHT
- Ställ in upplösningen för videofilen (t.ex. "1280x720"). Som standard försöker den ta målenhetens huvudskärmupplösning (om det stöds), och faller tillbaka till 1280x720 om inte.
-
--bithastighets RATE
- Ställ in videons bithastighet, i bitar per sekund. Värdet kan anges som bitar eller megabitar, t.ex. '4000000' motsvarar '4M'.
-
--buggrapport
- Du kan lägga till ytterligare information, till exempel en tidsstämpelöverlagring, som kan vara användbar för att illustrera buggar.
-
--time-limit TID
- Ställ in maximal inspelningstid, i sekunder. Standard/max är 180.
-
--display-id ID
- Ange det fysiska visnings-ID som ska spelas in. Standardinställningen är inställd på den primära displayen. Se "dumpsys SurfaceFlinger --display-id" för giltiga display-ID: n.
-
--mångordig
- Visa djupgående information om inspelningssessionen.
Du kan utöka funktionerna för Androids inbyggda skärmdumpsverktyg ytterligare med scrcpy. Det är en skärmspeglingslösning med öppen källkod, som utnyttjar kraften i ADB.
Överföra binära data mellan datorn och Android-enheten
Om du inte vill skapa ett fullfjädrat ADB-skal, men gillar att införliva strömlinjeformad genomgång av binär data mellan värddatorn och mål-Android-enheten, kan du använda exec-in
och exec-out
kommandon.
Trots deras långvarig existens, kommandona exec-in och exec-out är fortfarande odokumenterade. De kan leda till filkorruption på grund av hur olika skal hanterar in- och utdata. Använd med försiktighet.
Den första hjälper dig att utföra ett kommando på Android och mata den ofiltrerade konsolinmatningen som dess parameter, medan den andra gör precis motsatsen, dvs kör ett kommando på Android och fångar dess ofiltrerade binära utdata av värdoperativsystemet.
Exempel:
adb exec-out "screencap -p" > "D:\screenshot.png"
Detta kommer att använda screencap
kommando av Android för att ta en skärmdump av telefonens skärm, men sparar den direkt som screenshot.png i D:-partitionen på värddatorn (förutsatt att den kör Windows). Å andra sidan,
adb exec-in"cd /sdcard && tar -xf -" < "D:\backup.tar"
Detta kommer att extrahera innehållet i filen backup.tar som är lagrad i D:-partitionen på värddatorn (som kör Windows) i roten av Android-enhetens interna lagring.
ADB är ett otroligt kraftfullt verktyg, och det kan göra så mycket mer än bara det som är ovan. Kommandona i den här artikeln är bara en användbar utgångspunkt. För mer avancerad användning, kolla in kommandon som cmd -l för att se olika tjänster som du kanske kan interagera med och ls -l /system/bin för att se de olika körbara kommandona som finns tillgängliga i din Android ROM.
För andra Android-resor och fästingar, kolla in våra guider på hur man rotar din Android-smarttelefon, hur man installerar TWRP-återställning, och hur man installerar en anpassad ROM på din Android-enhet.