수색…


소개

adb shell 은 대상 장치 또는 에뮬레이터에서 Linux 쉘을 엽니 다. adb 를 통해 Android 기기를 제어하는 ​​가장 강력하고 다양한 방법입니다.

이 주제는 예제의 한계에 도달하여 ADB (Android Debug Bridge) 에서 분리되었으며, 그 중 대부분은 adb shell 명령과 관련되어있었습니다.

통사론

  • adb 쉘 [-e 이스케이프] [-n] [-Tt] [-x] [명령]

매개 변수

매개 변수 세부
-이자형 이스케이프 문자 또는 "없음"을 선택하십시오. 기본 '~'
-엔 stdin에서 읽지 마라.
-티 PTY 할당 해제
-티 강제 PTY 할당
-엑스 원격 종료 코드 및 stdout / stderr 분리 해제

ADB를 통해 텍스트, 키 누름 및 터치 이벤트를 Android 기기로 보냅니다.

포커스가있는 뷰에 텍스트를 삽입하려면 다음 명령을 실행하십시오 (텍스트 입력을 지원하는 경우)

6.0

SDK 23 이상의 텍스트 보내기

adb shell "input keyboard text 'Paste text on Android Device'"

이미 adb 를 통해 기기에 연결된 경우 :

input text 'Paste text on Android Device'
6.0

SDK 23 이전에 텍스트 보내기

adb shell "input keyboard text 'Paste%stext%son%sAndroid%sDevice'"

공백을 입력으로 사용할 수 없으면 % s로 바꿉니다.

이벤트 보내기

하드웨어 전원 키 누르기 시뮬레이션

adb shell input keyevent 26

또는

adb shell input keyevent POWER

하드웨어 키가 keyevent 를 사용하여 동일한 조치를 수행 할 수 있습니다

adb shell input keyevent CAMERA

터치 이벤트를 입력으로 보내기

adb shell input tap Xpoint Ypoint

입력으로 스 와이프 이벤트 보내기

adb shell input swipe Xpoint1 Ypoint1 Xpoint2 Ypoint2 [DURATION*]

* DURATION은 선택 사항이며 기본값 = 300ms입니다. 출처

개발자 옵션에서 포인터 위치를 활성화하여 X 및 Y 포인트를 가져옵니다.

ADB 샘플 셸 스크립트

우분투에서 스크립트를 실행하려면 script.sh를 생성하고 파일을 마우스 오른쪽 버튼으로 클릭하고 읽기 / 쓰기 권한을 추가 한 다음 실행 파일을 프로그램으로 허용하십시오 .

터미널 에뮬레이터를 열고 ./script.sh 명령을 실행하십시오.

Script.sh

 for (( c=1; c<=5; c++ ))
    do  
       adb shell input tap X Y
       echo "Clicked $c times"
       sleep 5s
    done

이벤트 번호의 전체 목록은

패키지 나열

모든 패키지를 인쇄합니다. 패키지 이름에 <FILTER>의 텍스트가 포함 된 패키지 만 선택적으로 인쇄합니다.

adb shell pm list packages [options] <FILTER>

All <FILTER>

adb shell pm list packages

속성 :

관련 파일을 보려면 -f-f .

-i 패키지의 설치 프로그램을 참조하십시오.

-u 는 또한 제거 된 패키지를 포함합니다.

-u 제거 된 패키지도 포함시킵니다.

필터링하는 속성 :

-d 는 사용 불가능한 패키지입니다.

사용 가능한 패키지의 경우 -e 입니다.

시스템 패키지의 경우 -s 입니다.

-3 타사 패키지.

--user <USER_ID> 사용자 --user <USER_ID> 는 쿼리 할 특정 사용자 공간을 나타냅니다.

API 23 이상의 권한 부여 및 취소

취약한 권한을 부여하거나 취소하는 데 도움이되는 한 줄짜리 라이너입니다.

  • 부여

    adb shell pm grant <sample.package.id> android.permission.<PERMISSION_NAME>
    
  • 취소

    adb shell pm revoke <sample.package.id> android.permission.<PERMISSION_NAME>
    
  • 설치시 한 번에 모든 런타임 사용 권한 부여 (-g)

    adb install -g /path/to/sample_package.apk
    

응용 프로그램 데이터 인쇄

이 명령은 모든 관련 응용 프로그램 데이터를 인쇄합니다.

  • 버전 코드
  • 버전 이름
  • 부여 된 권한 (Android API 23 이상)
  • 기타..
adb shell dumpsys package <your.package.id>

디스플레이 기록

4.4

Android 4.4 (API 레벨 19) 이상을 실행하는 기기의 디스플레이 기록 :

adb shell screenrecord [options] <filename>
adb shell screenrecord /sdcard/demo.mp4

(녹음을 중지하려면 Ctrl-C 누르기)

장치에서 파일 다운로드 :

adb pull /sdcard/demo.mp4

참고 : Ctrl-C를 눌러 화면 녹화를 중지하십시오. 그렇지 않으면 녹화가 3 분에 자동으로 중지되거나 제한 시간이 --time-limit 설정됩니다.

adb shell screenrecord --size <WIDTHxHEIGHT>

동영상 크기를 1280x720으로 설정합니다. 기본값은 장치의 기본 디스플레이 해상도 (지원되는 경우), 그렇지 않은 경우 1280x720입니다. 최상의 결과를 얻으려면 장치의 AVC (Advanced Video Coding) 인코더가 지원하는 크기를 사용하십시오.


