Der er meget ved Android Debug Bridge, som du måske ikke kender til. Klik her for nogle nyttige tips og tricks til brug af ADB!
hurtige links
- Shell adgang
- Tilslutning til flere enheder
- Overførsel af filer
- Logning
- Visning af installerede apps gennem ADB
- Installation og afinstallation af apps via ADB
- Udpakning af APK'er med ADB
- Sikkerhedskopiering og gendannelse af applikationsdata
- Visning af appkomponenter
- Lancering af aktiviteter, tjenester og broadcast-modtagere
- Deaktivering og aktivering af næsten enhver app
- Tager skærmbilleder
- Overførsel af binære data mellem pc'en og Android-enheden
Hvis du har været en Android-entusiast, der lurer i modding-scenen, eller en app-udvikler i en længere periode gang, før eller siden, vil du falde over et pænt værktøj kaldet Android Debug Bridge, eller ADB for kort. Det er flittigt brugt i Android Studio som et kommandolinjeledsagerværktøj. Android-udviklere bruger det også som en selvstændig løsning til manuelt at installere og teste apps på Android smartphones samt emulerede Android-enheder.
Men der er meget ADB kan gøre, og det meste af det er ikke kun nyttigt for udviklere. Selvom du ikke er udvikler, og du læser denne artikel, er der en god chance for, at du sandsynligvis har brugt ADB en eller to gange til at sideindlæs en app eller justere en tilladelse. Men det er ikke alt, ADB kan bruges til. Fortsæt med at læse for nogle tips og tricks til at bruge ADB, som du måske ikke kendte til.
Du skal have ADB oppe og køre på din computer. Sørg for at tjekke vores artikel om hvordan man installerer ADB hvis du har brug for hjælp. Hvis du bruger Windows, skal du også installere de relevante OEM USB-drivere til din Android-enhed.
Shell adgang
Hvis du har brugt ADB før, kan du være vant til at køre kommandoer på én linje. Men du kan også bruge ADB til at åbne en terminal shell på din enhed og køre kommandoer direkte. Og det er nemt!
I dit terminal- eller kommandopromptvindue:
adb shell
Du vil derefter blive mødt med en $
symbol, hvor du kan køre kommandoer direkte på din enhed.
Tilslutning til flere enheder
ADB kan kommunikere med flere enheder på samme tid. Du skal dog angive målenheden, når du udsteder ADB-kommandoer i sådanne scenarier.
For at gøre dette skal du kende serienummeret på målenheden. Du kan få serien ved at bruge enhedskommandoen:
adb devices
Brug nu -s
mulighed for at angive serienummeret på målenheden. Eksempel:
adb -s <serialnumber> shell
Overførsel af filer
For kommandolinje-elskere giver ADB en meget nem måde at overføre filer til og fra din Android-enhed. Brug blot pull
kommando til at kopiere filer og mapper fra enheden og push
kommando til at kopiere filer og mapper til enheden:
Hvis du vil kopiere en fil eller mappe med dens undermapper til Android-enheden:
adb push local_path device_path
- Eksempel:
adb push D:\image.png /sdcard
Følgende kommando vil kopiere en fil eller mappe med dens undermapper fra Android-enheden til værts-pc'en:
adb pull device_path local_path
- Eksempel:
adb pull /sdcard/backup_April.tar D:\Backup
Logning
Android Studio tilbyder Logcat vindue, som understøtter visning af logfiler fra din enhed i realtid. Det er dog ikke ligefrem nyttigt til batchbehandling. Heldigvis leveres Android-enheder med logcat-kommandoen tilgængelig via ADB, som kan bruges til at dumpe system- og applikationslogmeddelelser og udskrive dem på skærmen.
Den grundlæggende syntaks er som følger:
adb logcat
For at vide mere, tag et kig på vores tutorial om hvordan man tager system logcats, kernel logs og dmesg på Android.
påskeæg
Google tilbyder to smarte påskeæg relateret til logcat-kommandoen.
- Den første er lolcat, et nik til LOLcat meme. Det giver det samme output som den almindelige logcat-kommando.
adb lolcat
- Den anden er longcat, hvilket svarer til logcat -v long kommandoen. Den viser alle metadatafelter og separate beskeder med en tom linje.
adb longcat
Visning af installerede apps gennem ADB
For at se de installerede apps på din enhed kan du bruge følgende kommando:
adb shell pm list packages
Dette vil returnere en liste over pakkenavnene på de installerede apps, med hver enkelt på sin egen linje foran package:
.
Muligheder
Der er også nogle muligheder, du kan bruge til at hente mere specifikke lister.
- -f vil inkludere stien til basis-APK for hver app sammen med dens pakkenavn.
- -en vil sørge for, at alle kendte ikke-APEX-pakker returneres.
- -d vil få kommandoen til kun at returnere deaktiverede pakker.
- -e vil få kommandoen til kun at returnere aktiverede pakker.
- -s vil få kommandoen til kun at returnere systempakker.
- -3 vil få kommandoen til kun at returnere tredjepartspakker.
- -jeg vil inkludere installationspakkenavnet for hver pakke.
- -U vil inkludere pakkens UID for hver pakke.
- -u vil inkludere afinstallerede pakker.
- --vis-versionskode vil inkludere versionskoden for hver pakke.
- --Kun apex vil kun returnere APEX-pakker.
- --uid vil kun vise pakker med det givne UID.
- --bruger vil kun vise pakker, der tilhører det givne bruger-id.
Installation og afinstallation af apps via ADB
Dette er en forholdsvis almindelig brug af ADB, men det er alligevel værd at nævne. Du kan blandt andet også gøre brug af ADB til installere og afinstallere Android-apps til din Android-enhed.
Installation af en APK
Hvis du har en APK på din computer, kan du installere den på din enhed med følgende:
adbinstall-rsomeapk.apk
Husk at udskifte someapk.apk
med den fulde sti til den APK, du vil installere.
Muligheder
Der er en masse muligheder for at installere APK'er gennem ADB.
- Det -r mulighed giver ADB mulighed for at installere over en eksisterende app (dvs. opdatering). På Android Pie og nyere behøver du ikke at angive denne mulighed.
- Det -R mulighed, for Android Pie og nyere vil få installationen til at mislykkes, hvis appen allerede er installeret.
- Det -jeg option lader dig angive et installationspakkenavn. Dette er, hvad der returneres, hvis Android vil vide, hvad der installerede APK'en.
- Det -t mulighed tillader en APK med android: testOnly="true" i sit manifest, der skal installeres.
- Det -d mulighed tillader den angivne APK at være en nedgradering til en allerede installeret app. Dette virker kun, hvis begge versioner af appen kan fejlfindes.
- Det -g mulighed for Android Marshmallow og senere giver automatisk alle runtime-tilladelser til den installerede app.
Det er ikke dem alle. Hvis du vil have en komplet liste, kan du tjekke den indbyggede dokumentation.
Flere APK'er og bundter
Hvis du har en masse APK'er, du vil installere på én gang, enten fra flere apps, eller fordi du installerer en app-pakke, kan du bruge ADB's install-multiple
og install-multi-package
funktioner.
Hvis alle dine APK'er er til én app, skal du bruge install-multiple
:
adbinstall-multipleapk1.apkapk2.apk ...
Ellers brug install-multi-package
:
adbinstall-multi-packageapp1.apkapp2.apk ...
Indstillingerne for disse kommandoer ligner install
, men med nogle begrænsninger. Tjek ADB's indbyggede dokumentation for, hvilke muligheder der er tilgængelige.
Afinstallerer en app
For at afinstallere ved hjælp af ADB skal du bruge pakkenavnet på den app, du vil afinstallere. Tjek afsnittet for Visning af installerede apps hvis du ikke allerede har gjort det.
Når du har pakkenavnet, er afinstallation så simpelt som:
adb uninstall <packagename>
Du kan generelt ikke afinstallere system eller forudinstallerede apps ved hjælp af denne kommando. Du kan dog muligvis deaktivere dem med ADB. Tjek afsnittet Deaktivering og aktivering af næsten enhver app for detaljer.
Udpakning af APK'er med ADB
Der er masser af grunde til, at du måske vil udtrække APK'erne til en app. Måske vil du sikkerhedskopiere det til fremtidig brug, eller måske er det ikke længere tilgængeligt online, og du vil overføre det til en anden enhed.
At udpakke en app ved hjælp af ADB er ret simpelt. Først skal du finde pakkenavnet på den app, du vil udpakke. Der er flere måder at gøre dette på, men den nemmeste er normalt at bruge din enheds app Indstillinger til at se liste over alle installerede apps, vælg den, du ønsker, og rul ned, indtil du finder pakkenavnet eller appen ID.
Når du har pakkenavnet, skal du køre følgende kommando:
adb shell pm path <packagename>
Denne kommando returnerer stien til alle APK'er for det pakkenavn.
Du kan derefter bruge følgende kommando til at trække hver APK til din computer:
adb pull /path/to/apk.apk
Sikkerhedskopiering og gendannelse af applikationsdata
Selvom Google endnu ikke er kommet med en iOS-lignende metode til backup af et enkelt klik, kan du bruge ADB til at sikkerhedskopiere og gendanne installerede apps sammen med deres data. Funktionaliteten er dog langt fra perfekt, og det er Google allerede markerede funktionen som forældet.
Back up
Sådan sikkerhedskopieres en enkelt applikation med dens APK:
adb backup -apk <packagename> -f package_name_backup.ab
Hvis du vil sikkerhedskopiere alle appdata på én gang:
adb backup -f all -all -apk -nosystem
Da gendannelsesmodulet ikke kan udføre individuel app-specifik gendannelse, er det bedre at oprette en pakkespecifik backup. Følgende kommandostykke (kompatibelt med Linux/macOS og Windows Subsystem til Linux) kan gøre det for dig:
for APP in $(adb shell pm list packages -3)
do
APP=$( echo${APP} | sed "s/^package://")
adb backup -f ${APP}.backup ${APP}
done
Gendan
Først skal du installere den gemte APK;
adb install <packagename>.apk
Derefter kan du gendanne dens data:
adbrestorepackage_name_backup.ab
For at gentage, ADB backup og gendannelsesfunktioner har flere forbehold, herunder variable resultater afhængigt af ROM'en
Visning af appkomponenter
En apps komponenter er ting som dens aktiviteter, broadcast-modtagere, tjenester og så videre. Nogle gange er det nyttigt at kende navnene på disse komponenter i en specifik app, især hvis du vil starte skjulte aktiviteter eller sende en udsendelse med specifikke data.
Desværre har ADB ikke en meget ren måde at liste en apps komponenter på. Men det er muligt. Kør følgende kommando:
adb shell dumpsys package
En hel masse tekst vil blive returneret.
- Rul indtil du finder Aktivitetsopløsningstabel titel for at se aktiviteterne.
- Kig under Modtager resolver tabel til BroadcastReceivere.
- Tjek Tjenesteopløsningstabel for tjenester.
- Og så videre.
Hver komponent vil vise den nødvendige handling for at starte den, navnet på komponenten og muligvis nogle ekstra oplysninger.
Alternativt, hvis du vil have en nemmere måde at se aktiviteter, tjenester og modtagere på, kan du bruge Root Activity Launcher-appen fra XDA Recognized Developer Zacharee 1. Det vil vise dig disse komponenter for hver app sammen med en masse andre praktiske funktioner.
Pris: 0,99.
Lancering af aktiviteter, tjenester og broadcast-modtagere
ADB kan også bruges til at starte aktiviteter, starte tjenester og underrette BroadcastReceivers. Du kan endda specificere data-URI'er og Intent-ekstramateriale, hvis det er nødvendigt.
For at starte komponenter skal du bruge komponentnavnet på det, du vil starte. Du kan se, hvordan du får det fra Liste over app-komponenter afsnit.
Kommandosyntaksen for at starte en aktivitet er sådan her:
am start -a <action> -n <component>
Kommandosyntaksen for at starte en tjeneste er sådan her:
am startservice -a <action> -n <component>
Kommandosyntaksen til at underrette en BroadcastReceiver er sådan her:
am broadcast -a <action> -n <component>
I de fleste tilfælde, for aktiviteter og tjenester, behøver du ikke at angive en handling eksplicit. Du har normalt kun brug for det, hvis komponenten bruger en anden end android.intent.action. HOVED.
Ud over den grundlæggende syntaks er her, hvordan du specificerer flere data, der skal videregives. Generelt skal alle dataværdier være omgivet af dobbelte anførselstegn.
- -d giver dig mulighed for at angive en data-URI.
- -e eller --es giver dig mulighed for at angive en ekstra streng.
- --esn giver dig mulighed for at angive en null streng ekstra.
- --ez bruges til at angive en boolesk ekstra.
- --ej bruges til at angive et heltal ekstra.
- --el er for at angive en lang ekstra.
- --ef vil passere en flyder ekstra.
- --eu bestå en URI ekstra.
- --ecn kan bruges til at angive et ekstra komponentnavn.
-
--eja
vil videregive værdierne som et heltal[] ekstra., ,... -
--eial
vil videregive værdierne som en liste, ,... . - De samme array- og listeargumenter fungerer også for longs, floats og Strings. Bare udskift jeg med det passende bogstav.
- -f giver dig mulighed for at angive et flag.
Der er endnu flere adfærdsmuligheder, du kan bruge, så tjek den indbyggede dokumentation for detaljer.
Deaktivering og aktivering af næsten enhver app
Systemapps i Android kan ikke afinstalleres, og mange af dem kan desværre heller ikke deaktiveres via Indstillinger. Selvom ADB ikke tillader dig at afinstallere dem, kan det hjælpe dig med at deaktivere dem.
Først skal du sørge for at få pakkenavnet på den app, du vil deaktivere. Prøv derefter disse kommandoer. Hvis en fejler, prøv den næste mulighed.
-
pm deaktivere
- For at genaktivere, brug pm aktivere
-
pm disable-user --user 0
- For at genaktivere, brug pm aktivere
-
pm skjul
- For at genaktivere, brug pm vises
-
pm suspendere
- For at genaktivere, brug kl. ophæv suspenderingen
-
pm afinstaller -k --user 0
- For at genaktivere, brug pm installere-eksisterende
- Denne afinstallerer effektivt programmet fra din brugerprofil. Mens kommandoen for at genaktivere bør arbejde, der er ingen garanti for, at det vil. Du skal muligvis nulstille fabriksindstillingerne for at gendanne appen.
- Hvis du bruger flere brugerprofiler på din enhed, skal du sørge for at erstatte 0 i kommandoerne ovenfor med det faktiske bruger-id, du har.
- For at genaktivere, brug pm installere-eksisterende
For at vide mere, tjek vores tutorial om hvordan man afinstallerer carrier og OEM bloatware uden root-adgang.
Tager skærmbilleder
De fleste Android ROM'er tilbyder to praktiske shell-værktøjer - screencap og screenrecord - til henholdsvis at tage skærmbilleder og optage skærmaktiviteter. Du kan ringe til dem direkte fra ADB-skallen for at tage et statisk skærmbillede eller et videoudsnit af din telefonskærm og gemme det direkte på enhedens interne lager.
Syntaksen til at tage et skærmbillede er ret ligetil:
adb shell screencap /sdcard/screenshot.png
På samme måde, hvis du skal have fat i et dynamisk screengrab, skal du gøre følgende:
adb shell screenrecord /sdcard/recording.mp4
Som du måske forventer, er screencap-værktøjet ret simpelt, mens screenrecord-værktøjet tilbyder flere parametre. Mulighederne for sidstnævnte er som følger:
-
--størrelse WIDTHxHØJDE
- Indstil opløsningen for videofilen (f.eks. "1280x720"). Som standard forsøger den at tage målenhedens hovedskærmopløsning (hvis understøttet), og falder tilbage til 1280x720, hvis ikke.
-
--bit-rate RATE
- Indstil videoens bithastighed i bits pr. sekund. Værdien kan angives som bits eller megabits, f.eks. '4000000' svarer til '4M'.
-
--fejlrapport
- Du kan tilføje yderligere oplysninger, såsom et tidsstempel, som kan være nyttigt til at illustrere fejl.
-
--tidsbegrænsning TID
- Indstil den maksimale optagetid i sekunder. Standard/maksimum er 180.
-
--display-id id
- Angiv det fysiske display-id, der skal optages. Standarden er indstillet til det primære display. Se "dumpsys SurfaceFlinger --display-id" for gyldige display-id'er.
-
--ordrig
- Vis dybdegående information om optagelsessessionen.
Du kan udvide mulighederne for Androids indbyggede skærmoptagelsesværktøjer yderligere med scrcpy. Det er en open source-skærmspejlingsløsning, som udnytter kraften i ADB.
Overførsel af binære data mellem pc'en og Android-enheden
I tilfælde af at du ikke ønsker at skabe en fuldgyldig ADB-skal, men kan lide at inkorporere strømlinet passthrough af binære data mellem værts-pc'en og mål-Android-enheden, kan du gøre brug af exec-in
og exec-out
kommandoer.
På trods af deres langvarig eksistens, kommandoerne exec-in og exec-out er stadig udokumenterede. De kan føre til filkorruption på grund af den måde, forskellige shells håndterer input og output. Brug med forsigtighed.
Den første hjælper dig med at udføre en kommando på Android og fodre den ufiltrerede konsolindgang som dens parameter, mens den anden gør det stik modsatte, dvs. kører en kommando på Android og fanger dens ufiltrerede binære output af værtens OS.
Eksempel:
adb exec-out "screencap -p" > "D:\screenshot.png"
Dette vil bruge screencap
kommando af Android for at tage et skærmbillede af telefonens skærm, men gemmer det direkte som screenshot.png i D:-partitionen på værts-pc'en (forudsat at den kører Windows). På den anden side,
adb exec-in"cd /sdcard && tar -xf -" < "D:\backup.tar"
Dette vil udtrække indholdet af backup.tar-filen, der er gemt i D:-partitionen på værts-pc'en (der kører Windows) i roden af det interne lager på Android-enheden.
ADB er et utroligt kraftfuldt værktøj, og det kan så meget mere end blot det, der er ovenfor. Kommandoerne i denne artikel er blot et nyttigt udgangspunkt. For mere avanceret brug, tjek kommandoer som cmd -l for at se forskellige tjenester, du muligvis kan interagere med og ls -l /system/bin for at se de forskellige eksekverbare kommandoer, der er tilgængelige i din Android ROM.
For andre Android-ture og kryds, tjek vores guides på hvordan du rooter din Android-smartphone, hvordan man installerer TWRP-gendannelse, og hvordan man installerer en brugerdefineret ROM på din Android-enhed.