ADB-tips og triks: Kommandoer som enhver superbruker bør vite om

Det er mye ved Android Debug Bridge som du kanskje ikke vet om. Klikk her for noen nyttige tips og triks for bruk av ADB!

Hurtigkoblinger

  • Shell-tilgang
  • Koble til flere enheter
  • Overføring av filer
  • Hogst
  • Viser installerte apper gjennom ADB
  • Installere og avinstallere apper gjennom ADB
  • Pakk ut APK-er med ADB
  • Sikkerhetskopiere og gjenopprette programdata
  • Oppføring av appkomponenter
  • Lansering av aktiviteter, tjenester og kringkastingsmottakere
  • Deaktivere og aktivere nesten alle apper
  • Tar skjermbilder
  • Overføring av binære data mellom PC-en og Android-enheten

Hvis du har vært en Android-entusiast som lurer i modding-scenen, eller en apputvikler i en hvilken som helst lengde av tid, før eller senere, vil du snuble over et pent verktøy kalt Android Debug Bridge, eller ADB for kort. Det er mye brukt i Android Studio som et følgelinjeverktøy for kommandolinje. Android-utviklere bruker den også som en frittstående løsning for å manuelt installere og teste apper på Android-smarttelefoner samt emulerte Android-enheter.

Men det er mye ADB kan gjøre, og det meste er ikke bare nyttig for utviklere. Selv om du ikke er en utvikler, og du leser denne artikkelen, er det en god sjanse for at du sannsynligvis har brukt ADB en eller to ganger for å sidelast en app eller justere en tillatelse. Men det er ikke alt ADB kan brukes til. Fortsett å lese for noen tips og triks for bruk av ADB du kanskje ikke visste om.

Du må ha ADB oppe og kjøre på datamaskinen. Sørg for å sjekke ut artikkelen vår om hvordan installere ADB hvis du trenger hjelp. I tilfelle du bruker Windows, må du også installer de riktige OEM USB-driverne for Android-enheten din.

Shell-tilgang

Hvis du har brukt ADB før, kan du være vant til å kjøre kommandoer på én linje. Men du kan også bruke ADB til å åpne et terminalskall på enheten din og kjøre kommandoer direkte. Og det er enkelt!

I terminalen eller ledetekstvinduet:

adb skall

Du vil da bli møtt med en $ symbol hvor du kan kjøre kommandoer direkte på enheten.

Koble til flere enheter

ADB kan kommunisere med flere enheter samtidig. Du må imidlertid spesifisere målenheten når du utsteder ADB-kommandoer i slike scenarier.

For å gjøre dette, må du vite serienummeret til målenheten. Du kan få serien ved å bruke enhetskommandoen:

adb-enheter

Bruk nå -s alternativet for å spesifisere serienummeret til målenheten. Eksempel:

adb -s <serieAntall> skall

Overføring av filer

For kommandolinjeentusiaster gir ADB en veldig enkel måte å overføre filer til og fra Android-enheten din. Bare bruk dra kommando for å kopiere filer og kataloger fra enheten og trykk kommando for å kopiere filer og kataloger til enheten:

Hvis du vil kopiere en fil eller katalog med tilhørende underkataloger til Android-enheten:

adb push local_path device_path
  • Eksempel: adb push D:\image.png /sdcard

Følgende kommando vil kopiere en fil eller katalog med underkatalogene fra Android-enheten til verts-PCen:

adb pull device_path local_path
  • Eksempel: adb pull /sdcard/backup_April.tar D:\Backup

Hogst

Android Studio tilbyr Logcat-vindu, som støtter visning av logger fra enheten din i sanntid. Det er imidlertid ikke akkurat nyttig for batchbehandling. Heldigvis leveres Android-enheter med logcat-kommandoen tilgjengelig via ADB, som kan brukes til å dumpe system- og applikasjonsloggmeldinger og skrive dem ut på skjermen.

Den grunnleggende syntaksen er som følger:

adb logcat

For å vite mer, ta en titt på vår veiledning om hvordan ta systemlogcats, kjernelogger og dmesg på Android.

