Android
adb shell
Zoeken…
Invoering
adb shell
opent een Linux-shell in een doelapparaat of emulator. Het is de meest krachtige en veelzijdige manier om een Android-apparaat via adb
te bedienen.
Dit onderwerp is gescheiden van ADB (Android Debug Bridge) vanwege het bereiken van de limiet van voorbeelden, waarvan er veel een adb shell
opdracht adb shell
.
Syntaxis
- adb shell [-e escape] [-n] [-Tt] [-x] [command]
parameters
Parameter | Details |
---|---|
-e | kies escape karakter, of "none"; standaard '~' |
-n | niet lezen van stdin |
-T | PTY-toewijzing uitschakelen |
-t | PTY-toewijzing afdwingen |
-X | externe exit-codes en stdout / stderr-scheiding uitschakelen |
Stuur tekst, toets ingedrukt en raak evenementen aan naar Android-apparaat via ADB
voer de volgende opdracht uit om de tekst in een weergave met een focus in te voegen (als het tekstinvoer ondersteunt)
Stuur tekst op SDK 23+
adb shell "input keyboard text 'Paste text on Android Device'"
Indien al verbonden met uw apparaat via adb
:
input text 'Paste text on Android Device'
Tekst verzenden vóór SDK 23
adb shell "input keyboard text 'Paste%stext%son%sAndroid%sDevice'"
Spaties worden niet geaccepteerd als invoer, vervang ze door% s.
Evenementen verzenden
Simuleren door op de hardwaretoets te drukken
adb shell input keyevent 26
Of anders
adb shell input keyevent POWER
Zelfs als u geen hardwaresleutel hebt, kunt u nog steeds een keyevent
gebruiken om de equivalente actie uit te voeren
adb shell input keyevent CAMERA
Stuur aanraakgebeurtenis als invoer
adb shell input tap Xpoint Ypoint
Verzend veeggebeurtenis als invoer
adb shell input swipe Xpoint1 Ypoint1 Xpoint2 Ypoint2 [DURATION*]
* DUUR is optioneel, standaard = 300 ms. bron
Ontvang X- en Y-punten door de pointerlocatie in de ontwikkelaaroptie in te schakelen.
ADB-voorbeeld shellscript
Als u een script in Ubuntu wilt uitvoeren, maakt u script.sh met de rechtermuisknop op het bestand en voegt u lees- / schrijfrechten toe en vinkt u het bestand als programma toe te staan aan .
Open terminal-emulator en voer de opdracht ./script.sh uit
Script.sh
for (( c=1; c<=5; c++ ))
do
adb shell input tap X Y
echo "Clicked $c times"
sleep 5s
done
Voor een uitgebreide lijst met evenementnummers
- shortlist van verschillende interessante evenementen ADB Shell Input Events
- referentiedocumentatie https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_POWER .
Lijst pakketten
Drukt alle pakketten af, optioneel alleen pakketten waarvan de pakketnaam de tekst in <FILTER> bevat.
adb shell pm list packages [options] <FILTER>
All <FILTER>
adb shell pm list packages
attributen:
-f
om het bijbehorende bestand te bekijken.
-i
Raadpleeg het installatieprogramma voor de pakketten.
-u
om ook verwijderde pakketten op te nemen.
-u
ook verwijderde pakketten op.
Attributen die filteren:
-d
voor uitgeschakelde pakketten.
-e
voor ingeschakelde pakketten.
-s
voor systeempakketten.
-3
voor pakketten van derden.
--user <USER_ID>
voor een specifieke op te vragen gebruikersruimte.
API 23+ machtigingen verlenen en intrekken
Een one-liner die helpt bij het verlenen of intrekken van kwetsbare machtigingen.
toekenning
adb shell pm grant <sample.package.id> android.permission.<PERMISSION_NAME>
intrekken
adb shell pm revoke <sample.package.id> android.permission.<PERMISSION_NAME>
Alle runtime-machtigingen tegelijkertijd tijdens de installatie verlenen (-g)
adb install -g /path/to/sample_package.apk
Applicatiegegevens afdrukken
Met deze opdracht worden alle relevante applicatiegegevens afgedrukt:
- versie code
- versienaam
- verleende machtigingen (Android API 23+)
- enz..
adb shell dumpsys package <your.package.id>
Het display opnemen
De weergave van apparaten met Android 4.4 (API-niveau 19) en hoger opnemen:
adb shell screenrecord [options] <filename>
adb shell screenrecord /sdcard/demo.mp4
(druk op Ctrl-C om de opname te stoppen)
Download het bestand van het apparaat:
adb pull /sdcard/demo.mp4
Opmerking: Stop de schermopname door op Ctrl-C te drukken, anders stopt de opname automatisch na drie minuten of de tijdslimiet ingesteld door -
--time-limit
.
adb shell screenrecord --size <WIDTHxHEIGHT>
Stelt het videoformaat in: 1280x720. De standaardwaarde is de native schermresolutie van het apparaat (indien ondersteund), 1280x720 indien niet. Gebruik voor de beste resultaten een grootte die wordt ondersteund door de AVC-encoder (Advanced Video Coding) van uw apparaat.
adb shell screenrecord --bit-rate <RATE>
Stelt de videobitsnelheid voor de video in, in megabits per seconde. De standaardwaarde is 4 Mbps. U kunt de bitsnelheid verhogen om de videokwaliteit te verbeteren, maar dit resulteert in grotere filmbestanden. In het volgende voorbeeld wordt de opnamebitsnelheid ingesteld op 5 Mbps:
adb shell screenrecord --bit-rate 5000000 /sdcard/demo.mp4
adb shell screenrecord --time-limit <TIME>
Stelt de maximale opnametijd in seconden in. De standaard en maximale waarde is 180 (3 minuten).
adb shell screenrecord --rotate
Roteert de uitvoer 90 graden. Deze functie is experimenteel.
adb shell screenrecord --verbose
Toont loginformatie op het opdrachtregelscherm. Als u deze optie niet instelt, geeft het hulpprogramma tijdens het uitvoeren geen informatie weer.
Opmerking: dit werkt mogelijk niet op sommige apparaten.
De opdracht voor schermopname is niet compatibel met Android-versies van 4.4
De opdracht screenrecord is een shell-hulpprogramma voor het opnemen van de weergave van apparaten met Android 4.4 (API level 19) en hoger. Het hulpprogramma registreert schermactiviteit in een MPEG-4-bestand.
Bestandsrechten wijzigen met de opdracht chmod
Merk op dat uw apparaat geroot moet zijn om bestandsrechten te kunnen wijzigen, su
binary wordt niet geleverd met in de fabriek verzonden apparaten!
conventie:
adb shell su -c "chmod <numeric-permisson> <file>"
Numerieke toestemming opgebouwd uit gebruikers-, groeps- en wereldsecties.
Als u bijvoorbeeld wilt dat het bestand leesbaar, schrijfbaar en uitvoerbaar is voor iedereen, is dit uw opdracht:
adb shell su -c "chmod 777 <file-path>"
Of
adb shell su -c "chmod 000 <file-path>"
als u van plan bent om machtigingen te weigeren.
1e cijfer - geeft gebruikersmachtiging aan, 2e cijfer - geeft groepstoestemming aan, 3e cijfer - geeft wereld (anderen) toestemming aan.
Toegangsrechten:
--- : binary value: 000, octal value: 0 (none)
--x : binary value: 001, octal value: 1 (execute)
-w- : binary value: 010, octal value: 2 (write)
-wx : binary value: 011, octal value: 3 (write, execute)
r-- : binary value: 100, octal value: 4 (read)
r-x : binary value: 101, octal value: 5 (read, execute)
rw- : binary value: 110, octal value: 6 (read, write)
rwx : binary value: 111, octal value: 7 (read, write, execute)
Datum / tijd instellen via adb
Standaard SET-formaat is MMDDhhmm[[CC]YY][.ss]
, dat is (elk 2 cijfers)
Als u bijvoorbeeld 17 juli 10:10 uur wilt instellen, zonder het huidige jaar te wijzigen, typt u:
adb shell 'date 07171010.00'
Tip 1: de datumwijziging wordt niet onmiddellijk weergegeven en een merkbare wijziging vindt pas plaats nadat de systeemklok naar de volgende minuut is gegaan.
Je kunt een update afdwingen door een TIME_SET
intentie-uitzending als volgt aan je oproep toe te TIME_SET
:
adb shell 'date 07171010.00 ; am broadcast -a android.intent.action.TIME_SET'
Tip 2: om de klok van Android te synchroniseren met uw lokale machine:
Linux:
adb shell date `date +%m%d%H%M%G.%S`
Windows (PowerShell):
$currentDate = Get-Date -Format "MMddHHmmyyyy.ss" # Android's preferred format
adb shell "date $currentDate"
Beide tips samen:
adb shell 'date `date +%m%d%H%M%G.%S` ; am broadcast -a android.intent.action.TIME_SET'
Standaard SET-formaat is 'JJJJMMDD.HHmmss'
adb shell 'date -s 20160117.095930'
Tip: om de klok van Android te synchroniseren met uw lokale (linux-gebaseerde) machine:
adb shell date -s `date +%G%m%d.%H%M%S`
Open ontwikkelaarsopties
adb shell am start -n com.android.settings/.DevelopmentSettings
Navigeert met uw apparaat / emulator naar het gedeelte Developer Options
.
Een "Boot Complete" -uitzending genereren
Dit is relevant voor apps die een BootListener
implementeren. Test uw app door uw app te doden en test vervolgens met:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n your.app/your.app.BootListener
(vervang your.package/your.app.BootListener
door de juiste waarden).
Bekijk externe / secundaire opslaginhoud
Bekijk inhoud:
adb shell ls \$EXTERNAL_STORAGE
adb shell ls \$SECONDARY_STORAGE
Bekijk pad:
adb shell echo \$EXTERNAL_STORAGE
adb shell echo \$SECONDARY_STORAGE
een proces binnen een Android-apparaat doden
Soms draait de logcat van Android oneindig met fouten die afkomstig zijn van een proces dat niet van jou is, waardoor de batterij leegloopt of het moeilijk is om je code te debuggen.
Een handige manier om het probleem op te lossen zonder het apparaat opnieuw op te starten, is het proces dat het probleem veroorzaakt te lokaliseren en te beëindigen.
Van Logcat
03-10 11:41:40.010 1550-1627/? E/SomeProcess: ....
let op het procesnummer: 1550
Nu kunnen we een shell openen en het proces doden. Merk op dat we niet kunnen doden root
proces.
adb shell
in de shell kunnen we meer controleren over het proces met behulp van
ps -x | grep 1550
en dood het als we willen:
kill -9 1550