adb shell screenrecord --bit-rate <RATE>

비디오의 비디오 비트 전송률 (메가 비트 / 초)을 설정합니다. 기본값은 4Mbps입니다. 동영상 품질을 향상 시키려면 비트 전송률을 높일 수 있지만 그렇게하면 동영상 파일이 커집니다. 다음 예제는 기록 비트율을 5Mbps로 설정합니다.

adb shell screenrecord --bit-rate 5000000 /sdcard/demo.mp4

adb shell screenrecord --time-limit <TIME>

최대 녹음 시간 (초)을 설정합니다. 기본값과 최대 값은 180 (3 분)입니다.


adb shell screenrecord --rotate

출력을 90도 회전합니다. 이 기능은 실험적입니다.


adb shell screenrecord --verbose

명령 줄 화면에 로그 정보를 표시합니다. 이 옵션을 설정하지 않으면 유틸리티가 실행 중 정보를 표시하지 않습니다.

참고 : 일부 장치에서는 작동하지 않을 수 있습니다.

4.4

화면 녹화 명령은 4.4 이전 버전의 Android와 호환되지 않습니다.

screenrecord 명령은 Android 4.4 (API 레벨 19) 이상을 실행하는 장치의 디스플레이를 기록하는 쉘 유틸리티입니다. 이 유틸리티는 화면 활동을 MPEG-4 파일에 기록합니다.

chmod 명령을 사용하여 파일 권한 변경

주의 할 점은, 파일 prmissions를 변경하기 위해서는 장치가 뿌리를 내릴 필요가 있습니다. su 바이너리는 공장 출하시의 장치와 함께 제공되지 않습니다!

협약:

adb shell su -c "chmod <numeric-permisson> <file>"

사용자, 그룹 및 세계 섹션에서 작성된 숫자 권한입니다.

예를 들어, 모든 사람이 파일을 읽고 쓰기 쉽고 실행 가능하도록 변경하려면 다음 명령을 사용합니다.

adb shell su -c "chmod 777 <file-path>"

또는

adb shell su -c "chmod 000 <file-path>"

권한을 거부하려는 경우

첫 번째 숫자 - 사용자 권한 지정, 두 번째 숫자 - 그룹 권한 지정, 세 번째 숫자 - 세계 (기타) 권한 지정

액세스 권한 :

--- :   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)

adb를 통해 날짜 / 시간 설정

6.0

기본 SET 형식은 MMDDhhmm[[CC]YY][.ss] 입니다 (각각 2 자릿수입니다).

예를 들어, 현재 연도를 변경하지 않고 7 월 17 일 오전 10시 10 분을 설정하려면 다음을 입력하십시오.

adb shell 'date 07171010.00'

팁 1 : 날짜 변경은 즉시 반영되지 않으며 시스템 시계가 다음 분으로 진행된 후에 만 ​​눈에 띄는 변경이 발생합니다.
다음과 같이 호출에 TIME_SET 의도 방송을 첨부하여 업데이트 할 수 있습니다.

adb shell 'date 07171010.00 ; am broadcast -a android.intent.action.TIME_SET'

팁 2 : Android 시계를 로컬 컴퓨터와 동기화하려면 :

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"

두 가지 팁을 함께 :

adb shell 'date `date +%m%d%H%M%G.%S` ; am broadcast -a android.intent.action.TIME_SET'
6.0

기본 SET 형식은 'YYYYMMDD.HHmmss'입니다.

adb shell 'date -s 20160117.095930'

팁 : 안드로이드 시계를 로컬 (리눅스 기반) 컴퓨터와 동기화하려면 :

adb shell date -s `date +%G%m%d.%H%M%S`

개발자 옵션 열기

adb shell am start -n com.android.settings/.DevelopmentSettings

장치 / 에뮬레이터를 Developer Options 섹션으로 이동합니다.

"부팅 완료"브로드 캐스트 생성

이것은 BootListener 를 구현하는 앱과 관련이 있습니다. 앱을 종료하여 앱을 테스트 한 후 다음을 테스트합니다.

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n your.app/your.app.BootListener

( your.package/your.app.BootListener 를 적절한 값으로 대체하십시오).

외부 / 보조 스토리지 컨텐츠보기

내용보기 :

adb shell ls \$EXTERNAL_STORAGE
adb shell ls \$SECONDARY_STORAGE

경로보기 :

adb shell echo \$EXTERNAL_STORAGE
adb shell echo \$SECONDARY_STORAGE

Android 기기 내부에서 프로세스 종료

때때로 Android의 logcat은 사용자 소유가 아닌 일부 프로세스에서 발생하는 오류, 배터리 방전 또는 코드 디버깅을 어렵게하여 무한히 실행됩니다.

장치를 다시 시작하지 않고 문제를 해결하는 편리한 방법은 문제를 일으키는 프로세스를 찾아서 종료하는 것입니다.

로그캣에서

03-10 11:41:40.010 1550-1627/? E/SomeProcess: ....

프로세스 번호 통지 : 1550

이제 쉘을 열고 프로세스를 종료 할 수 있습니다. root 프로세스를 죽일 수는 없습니다.

adb shell

쉘 내부에서 우리는 프로세스에 대해 더 많이 확인할 수 있습니다.

ps -x | grep 1550

우리가 원한다면 죽여라.

kill -9 1550


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow