ADB 팁과 요령: 모든 고급 사용자가 알아야 할 명령

Android Debug Bridge에는 사용자가 알지 못하는 많은 정보가 있습니다. ADB 사용에 대한 몇 가지 유용한 팁과 요령을 보려면 여기를 클릭하십시오!

빠른 링크

  • 셸 액세스
  • 여러 장치에 연결
  • 파일 전송
  • 벌채 반출
  • ADB를 통해 설치된 앱 나열
  • ADB를 통해 앱 설치 및 제거
  • ADB로 APK 추출
  • 애플리케이션 데이터 백업 및 복원
  • 앱 구성 요소 나열
  • 활동, 서비스 및 브로드캐스트 수신기 실행
  • 거의 모든 앱 비활성화 및 활성화
  • 스크린샷 캡처
  • PC와 Android 장치 간에 바이너리 데이터 전송

모딩 씬에 잠복해 있는 Android 매니아이거나 일정 기간 동안 앱 개발자였던 경우 조만간 Android Debug Bridge 또는 ADB라는 깔끔한 도구를 우연히 발견하게 될 것입니다. 짧은. Android Studio에서 명령줄 동반 유틸리티로 광범위하게 사용됩니다. Android 개발자는 앱을 수동으로 설치하고 테스트하기 위한 독립형 솔루션으로도 사용합니다. 안드로이드 스마트폰 에뮬레이션된 Android 기기도 있습니다.

그러나 ADB가 할 수 있는 일이 많고 대부분이 개발자에게만 유용한 것은 아닙니다. 개발자가 아니고 이 기사를 읽고 있더라도 ADB를 한두 번 사용했을 가능성이 큽니다. 앱을 사이드로드 또는 권한을 조정하십시오. 그러나 이것이 ADB를 사용할 수 있는 전부는 아닙니다. 당신이 몰랐을 수도 있는 ADB 사용에 대한 몇 가지 팁과 요령을 계속 읽으십시오.

컴퓨터에서 ADB를 실행해야 합니다. 에 대한 기사를 확인하십시오. ADB를 설치하는 방법 도움이 필요하면. Windows를 사용하는 경우에도 다음을 수행해야 합니다. 적절한 OEM USB 드라이버를 설치합니다. 당신의 안드로이드 장치에 대한.

셸 액세스

이전에 ADB를 사용한 적이 있다면 명령을 모두 한 줄로 실행하는 데 익숙할 수 있습니다. 그러나 ADB를 사용하여 장치에서 터미널 셸을 열고 명령을 직접 실행할 수도 있습니다. 그리고 쉽습니다!

터미널 또는 명령 프롬프트 창에서:

adb 쉘

그러면 다음과 같은 인사를 받게 됩니다. $ 장치에서 직접 명령을 실행할 수 있는 기호입니다.

여러 장치에 연결

ADB는 동시에 여러 장치와 통신할 수 있습니다. 그러나 이러한 시나리오에서 ADB 명령을 실행할 때 대상 장치를 지정해야 합니다.

이렇게 하려면 대상 장치의 일련 번호를 알아야 합니다. 장치 명령을 사용하여 직렬을 가져올 수 있습니다.

adb 장치

이제 -에스 대상 장치의 일련 번호를 지정하는 옵션입니다. 예:

adb -s <연속물숫자> 껍데기

파일 전송

명령줄 애호가를 위해 ADB는 Android 장치에서 파일을 전송하는 매우 쉬운 방법을 제공합니다. 그냥 사용 당기다 장치에서 파일 및 디렉토리를 복사하는 명령과 푸시 파일 및 디렉토리를 장치에 복사하는 명령:

하위 디렉토리가 있는 파일 또는 디렉토리를 Android 기기에 복사하려는 경우:

adb 푸시 local_path device_path
  • 예: adb 푸시 D:\image.png /sdcard

다음 명령은 하위 디렉터리가 있는 파일 또는 디렉터리를 Android 장치에서 호스트 PC로 복사합니다.

adb pull device_path local_path
  • 예: adb pull /sdcard/backup_April.tar D:\백업

벌채 반출

안드로이드 스튜디오는 로그캣 창, 장치의 로그를 실시간으로 표시하도록 지원합니다. 그러나 일괄 처리에는 그다지 유용하지 않습니다. 다행스럽게도 Android 기기에는 시스템 및 애플리케이션 로그 메시지를 덤프하고 화면에 인쇄하는 데 사용할 수 있는 ADB를 통해 사용할 수 있는 logcat 명령이 함께 제공됩니다.