påskeegg

Google tilbyr to fiffige påskeegg relatert til logcat-kommandoen.

  1. Den første er lolcat, et nikk til LOLcat meme. Den gir samme utgang som den vanlige logcat-kommandoen.
    adb lolcat
  2. Den andre er longcat, som tilsvarer logcat -v long-kommandoen. Den viser alle metadatafelt og separate meldinger med en tom linje.
    adb langkatt

Viser installerte apper gjennom ADB

For å se de installerte appene på enheten din, kan du bruke følgende kommando:

adb shell pm liste pakker

Dette vil returnere en liste over pakkenavnene til de installerte appene, med hver enkelt på sin egen linje foran pakke:.

Alternativer

Det er også noen alternativer du kan bruke for å hente mer spesifikke lister.

  • -f vil inkludere banen til basis-APK for hver app, sammen med pakkenavnet.
  • -en vil sørge for at alle kjente ikke-APEX-pakker blir returnert.
  • -d vil føre til at kommandoen bare returnerer deaktiverte pakker.
  • -e vil føre til at kommandoen bare returnerer aktiverte pakker.
  • -s vil føre til at kommandoen bare returnerer systempakker.
  • -3 vil føre til at kommandoen bare returnerer tredjepartspakker.
  • -Jeg vil inkludere installasjonspakkenavnet for hver pakke.
  • -U vil inkludere pakke-UID for hver pakke.
  • -u vil inkludere avinstallerte pakker.
  • --vis-versjonskode vil inkludere versjonskoden for hver pakke.
  • --apex-bare vil kun returnere APEX-pakker.
  • --uid vil kun vise pakker med gitt UID.
  • --bruker vil kun vise pakker som tilhører den gitte bruker-IDen.

Installere og avinstallere apper gjennom ADB

Dette er en relativt vanlig bruk av ADB, men det er uansett verdt å nevne. Du kan blant annet også benytte deg av ADB til installere og avinstallere Android-apper til Android-enheten din.

Installerer en APK

Hvis du har en APK på datamaskinen din, kan du installere den på enheten din med følgende:

adbinstallere-rnoen apk.apk

Husk å bytte ut noen apk.apk med den fullstendige banen til APK-en du vil installere.

Alternativer

Det er en haug med alternativer for å installere APK-er gjennom ADB.

  • De -r alternativet lar ADB installere over en eksisterende app (dvs. oppdatering). På Android Pie og nyere trenger du ikke å spesifisere dette alternativet.
  • De -R alternativet, for Android Pie og nyere vil føre til at installasjonen mislykkes hvis appen allerede er installert.
  • De -Jeg alternativet lar deg spesifisere et installasjonspakkenavn. Dette er hva som blir returnert hvis Android vil vite hva som installerte APK.
  • De -t alternativet tillater en APK med android: testOnly="true" i manifestet som skal installeres.
  • De -d alternativet lar den angitte APK-en være en nedgradering til en allerede installert app. Dette fungerer bare hvis begge versjonene av appen er feilsøkbare.
  • De -g alternativet for Android Marshmallow og senere gir automatisk alle kjøretidstillatelser til den installerte appen.

Det er ikke alle. Hvis du vil ha en fullstendig liste, kan du sjekke ut den innebygde dokumentasjonen.

Flere APK-er og pakker

Hvis du har en haug med APKer du vil installere samtidig, enten fra flere apper, eller fordi du installerer en apppakke, kan du bruke ADBs installer-flere og installer-multi-pakke egenskaper.

Hvis alle APK-ene dine er for én app, bruk installer-flere:

adbinstaller-flereapk1.apkapk2.apk ...

Ellers bruk installer-multi-pakke:

adbinstaller-multi-pakkeapp1.apkapp2.apk ...

Alternativene for disse kommandoene ligner på installere, men med noen begrensninger. Sjekk ut ADBs innebygde dokumentasjon for hvilke alternativer som er tilgjengelige.

Avinstallerer en app

