Sök…


Introduktion

ADB (Android Debug Bridge) är ett kommandoradsverktyg som används för att kommunicera med en emulatorinstans eller ansluten Android-enhet.

Översikt av ADB

En stor del av detta ämne delades ut till adb-skal

Anmärkningar

Lista med exempel flyttade till adb shell :

Skriv ut ordlista över anslutna enheter

För att få en ordlista över alla enheter anslutna till adb , skriv följande kommando i din terminal:

adb devices -l

Exempel Utgång

List of devices attached
ZX1G425DC6             device usb:336592896X product:shamu model:Nexus_6 device:shamu
013e4e127e59a868       device usb:337641472X product:bullhead model:Nexus_5X device:bullhead
ZX1D229KCN             device usb:335592811X product:titan_retde model:XT1068 device:titan_umtsds
A50PL                  device usb:331592812X
  • Den första kolumnen är enhetens serienummer. Om det börjar med emulator- , är den här enheten en emulator.
  • usb: enhetens sökväg i USB-delsystemet.
  • product: enhetens produktkod. Det här är mycket tillverkarspecifikt, och som du ser när det gäller Archos-enheten A50PL ovan kan den vara tom.
  • model: enhetsmodellen. Liksom product , kan vara tom.
  • device: enhetskoden. Detta är också mycket tillverkarspecifikt och kan vara tomt.

Läs enhetsinformation

Skriv följande kommando i din terminal:

adb shell getprop

Detta kommer att skriva ut all tillgänglig information i form av nyckel- / värdepar.

Du kan bara läsa specifik information genom att lägga till namnet på en specifik nyckel till kommandot. Till exempel:

adb shell getprop ro.product.model

Här är några intressanta information som du får:

  • ro.product.model : Modellens namn på enheten (t.ex. Nexus 6P)
  • ro.build.version.sdk : API-nivå för enheten (t.ex. 23)
  • ro.product.brand : Branding av enheten (t.ex. Samsung)

Fullständigt exempel