기본 구문은 다음과 같습니다.

adb 로그캣

자세한 내용은 자습서를 살펴보십시오. Android에서 시스템 logcat, 커널 로그 및 dmesg를 가져오는 방법.

부활절 계란

Google은 logcat 명령과 관련된 멋진 이스터 에그 두 개를 제공합니다.

  1. 첫 번째는 lolcat입니다. LOL고양이 밈. 일반 logcat 명령과 동일한 출력을 제공합니다.
    adb 롤캣
  2. 두 번째는 longcat이며 logcat -v long 명령과 동일합니다. 빈 줄로 모든 메타데이터 필드와 별도의 메시지를 표시합니다.
    adb 롱캣

ADB를 통해 설치된 앱 나열

장치에 설치된 앱을 보려면 다음 명령을 사용할 수 있습니다.

adb 쉘 오후 목록 패키지

이렇게 하면 설치된 앱의 패키지 이름 목록이 반환되며 각 이름 앞에는 다음이 추가됩니다. 패키지:.

옵션

보다 구체적인 목록을 검색하는 데 사용할 수 있는 몇 가지 옵션도 있습니다.

  • -에프 패키지 이름과 함께 각 앱의 기본 APK 경로가 포함됩니다.
  • -ㅏ 알려진 모든 비 APEX 패키지가 반환되는지 확인합니다.
  • -디 명령이 비활성화된 패키지만 반환하도록 합니다.
  • -이자형 명령이 활성화된 패키지만 반환하도록 합니다.
  • -에스 명령이 시스템 패키지만 반환하도록 합니다.
  • -3 명령이 타사 패키지만 반환하도록 합니다.
  • -나 각 패키지의 설치 프로그램 패키지 이름이 포함됩니다.
  • -유 각 패키지의 패키지 UID가 포함됩니다.
  • -유 제거된 패키지가 포함됩니다.
  • --show-버전 코드 각 패키지의 버전 코드가 포함됩니다.
  • --apex 전용 APEX 패키지만 반환합니다.
  • --유체 지정된 UID가 있는 패키지만 표시합니다.
  • --사용자 주어진 사용자 ID에 속하는 패키지만 표시합니다.

ADB를 통해 앱 설치 및 제거

이것은 비교적 일반적인 ADB 사용이지만 어쨌든 언급할 가치가 있습니다. 무엇보다도 ADB를 사용하여 Android 앱 설치 및 제거 당신의 안드로이드 장치에.

APK 설치

컴퓨터에 APK가 있는 경우 다음을 사용하여 기기에 설치할 수 있습니다.

adb설치하다-아르 자형썸네일.apk

교체하는 것을 잊지 마십시오 someapk.apk 설치하려는 APK의 전체 경로로.

옵션

ADB를 통해 APK를 설치하기 위한 여러 가지 옵션이 있습니다.

  • 그만큼 -아르 자형 옵션을 사용하면 ADB가 기존 앱 위에 설치할 수 있습니다(예: 업데이트). Android Pie 이상에서는 이 옵션을 지정할 필요가 없습니다.
  • 그만큼 -아르 자형 Android Pie 이상 버전의 경우 앱이 이미 설치된 경우 설치가 실패합니다.
  • 그만큼 -나 옵션을 사용하면 설치 프로그램 패키지 이름을 지정할 수 있습니다. Android가 APK를 설치한 항목을 알고자 하는 경우 반환되는 항목입니다.
  • 그만큼 -티 옵션은 다음과 같은 APK를 허용합니다. 안드로이드: testOnly="true" 매니페스트에서 설치할 수 있습니다.
  • 그만큼 -디 옵션을 사용하면 지정된 APK가 이미 설치된 앱으로 다운그레이드될 수 있습니다. 이는 앱의 두 버전이 모두 디버깅 가능한 경우에만 작동합니다.
  • 그만큼 -g Android Marshmallow 이상에 대한 옵션은 설치된 앱에 대한 모든 런타임 권한을 자동으로 부여합니다.

그게 전부가 아닙니다. 전체 목록을 원하는 경우 기본 제공 문서를 확인할 수 있습니다.

다중 APK 및 번들

여러 앱에서 또는 앱 번들을 설치하기 때문에 한 번에 많은 APK를 설치하려는 경우 ADB의 다중 설치 그리고 다중 패키지 설치 특징.

모든 APK가 하나의 앱용인 경우 다중 설치:

adb다중 설치apk1.apkAPK2.apk ...

그렇지 않으면 사용 다중 패키지 설치:

adb다중 패키지 설치앱1.apk앱2.apk ...