For å avinstallere med ADB, trenger du pakkenavnet til appen du vil avinstallere. Sjekk ut delen for Viser installerte apper hvis du ikke allerede har gjort det.

Når du har pakkenavnet, er avinstallering så enkelt som:

avinstaller adb <pakkenavn>

Du kan vanligvis ikke avinstallere system eller forhåndsinstallerte apper ved å bruke denne kommandoen. Du kan imidlertid være i stand til å deaktivere dem med ADB. Sjekk ut delen Deaktivere og aktivere nesten alle apper for detaljer.

Pakk ut APK-er med ADB

Det er mange grunner til at du kanskje vil trekke ut APK(ene) for en app. Kanskje du vil sikkerhetskopiere den for fremtidig bruk, eller kanskje den ikke lenger er tilgjengelig på nettet og du vil overføre den til en annen enhet.

Å pakke ut en app ved hjelp av ADB er ganske enkelt. Først vil du finne pakkenavnet til appen du vil trekke ut. Det er flere måter å gjøre dette på, men den enkleste er vanligvis å bruke enhetens Innstillinger-app for å se liste over alle installerte apper, velg den du vil ha, og rull ned til du finner pakkenavnet eller appen ID.

Når du har pakkenavnet, kjør følgende kommando:

adb shell pm bane <pakkenavn>

Denne kommandoen vil returnere banen til alle APK-er for det pakkenavnet.

Du kan deretter bruke følgende kommando for å trekke hver APK til datamaskinen din:

adb pull /path/to/apk.apk

Sikkerhetskopiere og gjenopprette programdata

Selv om Google ennå ikke har kommet opp med en iOS-aktig sikkerhetskopieringsmetodikk med ett klikk, kan du bruke ADB til å sikkerhetskopiere og gjenopprette installerte apper sammen med dataene deres. Funksjonaliteten er imidlertid langt fra perfekt, og det har Google allerede gjort merket funksjonen som utdatert.

Sikkerhetskopiere

Slik sikkerhetskopierer du en enkelt applikasjon med dens APK:

adb backup -apk <pakkeNavn> -f pakkenavn_backup.ab

I tilfelle du vil sikkerhetskopiere alle appdata samtidig:

adb backup -f alle -alle -apk -nosystem

Siden gjenopprettingsmodulen ikke kan utføre individuell appspesifikk gjenoppretting, er det bedre å lage pakkespesifikke sikkerhetskopier. Følgende kommandobit (kompatibel med Linux/macOS og Windows Subsystem for Linux) kan gjøre det for deg:

til APP i $(adb shell pm listepakker -3)
gjøre
APP=$( ekko${APP} | sed "s/^pakke://")
adb backup -f ${APP}.backup ${APP}
ferdig

Restaurere

Først må du installere den lagrede APK-en;

adb installere <pakkeNavn>.apk

Deretter kan du gjenopprette dataene:

adbrestaurerepakkenavn_backup.ab

For å gjenta, ADB sikkerhetskopiering og gjenoppretting har flere forbehold, inkludert variable resultater avhengig av ROM

Oppføring av appkomponenter

Komponentene til en app er ting som dens aktiviteter, kringkastingsmottakere, tjenester og så videre. Noen ganger er det nyttig å vite navnene på disse komponentene i en bestemt app, spesielt hvis du vil starte skjulte aktiviteter eller sende en kringkasting med spesifikke data.

Dessverre har ikke ADB en veldig ren måte å liste opp komponentene til en app. Men det er mulig. Kjør følgende kommando:

adb shell dumpsys pakke

En hel haug med tekst vil bli returnert.

  • Rull til du finner Aktivitetsløsertabell tittel for å se aktivitetene.
  • Se under Mottakeroppløsningstabell for kringkastingsmottakere.
  • Undersøk Tjenesteløsertabell for tjenester.
  • Og så videre.

Hver komponent vil vise handlingen som trengs for å starte den, navnet på komponenten og muligens litt ekstra informasjon.