[dalvik.vm.dex2oat-Xms]: [64m]
[dalvik.vm.dex2oat-Xmx]: [512m]
[dalvik.vm.heapsize]: [384m]
[dalvik.vm.image-dex2oat-Xms]: [64m]
[dalvik.vm.image-dex2oat-Xmx]: [64m]
[dalvik.vm.isa.x86.variant]: [dalvik.vm.isa.x86.features=default]
[dalvik.vm.isa.x86_64.features]: [default]
[dalvik.vm.isa.x86_64.variant]: [x86_64]
[dalvik.vm.lockprof.threshold]: [500]
[dalvik.vm.stack-trace-file]: [/data/anr/traces.txt]
[debug.atrace.tags.enableflags]: [0]
[debug.force_rtl]: [0]
[dev.bootcomplete]: [1]
[gsm.current.phone-type]: [1]
[gsm.defaultpdpcontext.active]: [true]
[gsm.network.type]: [UMTS]
[gsm.nitz.time]: [1469106902492]
[gsm.operator.alpha]: [Android]
[gsm.operator.iso-country]: [us]
[gsm.operator.isroaming]: [false]
[gsm.operator.numeric]: [310260]
[gsm.sim.operator.alpha]: [Android]
[gsm.sim.operator.iso-country]: [us]
[gsm.sim.operator.numeric]: [310260]
[gsm.sim.state]: [READY]
[gsm.version.ril-impl]: [android reference-ril 1.0]
[init.svc.adbd]: [running]
[init.svc.bootanim]: [stopped]
[init.svc.console]: [running]
[init.svc.debuggerd]: [running]
[init.svc.debuggerd64]: [running]
[init.svc.drm]: [running]
[init.svc.fingerprintd]: [running]
[init.svc.gatekeeperd]: [running]
[init.svc.goldfish-logcat]: [stopped]
[init.svc.goldfish-setup]: [stopped]
[init.svc.healthd]: [running]
[init.svc.installd]: [running]
[init.svc.keystore]: [running]
[init.svc.lmkd]: [running]
[init.svc.logd]: [running]
[init.svc.logd-reinit]: [stopped]
[init.svc.media]: [running]
[init.svc.netd]: [running]
[init.svc.perfprofd]: [running]
[init.svc.qemu-props]: [stopped]
[init.svc.ril-daemon]: [running]
[init.svc.servicemanager]: [running]
[init.svc.surfaceflinger]: [running]
[init.svc.ueventd]: [running]
[init.svc.vold]: [running]
[init.svc.zygote]: [running]
[init.svc.zygote_secondary]: [running]
[net.bt.name]: [Android]
[net.change]: [net.dns2]
[net.dns1]: [10.0.2.3]
[net.dns2]: [10.0.2.4]
[net.eth0.dns1]: [10.0.2.3]
[net.eth0.dns2]: [10.0.2.4]
[net.eth0.gw]: [10.0.2.2]
[net.gprs.local-ip]: [10.0.2.15]
[net.hostname]: [android-5e1af924d72dc578]
[net.qtaguid_enabled]: [1]
[net.tcp.default_init_rwnd]: [60]
[persist.sys.dalvik.vm.lib.2]: [libart.so]
[persist.sys.profiler_ms]: [0]
[persist.sys.timezone]: [Europe/Vienna]
[persist.sys.usb.config]: [adb]
[qemu.gles]: [1]
[qemu.hw.mainkeys]: [0]
[qemu.sf.fake_camera]: [none]
[qemu.sf.lcd_density]: [560]
[rild.libargs]: [-d /dev/ttyS0]
[rild.libpath]: [/system/lib/libreference-ril.so]
[ro.allow.mock.location]: [0]
[ro.baseband]: [unknown]
[ro.board.platform]: []
[ro.boot.hardware]: [ranchu]
[ro.bootimage.build.date]: [Thu Jul 7 15:56:30 UTC 2016]
[ro.bootimage.build.date.utc]: [1467906990]
[ro.bootimage.build.fingerprint]: [Android/sdk_google_phone_x86_64/generic_x86_64:6.0/MASTER/3038907:userdebug/test-keys]
[ro.bootloader]: [unknown]
[ro.bootmode]: [unknown]
[ro.build.characteristics]: [emulator]
[ro.build.date]: [Thu Jul  7 15:55:30 UTC 2016]
[ro.build.date.utc]: [1467906930]
[ro.build.description]: [sdk_google_phone_x86_64-userdebug 6.0 MASTER 3038907 test-keys]
[ro.build.display.id]: [sdk_google_phone_x86_64-userdebug 6.0 MASTER 3038907 test-keys]
[ro.build.fingerprint]: [Android/sdk_google_phone_x86_64/generic_x86_64:6.0/MASTER/3038907:userdebug/test-keys]
[ro.build.flavor]: [sdk_google_phone_x86_64-userdebug]
[ro.build.host]: [vpak15.mtv.corp.google.com]
[ro.build.id]: [MASTER]
[ro.build.product]: [generic_x86_64]
[ro.build.tags]: [test-keys]
[ro.build.type]: [userdebug]
[ro.build.user]: [android-build]
[ro.build.version.all_codenames]: [REL]
[ro.build.version.base_os]: []
[ro.build.version.codename]: [REL]
[ro.build.version.incremental]: [3038907]
[ro.build.version.preview_sdk]: [0]
[ro.build.version.release]: [6.0]
[ro.build.version.sdk]: [23]
[ro.build.version.security_patch]: [2015-10-01]
[ro.com.google.locationfeatures]: [1]
[ro.config.alarm_alert]: [Alarm_Classic.ogg]
[ro.config.nocheckin]: [yes]
[ro.config.notification_sound]: [OnTheHunt.ogg]
[ro.crypto.state]: [unencrypted]
[ro.dalvik.vm.native.bridge]: [0]
[ro.debuggable]: [1]
[ro.hardware]: [ranchu]
[ro.hardware.audio.primary]: [goldfish]
[ro.kernel.android.checkjni]: [1]
[ro.kernel.android.qemud]: [1]
[ro.kernel.androidboot.hardware]: [ranchu]
[ro.kernel.clocksource]: [pit]
[ro.kernel.console]: [0]
[ro.kernel.ndns]: [2]
[ro.kernel.qemu]: [1]
[ro.kernel.qemu.gles]: [1]
[ro.opengles.version]: [131072]
[ro.product.board]: []
[ro.product.brand]: [Android]
[ro.product.cpu.abi]: [x86_64]
[ro.product.cpu.abilist]: [x86_64,x86]
[ro.product.cpu.abilist32]: [x86]
[ro.product.cpu.abilist64]: [x86_64]
[ro.product.device]: [generic_x86_64]
[ro.product.locale]: [en-US]
[ro.product.manufacturer]: [unknown]
[ro.product.model]: [Android SDK built for x86_64]
[ro.product.name]: [sdk_google_phone_x86_64]
[ro.radio.use-ppp]: [no]
[ro.revision]: [0]
[ro.runtime.firstboot]: [1469106908722]
[ro.secure]: [1]
[ro.serialno]: []
[ro.wifi.channels]: []
[ro.zygote]: [zygote64_32]
[selinux.reload_policy]: [1]
[service.bootanim.exit]: [1]
[status.battery.level]: [5]
[status.battery.level_raw]: [50]
[status.battery.level_scale]: [9]
[status.battery.state]: [Slow]
[sys.boot_completed]: [1]
[sys.sysctl.extra_free_kbytes]: [43200]
[sys.sysctl.tcp_def_init_rwnd]: [60]
[sys.usb.config]: [adb]
[sys.usb.state]: [adb]
[vold.has_adoptable]: [1]
[wlan.driver.status]: [unloaded]
[xmpp.auto-presence]: [true]