이러한 명령에 대한 옵션은 다음과 유사합니다. 설치하다, 하지만 몇 가지 제한 사항이 있습니다. 사용 가능한 옵션에 대한 ADB의 기본 제공 문서를 확인하세요.

앱 제거

ADB를 사용하여 제거하려면 제거하려는 앱의 패키지 이름이 필요합니다. 에 대한 섹션을 확인하십시오. 설치된 앱 나열 당신이 아직하지 않은 경우.

패키지 이름이 있으면 제거는 다음과 같이 간단합니다.

adb 제거 <패키지 이름>

일반적으로 이 명령을 사용하여 시스템 또는 사전 설치된 앱을 제거할 수 없습니다. 그러나 ADB로 비활성화할 수 있습니다. 섹션을 확인하십시오 거의 모든 앱 비활성화 및 활성화 자세한 내용은

ADB로 APK 추출

앱의 APK를 추출하려는 이유는 많습니다. 나중에 사용할 수 있도록 백업하거나 더 이상 온라인에서 사용할 수 없어 다른 장치로 전송하고 싶을 수 있습니다.

ADB를 사용하여 앱을 추출하는 것은 매우 간단합니다. 먼저 추출하려는 앱의 패키지 이름을 찾아야 합니다. 이를 수행하는 방법에는 여러 가지가 있지만 가장 쉬운 방법은 일반적으로 기기의 설정 앱을 사용하여 설치된 모든 앱 목록에서 원하는 앱을 선택하고 패키지 이름이나 앱을 찾을 때까지 아래로 스크롤합니다. ID.

패키지 이름이 있으면 다음 명령을 실행하십시오.

adb 쉘 오후 경로 <패키지 이름>

이 명령은 해당 패키지 이름에 대한 모든 APK의 경로를 반환합니다.

그런 다음 다음 명령을 사용하여 각 APK를 컴퓨터로 가져올 수 있습니다.

adb 풀 /path/to/apk.apk

애플리케이션 데이터 백업 및 복원

Google은 아직 iOS와 같은 원 클릭 백업 방법을 제시하지 않았지만 ADB를 사용하여 설치된 앱을 데이터와 함께 백업 및 복원할 수 있습니다. 그러나 기능은 완벽하지 않으며 Google은 이미 더 이상 사용되지 않는 기능으로 표시.

백업

APK를 사용하여 단일 애플리케이션을 백업하려면:

adb 지원 -apk <패키지이름> -f package_name_backup.ab

모든 앱 데이터를 한 번에 백업하려는 경우:

adb 지원 -에프 모두 -모두 -apk -nosystem

복원 모듈은 개별 앱별 복원을 수행할 수 없으므로 패키지별 백업을 만드는 것이 좋습니다. 다음 명령 스니펫(Linux/macOS 및 Linux용 Windows 하위 시스템과 호환)을 사용하면 됩니다.

~을 위한~에 $(adb 쉘 오후 목록 패키지 -3)
하다
앱=$( 에코${앱} | 세드 "s/^패키지://")
adb 백업 -f ${앱}.지원 ${앱}
완료

복원하다

먼저 저장된 APK를 설치해야 합니다.

adb 설치하다 <패키지이름>.apk

그런 다음 데이터를 복원할 수 있습니다.

adb복원하다package_name_backup.ab

다시 말하지만 ADB 백업 및 복원 기능에는 ROM에 따른 변수 결과를 포함하여 여러 주의 사항이 있습니다.

앱 구성 요소 나열

앱의 구성요소는 활동, BroadcastReceivers, 서비스 등과 같은 것입니다. 때로는 특정 앱에서 이러한 구성 요소의 이름을 아는 것이 유용합니다. 특히 숨겨진 활동을 시작하거나 특정 데이터가 포함된 브로드캐스트를 보내려는 경우에 유용합니다.

안타깝게도 ADB에는 앱의 구성 요소를 나열하는 깔끔한 방법이 없습니다. 그러나 가능합니다. 다음 명령을 실행합니다.

adb 쉘 덤프시스 패키지

전체 텍스트가 반환됩니다.

  • 찾을 때까지 스크롤 활동 확인자 테이블 활동을 볼 제목.
  • 아래를 봐 수신기 리졸버 테이블 BroadcastReceiver의 경우.
  • 을 체크 해봐 서비스 리졸버 테이블 서비스를 위해.
  • 등등.

각 구성 요소는 시작하는 데 필요한 작업, 구성 요소 이름 및 일부 추가 정보를 표시합니다.