Alternativt, hvis du vil ha en enklere måte å se aktiviteter, tjenester og mottakere på, kan du bruke Root Activity Launcher-appen fra XDA Recognized Developer Zacharee 1. Den vil vise deg disse komponentene for hver app, sammen med en haug med andre nyttige funksjoner.

Root Activity LauncherUtvikler: Zachary Wander

Pris: 0,99.

nedlasting

Lansering av aktiviteter, tjenester og kringkastingsmottakere

ADB kan også brukes til å starte aktiviteter, starte tjenester og varsle BroadcastReceivers. Du kan til og med spesifisere data-URIer og Intent-tillegg hvis nødvendig.

For å starte komponenter trenger du komponentnavnet til det du vil starte. Du kan se hvordan du får det fra Oppføring av appkomponenter seksjon.

Kommandosyntaksen for å starte en aktivitet er omtrent slik:

am start -a <handling> -n <komponent>

Kommandosyntaksen for å starte en tjeneste er omtrent slik:

am startservice -a <handling> -n <komponent>

Kommandosyntaksen for å varsle en BroadcastReceiver er noe sånt som dette:

am kringkastet -a <handling> -n <komponent>

I de fleste tilfeller, for aktiviteter og tjenester, trenger du ikke spesifisere en handling eksplisitt. Du trenger det vanligvis bare hvis komponenten bruker en annen enn android.intent.action. HOVED.

På toppen av den grunnleggende syntaksen, her er hvordan du spesifiserer flere data som skal sendes. Generelt bør alle dataverdier være omgitt av doble anførselstegn.

  • -d lar deg spesifisere en data-URI.
  • -e eller --es lar deg spesifisere en ekstra streng.
  • --esn lar deg spesifisere en null streng ekstra.
  • --ez brukes til å spesifisere et boolsk tillegg.
  • --ei brukes til å spesifisere et heltall ekstra.
  • --el er for å spesifisere en lang ekstra.
  • --ef vil passere en flottør ekstra.
  • --eu passerer en URI-ekstra.
  • --ecn kan brukes til å spesifisere et ekstra komponentnavn.
  • --eia ,,... vil sende verdiene som et heltall[] ekstra.
  • --eial ,,... vil sende verdiene som en liste.
  • De samme array- og listeargumentene fungerer også for longs, floats og strenger. Bare bytt ut Jeg med passende bokstav.
  • -f lar deg spesifisere et flagg.

Det er enda flere atferdsalternativer du kan bruke, så sjekk ut den innebygde dokumentasjonen for detaljer.

Deaktivere og aktivere nesten alle apper

Systemapper i Android kan ikke avinstalleres, og dessverre kan mange av dem heller ikke deaktiveres gjennom Innstillinger. Selv om ADB ikke lar deg avinstallere dem, kan det hjelpe deg med å deaktivere dem.

Først må du sørge for å få pakkenavnet til appen du vil deaktivere. Prøv deretter disse kommandoene. Hvis en feiler, prøv neste alternativ.

  • pm deaktiver
    • For å reaktivere, bruk pm aktivere
  • pm disable-user --user 0
    • For å reaktivere, bruk pm aktivere
  • pm gjemme seg
    • For å reaktivere, bruk pm unhide
  • pm suspendert
    • For å reaktivere, bruk pm avbryt
  • pm avinstaller -k --user 0
    • For å reaktivere, bruk pm installasjon-eksisterende
      • Denne avinstallerer effektivt programmet fra brukerprofilen din. Mens kommandoen for å reaktivere bør fungerer, det er ingen garanti for det. Du må kanskje tilbakestille til fabrikk for å gjenopprette appen.
      • Hvis du bruker flere brukerprofiler på enheten din, sørg for å erstatte 0 i kommandoene ovenfor med den faktiske bruker-ID-en du har.

For å vite mer, sjekk veiledningen vår om hvordan avinstallere carrier og OEM bloatware uten root-tilgang.

Tar skjermbilder