Anslut ADB till en enhet via WiFi

Standard ADB-konfigurationen innebär en USB-anslutning till en fysisk enhet.
Om du föredrar kan du växla till TCP / IP-läge och ansluta ADB via WiFi istället.

Inte rotad enhet

  1. Få på samma nätverk:

    • Se till att din enhet och din dator är i samma nätverk.
  2. Anslut enheten till värddatorn med en USB-kabel.

  3. Anslut adb till enhet via nätverk:

    När din enhet är ansluten till adb via USB, gör följande kommando för att lyssna på en TCP / IP-anslutning på en port (standard 5555):

    • Skriv adb tcpip <port> (växla till TCP / IP-läge).
    • Koppla bort USB-kabeln från målenheten.
    • Skriv adb connect <ip address>:<port> (porten är valfri; standard 5555).

    Till exempel:

    adb tcpip 5555
    adb connect 192.168.0.101:5555
    

    Om du inte känner enhetens IP kan du:

    • kontrollera IP: n i WiFi-inställningarna på din enhet.
    • använd ADB för att upptäcka IP (via USB):
      1. Anslut enheten till datorn via USB
      2. adb shell ifconfig och kopiera enhetens IP-adress

    För att återgå till felsökning via USB använder du följande kommando:

    adb usb
    

    Du kan också ansluta ADB via WiFi genom att installera ett plugin till Android Studio. För att göra det, gå till Inställningar> Plugins och Bläddra i arkiv, sök efter ADB WiFi , installera det och öppna Android Studio igen. Du kommer att se en ny ikon i verktygsfältet som visas i följande bild. Anslut enheten till värddatorn via USB och klicka på den här AndroidWiFiADB- ikonen. Det visar ett meddelande om din enhet är ansluten eller inte. När den har anslutits kan du koppla ur USB: n.

    Ny ikon för verktygsfältet


Rotad enhet

Obs: Vissa enheter som är rotade kan använda ADB WiFi-appen från Play Store för att aktivera detta på ett enkelt sätt. För vissa enheter (särskilt de med CyanogenMod ROM) finns det här alternativet i utvecklaralternativen bland inställningarna. Om du aktiverar den får du den IP-adress och portnummer som krävs för att ansluta till adb genom att helt enkelt köra adb connect <ip address>:<port> .

När du har en rotad enhet men inte har tillgång till en USB-kabel

Processen förklaras i detalj i följande svar: http://stackoverflow.com/questions/2604727/how-can-i-connect-to-android-with-adb-over-tcp/3623727#3623727 De viktigaste kommandona visas nedan.

Öppna en terminal i enheten och skriv följande:

su
setprop service.adb.tcp.port <a tcp port number>
stop adbd
start adbd