또는 활동, 서비스 및 수신기를 보다 쉽게 ​​볼 수 있는 방법을 원하는 경우 XDA Recognized Developer의 Root Activity Launcher 앱을 사용할 수 있습니다. 자카리1. 다른 편리한 기능과 함께 각 앱의 구성 요소를 보여줍니다.

루트 활동 실행기개발자: 재커리 원더

가격: 0.99.

다운로드

활동, 서비스 및 브로드캐스트 수신기 실행

ADB를 사용하여 활동을 시작하고 서비스를 시작하고 BroadcastReceivers에 알릴 수도 있습니다. 필요한 경우 데이터 URI 및 추가 의도를 지정할 수도 있습니다.

구성 요소를 시작하려면 시작하려는 구성 요소 이름이 필요합니다. 당신은 그것을 얻는 방법을 볼 수 있습니다 앱 구성 요소 나열 부분.

활동을 시작하기 위한 명령 구문은 다음과 같습니다.

오전 시작 -a <행동> -N <요소>

서비스를 시작하기 위한 명령 구문은 다음과 같습니다.

am startservice -a <행동> -N <요소>

BroadcastReceiver에게 알리기 위한 명령 구문은 다음과 같습니다.

오전 브로드캐스트 -a <행동> -N <요소>

대부분의 경우 활동 및 서비스의 경우 작업을 명시적으로 지정할 필요가 없습니다. 일반적으로 구성 요소가 다음 이외의 것을 사용하는 경우에만 필요합니다. android.intent.action. 기본.

기본 구문 외에 전달할 추가 데이터를 지정하는 방법은 다음과 같습니다. 일반적으로 모든 데이터 값은 큰따옴표로 묶어야 합니다.

  • -디 데이터 URI를 지정할 수 있습니다.
  • -이자형 또는 --es 추가 문자열을 지정할 수 있습니다.
  • --esn null 문자열을 추가로 지정할 수 있습니다.
  • --ez 부울 추가를 지정하는 데 사용됩니다.
  • --에이 정수 추가를 지정하는 데 사용됩니다.
  • --엘자 긴 엑스트라를 지정하기 위한 것입니다.
  • --ef 플로트를 추가로 전달합니다.
  • --유럽 연합 추가 URI를 전달합니다.
  • --ecn 추가 구성 요소 이름을 지정하는 데 사용할 수 있습니다.
  • --eia ,,... 값을 Integer[] extra로 전달합니다.
  • --eial ,,... 값을 목록으로 전달합니다..
  • 동일한 배열 및 목록 인수가 longs, floats 및 Strings에도 작동합니다. 그냥 교체 적절한 문자로.
  • -에프 플래그를 지정할 수 있습니다.

더 많은 동작 옵션을 사용할 수 있으므로 자세한 내용은 기본 제공 문서를 확인하세요.

거의 모든 앱 비활성화 및 활성화

Android의 시스템 앱은 제거할 수 없으며 안타깝게도 설정을 통해 비활성화할 수 없는 앱도 많습니다. ADB에서 제거할 수는 없지만 비활성화하는 데 도움이 될 수 있습니다.

먼저 비활성화하려는 앱의 패키지 이름을 확인하십시오. 그런 다음 다음 명령을 시도하십시오. 하나가 실패하면 다음 옵션을 시도하십시오.

  • 오후 비활성화
    • 다시 활성화하려면 다음을 사용하십시오. 오후 활성화
  • 오후 비활성화-사용자 --사용자 0
    • 다시 활성화하려면 다음을 사용하십시오. 오후 활성화
  • 오후 숨기기
    • 다시 활성화하려면 다음을 사용하십시오. 오후 숨기기 해제
  • 오후 일시 중지
    • 다시 활성화하려면 다음을 사용하십시오. 오후 정지 해제
  • 오후 제거 -k --사용자 0
    • 다시 활성화하려면 다음을 사용하십시오. 오후 설치-기존
      • 이것은 사용자 프로필에서 응용 프로그램을 효과적으로 제거합니다. 다시 활성화하라는 명령이 ~해야 한다 효과가 있다는 보장은 없습니다. 앱을 복원하려면 초기화해야 할 수 있습니다.
      • 장치에서 여러 사용자 프로필을 사용하는 경우 위의 명령에서 0을 가지고 있는 실제 사용자 ID로 바꾸십시오.

자세한 내용은 자습서를 확인하십시오. 루트 액세스 없이 캐리어 및 OEM 블로트웨어를 제거하는 방법.

스크린샷 캡처