De fleste Android-ROM-er tilbyr to praktiske shell-verktøy - screencap og screenrecord - for å ta henholdsvis skjermbilder og ta opp skjermaktiviteter. Du kan ringe dem direkte fra ADB-skallet for å ta et statisk skjermbilde eller en videosnutt av telefonskjermen og lagre den direkte på enhetens interne lagring.

Syntaksen for å ta et skjermbilde er ganske grei:

adb shell screencap /sdcard/screenshot.png

På samme måte, hvis du trenger å ta et dynamisk skjermbilde, gjør følgende:

adb shell screenrecord /sdcard/recording.mp4

Som du kanskje forventer, er screencap-verktøyet ganske enkelt, mens screenrecord-verktøyet tilbyr flere parametere. Alternativene for sistnevnte er som følger:

  • --størrelse WIDTHxHEIGHT
    • Still inn oppløsningen til videofilen (f.eks. "1280x720"). Som standard prøver den å ta målenhetens hovedskjermoppløsning (hvis støttet), og faller tilbake til 1280x720 hvis ikke.
  • --bit-rate RATE
    • Still inn videobithastigheten, i bits per sekund. Verdien kan spesifiseres som biter eller megabiter, f.eks. '4000000' tilsvarer '4M'.
  • --feilrapport
    • Du kan legge til tilleggsinformasjon, for eksempel et tidsstempeloverlegg, som kan være nyttig for å illustrere feil.
  • --tidsbegrensning TID
    • Still inn maksimal opptakstid i sekunder. Standard/maksimum er 180.
  • --display-id ID
    • Spesifiser den fysiske visnings-IDen som skal registreres. Standarden er satt til den primære skjermen. Se "dumpsys SurfaceFlinger --display-id" for gyldige visnings-IDer.
  • --ordlig
    • Vis detaljert informasjon om opptaksøkten.

Du kan utvide funksjonene til Androids innebygde skjermopptaksverktøy ytterligere med scrcpy. Det er en åpen kildekode-løsning for skjermspeiling, som utnytter kraften til ADB.

Overføring av binære data mellom PC-en og Android-enheten

I tilfelle du ikke ønsker å skape et fullverdig ADB-skall, men liker å inkorporere strømlinjeformet gjennomføring av binære data mellom verts-PC-en og mål-Android-enheten, kan du bruke exec-in og exec-out kommandoer.

Til tross for deres langvarig eksistens, er exec-in og exec-out kommandoene fortsatt udokumenterte. De kan føre til filkorrupsjon på grunn av måten forskjellige skjell håndterer innganger og utganger på. Brukes med forsiktighet.

Den første hjelper deg med å utføre en kommando på Android og mate den ufiltrerte konsollinngangen som parameter, mens den andre gjør det stikk motsatte, dvs. kjører en kommando på Android og fanger opp dens ufiltrerte binære utdata fra vertsoperativsystemet.

Eksempel:

adb exec-ute "screencap -p" > "D:\skjermbilde.png"

Dette vil bruke skjermhette kommando av Android for å ta et skjermbilde av telefonens skjerm, men lagrer det direkte som screenshot.png i D:-partisjonen til verts-PC-en (forutsatt at den kjører Windows). På den andre siden,

adb exec-i"cd /sdcard && tar -xf -" < "D:\backup.tar"

Dette vil trekke ut innholdet i backup.tar-filen som er lagret i D:-partisjonen på verts-PCen (som kjører Windows) ved roten av den interne lagringen til Android-enheten.


ADB er et utrolig kraftig verktøy, og det kan gjøre så mye mer enn bare det som er ovenfor. Kommandoene i denne artikkelen er bare et nyttig utgangspunkt. For mer avansert bruk, sjekk ut kommandoer som cmd -l for å se ulike tjenester du kanskje kan samhandle med og ls -l /system/bin for å se de forskjellige kjørbare kommandoene som er tilgjengelige i Android ROM.

For andre Android-turer og tikker, sjekk ut våre guider på hvordan du roter din Android-smarttelefon, hvordan du installerer TWRP-gjenoppretting, og hvordan du installerer en tilpasset ROM på Android-enheten din.