Till exempel:

setprop service.adb.tcp.port 5555

Och på din dator:

adb connect <ip address>:<a tcp port number>

Till exempel:

adb connect 192.168.1.2:5555

Så här stänger du av det:

setprop service.adb.tcp.port -1
stop adbd
start adbd

Undvik timeout

Som standard adb kommer timeout efter 5000 ms. Detta kan hända i vissa fall som långsam WiFi eller stor APK.

En enkel förändring i Gradle-konfigurationen kan göra tricket:

android {
    adbOptions {
        timeOutInMs 10 * 1000
    }
}

Dra (tryck) filer från (till) enheten

Du kan dra (ladda ner) filer från enheten genom att utföra följande kommando:

adb pull <remote> <local>

Till exempel:

adb pull /sdcard/ ~/

Du kan också trycka (ladda upp) filer från din dator till enheten:

adb push <local> <remote>

Till exempel:

adb push ~/image.jpg /sdcard/

Exempel för att hämta databas från enheten

sudo adb -d shell "run-as com.example.name cat /data/da/com.example.name /databases/DATABASE_NAME  > /sdcard/file

Starta om enheten

Du kan starta om din enhet genom att köra följande kommando:

adb reboot

Utför det här kommandot för att starta om till bootloader:

adb reboot bootloader

Starta om till återställningsläge:

adb reboot recovery

Var medveten om att enheten inte stängs av först!

Slå på / stänga av Wifi

Sätta på:

adb shell svc wifi enable

Stäng av:

adb shell svc wifi disable

Visa tillgängliga enheter

Kommando:

 adb devices

Resultatexempel:

List of devices attached
emulator-5554  device
PhoneRT45Fr54  offline
123.454.67.45  no device

Första kolumnen - enhetens serienummer

Andra kolumnen - anslutningsstatus

Android-dokumentation

Anslut enhet via IP

Ange dessa kommandon i Android-enhetens terminal

su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

Efter detta kan du använda CMD och ADB för att ansluta med följande kommando

adb connect 192.168.0.101.5555

Och du kan inaktivera det och återgå ADB till att lyssna på USB med

setprop service.adb.tcp.port -1
stop adbd
start adbd

Från en dator om du redan har USB-åtkomst (ingen root krävs)

Det är ännu enklare att byta till att använda Wi-Fi, om du redan har USB. Ge kommandona från en kommandorad på datorn som har enheten ansluten via USB

adb tcpip 5555
adb connect 192.168.0.101:5555

Byt ut 192.168.0.101 med enhetens IP

Starta / stoppa adb

Starta ADB:

adb kill-server

Stoppa ADB:

adb start-server

Visa logcat

Du kan köra logcat som ett adb-kommando eller direkt i en skalprompt på din emulator eller anslutna enhet. För att visa adb med adb , navigerar du till din SDK-plattformsverktyg / katalog och kör:

$ adb logcat

Alternativt kan du skapa en skalanslutning till en enhet och sedan köra:

$ adb shell
$ logcat

Ett användbart kommando är:

adb logcat -v threadtime

Detta visar datum, kallelse, prioritet, tagg och PID och TID för den tråd som ger meddelandet i ett långt meddelandeformat.


Filtrering

Logcat-loggar fick så kallade lognivåer:

V - Verbose, D - Debug, I - Info, W - Varning, E - Error, F - Fatal, S - Silent

Du kan också filtrera logcat efter loggnivå. Till exempel om du bara vill skriva ut felsökningsnivå:

adb logcat *:D

Logcat kan filtreras med ett paketnamn, naturligtvis kan du kombinera det med loggnivåfiltret:

adb logcat <package-name>:<log level>

Du kan också filtrera loggen med grep (mer om filtrering av logcat-utgång här ):

adb logcat | grep <some text>

I Windows kan filter användas med findstr, till exempel:

adb logcat | findstr <some text>

logcat med alternativet -b att se alternativ loggbuffert [huvud | händelser | radio]:

adb logcat -b radio

Spara output i fil:

adb logcat > logcat.txt

Spara utgången i filen medan du också tittar på den:

adb logcat | tee logcat.txt

Rengöring av stockarna:

adb logcat -c

Direkt ADB-kommando till en specifik enhet i en inställning med flera enheter

1. Rikta in en enhet efter serienummer

Använd alternativet -s följt av ett enhetsnamn för att välja på vilken enhet adb kommandot ska köras. Alternativen -s bör vara först i raden före kommandot.

adb -s <device> <command>

Exempel:

adb devices

List of devices attached
emulator-5554       device
02157df2d1faeb33    device

adb -s emulator-5554 shell

Exempel # 2:

adb devices -l

List of devices attached
06157df65c6b2633    device usb:1-3 product:zerofltexx model:SM_G920F device:zeroflte
LC62TB413962        device usb:1-5 product:a50mgp_dug_htc_emea model:HTC_Desire_820G_dual_sim device:htc_a50mgp_dug

adb -s usb:1-3 shell

2. Rikta in en enhet när bara en enhetstyp är ansluten

Du kan rikta in dig på den enda löpande emulatorn med -e

adb -e <command>

Eller så kan du rikta in dig på den enda anslutna USB-enheten med -d

adb -d <command>

Ta en skärmdump och video (endast för kitkat) från en enhetsdisplay

Skärmdump: Alternativ 1 (ren adb)

Med shell adb-kommandot kan vi köra kommandon med hjälp av en enhets inbyggda skal. screencap kommandot fångar det innehåll som för närvarande är synligt på en enhet och sparar det i en given bildfil, t.ex. /sdcard/screen.png :

adb shell screencap /sdcard/screen.png

Du kan sedan använda dragkommandot för att ladda ner filen från enheten till den aktuella katalogen på din dator:

adb pull /sdcard/screen.png

Skärmdump: Alternativ 2 (snabbare)

Kör följande enfodring:

(Marshmallow och tidigare):

adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png

(Nougat och senare):

adb shell screencap -p > screen.png

Flaggan -p omdirigerar utgången från kommandot screencap till stdout. Perl-uttrycket detta rör in i rensar upp några slutliga frågor på Marshmallow och tidigare. Strömmen skrivs sedan till en fil med namnet screen.png den aktuella katalogen. Se den här artikeln och den här artikeln för mer information.

Video

detta fungerar bara i KitKat och endast via ADB. Detta fungerar inte under Kitkat Kör följande kommando för att börja spela in enhetens skärm:

adb shell screenrecord /sdcard/example.mp4 Detta kommando börjar spela in enhetens skärm med standardinställningarna och spara den resulterande videon i en fil på /sdcard/example.mp4 på din enhet.

När du är klar med inspelningen trycker du på Ctrl + C (z i Linux) i fönstret Kommandotolken för att stoppa skärminspelningen. Du kan sedan hitta skärminspelningsfilen på den plats du angav. Observera att skärminspelningen sparas på enhetens interna lagring, inte på din dator.

Standardinställningarna är att använda enhetens standard skärmupplösning, koda videon till en bitrate på 4 Mbps och ställa in den maximala skärminspelningstiden till 180 sekunder. Kör följande kommando för mer information om de kommandoradsalternativ du kan använda:

adb shell screenrecord –help , detta fungerar utan att rota enheten. Hoppas det här hjälper.

Rensa applikationsdata

Man kan rensa användardata för en specifik app med hjälp av adb :

adb shell pm clear <package>

Det här är samma sak som om du bläddrar i telefonens inställningar, väljer appen och trycker på rensa dataknappen.

  • pm åberopar pakethanteraren på enheten
  • clear raderar all information som är associerad med ett paket

Sänder sändning

Det är möjligt att skicka sändning till BroadcastReceiver med adb .

I det här exemplet skickar vi sändning med action com.test.app.ACTION och sträng extra i bunt 'foo'='bar' :

adb shell am broadcast -a action com.test.app.ACTION --es foo "bar"

Du kan lägga till alla andra stöttypar som ska paketeras, inte bara strängar:

--ez - booleska
--ei - heltal
--el - lång
--ef - flyta
--eu - uri
--eia - int array (separerad med ',')
--ela - lång grupp (separerad med ',')
--efa - float array (separerad med ',')
--esa - sträng array (separerad med ',')