대부분의 Android ROM은 각각 스크린샷을 찍고 화면 활동을 기록하기 위한 두 가지 편리한 셸 유틸리티인 screencap 및 screenrecord를 제공합니다. ADB 셸에서 직접 호출하여 전화기 화면의 정적 스크린샷 또는 비디오 스니펫을 캡처하고 장치의 내부 저장소에 직접 저장할 수 있습니다.

스크린샷을 캡처하는 구문은 매우 간단합니다.

adb 쉘 screencap /sdcard/screenshot.png

마찬가지로 동적 화면 캡처가 필요한 경우 다음을 수행하십시오.

adb 쉘 스크린레코드 /sdcard/recording.mp4

예상할 수 있듯이 screencap 도구는 비교적 단순한 반면 screenrecord 유틸리티는 여러 매개 변수를 제공합니다. 후자에 대한 옵션은 다음과 같습니다.

  • --크기 너비x높이
    • 비디오 파일의 해상도를 설정합니다(예: "1280x720"). 기본적으로 대상 장치의 기본 디스플레이 해상도(지원되는 경우)를 사용하려고 시도하고 그렇지 않은 경우 1280x720으로 돌아갑니다.
  • --비트레이트 RATE
    • 비디오 비트 전송률을 초당 비트 수로 설정합니다. 값은 비트 또는 메가비트로 지정할 수 있습니다. '4000000'은 '4M'과 같습니다.
  • --버그 보고서
    • 버그를 설명하는 데 유용할 수 있는 타임스탬프 오버레이와 같은 추가 정보를 추가할 수 있습니다.
  • --시간 제한 TIME
    • 최대 녹음 시간을 초 단위로 설정합니다. 기본/최대값은 180입니다.
  • --디스플레이 ID ID
    • 기록할 물리적 디스플레이 ID를 지정합니다. 기본 디스플레이는 기본 디스플레이로 설정됩니다. 유효한 디스플레이 ID는 "dumpsys SurfaceFlinger --display-id"를 참조하십시오.
  • --말 수가 많은
    • 녹음 세션에 대한 자세한 정보를 표시합니다.

Android에 내장된 화면 캡처 유틸리티의 기능을 추가로 확장할 수 있습니다. scrcpy. ADB의 힘을 활용한 오픈소스 스크린 미러링 솔루션입니다.

PC와 Android 장치 간에 바이너리 데이터 전송

본격적인 ADB 셸을 생성하고 싶지 않지만 호스트 PC와 대상 Android 장치 사이에 간소화된 바이너리 데이터 통과를 통합하려는 경우 다음을 사용할 수 있습니다. 집행인 그리고 exec-out 명령.

그들의 장기간 존재, exec-in 및 exec-out 명령은 아직 문서화되지 않았습니다. 서로 다른 셸이 입력 및 출력을 처리하는 방식으로 인해 파일이 손상될 수 있습니다. 주의하여 사용하십시오.

첫 번째는 Android에서 명령을 실행하고 필터링되지 않은 콘솔 입력을 매개변수로 제공하는 데 도움이 됩니다. 두 번째는 정반대입니다. 즉, Android에서 명령을 실행하고 호스트 OS에서 필터링되지 않은 바이너리 출력을 캡처합니다.

예:

adb 간부-밖으로 "스크린캡 -p" > "D:\스크린샷.png"

이것은 스크린캡 Android 명령을 사용하여 휴대폰 디스플레이의 스크린샷을 캡처하지만 호스트 PC의 D: 파티션에 screenshot.png로 직접 저장합니다(Windows를 실행 중인 경우). 반면에,

adb 간부-~에"cd /sdcard && tar -xf -" < "D:\backup.tar"

이렇게 하면 Android 장치의 내부 저장소 루트에 있는 호스트 PC(Windows 실행)의 D: 파티션에 저장된 backup.tar 파일의 내용이 추출됩니다.


ADB는 믿을 수 없을 정도로 강력한 도구이며 위에 있는 것보다 훨씬 더 많은 작업을 수행할 수 있습니다. 이 문서의 명령은 유용한 시작점일 뿐입니다. 고급 사용법을 보려면 다음과 같은 명령을 확인하십시오. cmd -l 상호 작용할 수 있는 다양한 서비스를 확인하고 ls -l /시스템/빈 Android ROM에서 사용할 수 있는 다른 명령 실행 파일을 보려면

다른 Android 여행 및 진드기에 대해서는 다음 가이드를 확인하세요. 안드로이드 스마트폰을 루팅하는 방법, TWRP 복구를 설치하는 방법, 그리고 Android 기기에 맞춤 ROM을 설치하는 방법.