Om du vill skicka avsikt att specifikt paket / klass -n eller -p parameter kan användas.
Skickar till paketet:

-p com.test.app

Skickar till en specifik komponent ( SomeReceiver klass i com.test.app package ):

-n com.test.app/.SomeReceiver

Användbara exempel:

Installera och köra ett program

För att installera en APK-fil använder du följande kommando:

adb install path/to/apk/file.apk

eller om appen finns och vi vill installera om

adb install -r path/to/apk/file.apk 

För att avinstallera ett program måste vi ange dess paket

adb uninstall application.package.name

Använd följande kommando för att starta en app med ett angivet paketnamn (eller en specifik aktivitet i en app):

adb shell am start -n adb shell am start <package>/<activity>

Så här startar du till exempel Waze:

adb shell am start -n adb shell am start com.waze/com.waze.FreeMapAppActivity

Säkerhetskopiering

Du kan använda adb backup att säkerhetskopiera din enhet.

adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] 
           [-system|nosystem] [<packages...>]

-f <filename> specificera filnamnstandard : skapar backup.ab i den aktuella katalogen

-apk|noapk aktivera / inaktivera säkerhetskopiering av .apks själva standard: -noapk

-obb|noobb aktivera / inaktivera säkerhetskopiering av ytterligare filer som standard: -noobb

-shared|noshared backup-enhetens delade lagring / SD-kortinnehåll standard: -noshared

-all alla installerade apllikationer

-system|nosystem inkluderar systemapplikationer standard: -system

<packages> en lista över paket som ska säkerhetskopieras (t.ex. com.example.android.myapp) (behövs inte om -all anges)


För en fullständig säkerhetskopiering, inklusive allt, använd

adb backup -apk -obb -shared -all -system -f fullbackup.ab

Obs! Det kan ta lång tid att göra en fullständig säkerhetskopia.


Använd för att återställa en säkerhetskopia

adb restore backup.ab

Installera ADB på Linux-systemet

Hur du installerar Android Debugging Bridge (ADB) på ett Linux-system med terminalen med din distors förvar.

Installera till Ubuntu / Debian-systemet via apt:

sudo apt-get update
sudo apt-get install adb

Installera till Fedora / CentOS-system via yum:

sudo yum check-update
sudo yum install android-tools

Installera till Gentoo-system med portage:

sudo emerge --ask dev-util/android-tools

Installera till openSUSE-system med zypper:

sudo zypper refresh
sudo zypper install android-tools 

Installera till Arch-system med pacman:

sudo pacman -Syyu
sudo pacman -S android-tools

Lista alla behörigheter som kräver runtime-bidrag från användare på Android 6.0

adb shell pm list permissions -g -d 

Visa en apps interna data (data / data / ) på en enhet

Kontrollera först att din app kan säkerhetskopieras i AndroidManifest.xml , dvs. android:allowBackup är inte false .

Säkerhetskopia-kommando:

adb -s <device_id> backup -noapk <sample.package.id>

Skapa en tjära med dd-kommando:

dd if=backup.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > backup.tar

Extrahera tjära:

tar -xvf backup.tar

Du kan sedan se det extraherade innehållet.

Visa aktivitetsstapel

adb -s <serialNumber> shell dumpsys activity activities

Mycket användbart när det används tillsammans med watch unix-kommandot:

watch -n 5 "adb -s <serialNumber> shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'"

Visa och dra cachefiler i en app

Du kan använda det här kommandot för att lista filerna för din egen debugbara apk:

adb shell run-as <sample.package.id> ls /data/data/sample.package.id/cache

Och detta skript för att dra från cache, kopiera innehållet till sdcard först, dra och ta bort det i slutet:

#!/bin/sh
adb shell "run-as <sample.package.id> cat '/data/data/<sample.package.id>/$1' > '/sdcard/$1'"
adb pull "/sdcard/$1"
adb shell "rm '/sdcard/$1'"

Sedan kan du dra en fil från cache som den här:

./pull.sh cache/someCachedData.txt

Hämta databasfil via ADB

sudo adb -d shell "run-as com.example.name cat /data/da/com.example.name /databases/STUDENT_DATABASE  > /sdcard/file


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow