Android 디버그 브리지에는 여러분이 알지 못하는 내용이 많이 있습니다. ADB 사용에 대한 유용한 팁과 요령을 보려면 여기를 클릭하십시오!
빠른 링크
- 쉘 액세스
- 여러 장치에 연결
- 파일 전송 중
- 벌채 반출
- ADB를 통해 설치된 앱 나열
- ADB를 통해 앱 설치 및 제거
- ADB로 APK 추출
- 애플리케이션 데이터 백업 및 복원
- 앱 구성 요소 나열
- 활동, 서비스 및 방송 수신기 출시
- 거의 모든 앱 비활성화 및 활성화
- 스크린샷 캡처
- PC와 Android 기기 간 바이너리 데이터 전송
당신이 모딩 현장에 숨어 있는 안드로이드 매니아이거나 오랫동안 앱 개발자였다면 조만간 Android 디버그 브리지(ADB)라는 깔끔한 도구를 우연히 발견하게 될 것입니다. 짧은. 이는 Android Studio에서 명령줄 동반 유틸리티로 광범위하게 사용됩니다. Android 개발자는 또한 이를 독립 실행형 솔루션으로 사용하여 앱을 수동으로 설치하고 테스트합니다. 안드로이드 스마트폰 에뮬레이트된 Android 기기도 마찬가지입니다.
그러나 ADB가 할 수 있는 일이 많고 그 중 대부분이 개발자에게만 유용한 것은 아닙니다. 개발자가 아니더라도 이 글을 읽고 계시다면 아마도 ADB를 한두 번 사용해 보신 적이 있을 것입니다. 앱 사이드로드 또는 권한을 조정하세요. 그러나 이것이 ADB를 사용할 수 있는 전부는 아닙니다. 당신이 알지 못했을 수도 있는 ADB 사용에 대한 몇 가지 팁과 요령을 계속 읽어보세요.
컴퓨터에서 ADB를 실행해야 합니다. 다음 기사를 꼭 확인해 보세요. ADB를 설치하는 방법 도움이 필요하다면. Windows를 사용하는 경우에도 다음이 필요합니다. 적절한 OEM USB 드라이버 설치 당신의 안드로이드 장치에 대한.
쉘 액세스
이전에 ADB를 사용해 본 적이 있다면 한 줄에서 모든 명령을 실행하는 데 익숙할 수 있습니다. 그러나 ADB를 사용하여 장치에서 터미널 셸을 열고 명령을 직접 실행할 수도 있습니다. 그리고 그것은 쉽습니다!
터미널 또는 명령 프롬프트 창에서:
adb shell
그러면 다음과 같은 인사를 받게 될 것입니다. $
장치에서 직접 명령을 실행할 수 있는 기호입니다.
여러 장치에 연결
ADB는 동시에 여러 장치와 통신할 수 있습니다. 그러나 이러한 시나리오에서 ADB 명령을 실행할 때는 대상 장치를 지정해야 합니다.
이렇게 하려면 대상 장치의 일련 번호를 알아야 합니다. devices 명령을 사용하여 시리얼을 얻을 수 있습니다:
adb devices
이제 -s
대상 장치의 일련 번호를 지정하는 옵션입니다. 예:
adb -s <serialnumber> shell
파일 전송 중
명령줄 애호가를 위해 ADB는 Android 장치와 파일을 주고받는 매우 쉬운 방법을 제공합니다. 그냥 사용 pull
장치에서 파일과 디렉터리를 복사하는 명령 push
파일과 디렉터리를 장치에 복사하는 명령:
하위 디렉터리가 포함된 파일이나 디렉터리를 Android 기기에 복사하려면 다음 단계를 따르세요.
adb push local_path device_path
- 예:
adb push D:\image.png /sdcard
다음 명령은 하위 디렉터리가 포함된 파일 또는 디렉터리를 Android 장치에서 호스트 PC로 복사합니다.
adb pull device_path local_path
- 예:
adb pull /sdcard/backup_April.tar D:\Backup
벌채 반출
안드로이드 스튜디오는 로그캣 창, 실시간으로 장치의 로그 표시를 지원합니다. 그러나 일괄 처리에는 그다지 유용하지 않습니다. 다행히 Android 장치에는 ADB를 통해 사용할 수 있는 logcat 명령이 함께 제공됩니다. 이 명령을 사용하면 시스템 및 애플리케이션 로그 메시지를 덤프하고 화면에 인쇄할 수 있습니다.
기본 구문은 다음과 같습니다.
adb logcat
자세한 내용은 다음 튜토리얼을 참조하세요. Android에서 시스템 logcat, 커널 로그 및 dmesg를 가져오는 방법.
부활절 계란
Google은 logcat 명령과 관련된 두 개의 멋진 부활절 달걀을 제공합니다.
- 첫 번째는 Lolcat입니다. ㅋㅋㅋ고양이 밈. 일반 logcat 명령과 동일한 출력을 제공합니다.
adb lolcat
- 두 번째는 logcat -v long 명령과 동일한 longcat입니다. 모든 메타데이터 필드와 별도의 메시지를 빈 줄로 표시합니다.
adb longcat
ADB를 통해 설치된 앱 나열
기기에 설치된 앱을 보려면 다음 명령을 사용하세요.
adb shell pm list packages
그러면 설치된 앱의 패키지 이름 목록이 반환되며 각 패키지 이름 앞에는 다음이 추가됩니다. package:
.
옵션
보다 구체적인 목록을 검색하는 데 사용할 수 있는 몇 가지 옵션도 있습니다.
- -에프 각 앱의 기본 APK 경로와 패키지 이름이 포함됩니다.
- -ㅏ APEX가 아닌 알려진 패키지가 모두 반환되었는지 확인합니다.
- -디 명령이 비활성화된 패키지만 반환하게 됩니다.
- -이자형 그러면 명령이 활성화된 패키지만 반환하게 됩니다.
- -에스 명령이 시스템 패키지만 반환하게 됩니다.
- -3 명령이 타사 패키지만 반환하게 됩니다.
- -나 각 패키지의 설치 프로그램 패키지 이름이 포함됩니다.
- -유 각 패키지의 패키지 UID가 포함됩니다.
- -유 제거된 패키지가 포함됩니다.
- --쇼-버전코드 각 패키지의 버전 코드가 포함됩니다.
- --apex 전용 APEX 패키지만 반환합니다.
- --uid 주어진 UID를 가진 패키지만 표시합니다.
- --사용자 주어진 사용자 ID에 속하는 패키지만 표시합니다.
ADB를 통해 앱 설치 및 제거
이는 ADB의 비교적 일반적인 사용이지만 어쨌든 언급할 가치가 있습니다. 다른 방법 중에서도 ADB를 활용하여 다음을 수행할 수도 있습니다. Android 앱 설치 및 제거 당신의 안드로이드 장치에.
APK 설치
컴퓨터에 APK가 있는 경우 다음을 사용하여 기기에 설치할 수 있습니다.
adbinstall-rsomeapk.apk
교체하는 것을 기억하세요 someapk.apk
설치하려는 APK의 전체 경로를 입력하세요.
옵션
ADB를 통해 APK를 설치하는 데는 다양한 옵션이 있습니다.
- 그만큼 -아르 자형 옵션을 사용하면 ADB가 기존 앱(예: 업데이트) 위에 설치할 수 있습니다. Android Pie 이상에서는 이 옵션을 지정할 필요가 없습니다.
- 그만큼 -아르 자형 옵션을 사용하면 Android Pie 이상의 경우 앱이 이미 설치되어 있으면 설치가 실패하게 됩니다.
- 그만큼 -나 옵션을 사용하면 설치 프로그램 패키지 이름을 지정할 수 있습니다. Android가 APK를 설치한 것이 무엇인지 알고 싶어하는 경우 이것이 반환됩니다.
- 그만큼 -티 옵션은 다음과 같은 APK를 허용합니다. 안드로이드: testOnly="true" 매니페스트에 설치됩니다.
- 그만큼 -디 옵션을 사용하면 지정된 APK를 이미 설치된 앱으로 다운그레이드할 수 있습니다. 이는 두 버전의 앱이 모두 디버깅 가능한 경우에만 작동합니다.
- 그만큼 -g Android Marshmallow 이상의 옵션은 설치된 앱에 모든 런타임 권한을 자동으로 부여합니다.
그게 전부는 아닙니다. 전체 목록을 원하면 내장된 문서를 확인하세요.
다중 APK 및 번들
여러 앱에서 또는 앱 번들을 설치하기 때문에 한 번에 많은 APK를 설치하려는 경우 ADB를 사용할 수 있습니다. install-multiple
그리고 install-multi-package
특징.
모든 APK가 하나의 앱용인 경우 다음을 사용하세요. install-multiple
:
adbinstall-multipleapk1.apkapk2.apk ...
그렇지 않으면 다음을 사용하십시오. install-multi-package
:
adbinstall-multi-packageapp1.apkapp2.apk ...
이러한 명령의 옵션은 다음과 유사합니다. install
, 그러나 몇 가지 제한 사항이 있습니다. 사용 가능한 옵션에 대해서는 ADB의 내장 문서를 확인하세요.
앱 제거
ADB를 사용하여 제거하려면 제거하려는 앱의 패키지 이름이 필요합니다. 해당 섹션을 확인하세요. 설치된 앱 나열 아직 하지 않았다면.
패키지 이름이 있으면 제거는 다음과 같이 간단합니다.
adb uninstall <packagename>
일반적으로 이 명령을 사용하여 시스템이나 사전 설치된 앱을 제거할 수 없습니다. 그러나 ADB를 사용하여 비활성화할 수도 있습니다. 섹션을 확인하세요. 거의 모든 앱 비활성화 및 활성화 자세한 내용은.
ADB로 APK 추출
앱의 APK를 추출하려는 이유는 많습니다. 나중에 사용할 수 있도록 백업하고 싶거나 더 이상 온라인에서 사용할 수 없어 다른 장치로 전송하고 싶을 수도 있습니다.
ADB를 사용하여 앱을 추출하는 것은 매우 간단합니다. 먼저, 추출하려는 앱의 패키지 이름을 찾고 싶을 것입니다. 이를 수행하는 방법은 여러 가지가 있지만 일반적으로 가장 쉬운 방법은 기기의 설정 앱을 사용하여 설치된 모든 앱 목록에서 원하는 앱을 선택하고 패키지 이름이나 앱을 찾을 때까지 아래로 스크롤합니다. ID.
패키지 이름이 있으면 다음 명령을 실행하십시오.
adb shell pm path <packagename>
이 명령은 해당 패키지 이름에 대한 모든 APK의 경로를 반환합니다.
그런 다음 다음 명령을 사용하여 각 APK를 컴퓨터로 가져올 수 있습니다.
adb pull /path/to/apk.apk
애플리케이션 데이터 백업 및 복원
Google은 아직 iOS와 같은 원클릭 백업 방법을 제시하지 않았지만 ADB를 사용하여 설치된 앱을 데이터와 함께 백업하고 복원할 수 있습니다. 그러나 그 기능은 완벽과는 거리가 멀고 Google은 이미 해당 기능을 더 이상 사용되지 않는 것으로 표시했습니다..
백업
APK를 사용하여 단일 애플리케이션을 백업하려면 다음을 수행하세요.
adb backup -apk <packagename> -f package_name_backup.ab
모든 앱 데이터를 한 번에 백업하려는 경우:
adb backup -f all -all -apk -nosystem
복원 모듈은 개별 앱별 복원을 수행할 수 없으므로 패키지별 백업을 만드는 것이 좋습니다. 다음 명령 조각(Linux/macOS 및 Linux용 Windows 하위 시스템과 호환 가능)을 사용하면 됩니다.
for APP in $(adb shell pm list packages -3)
do
APP=$( echo${APP} | sed "s/^package://")
adb backup -f ${APP}.backup ${APP}
done
복원하다
먼저 저장된 APK를 설치해야 합니다.
adb install <packagename>.apk
그런 다음 데이터를 복원할 수 있습니다.
adbrestorepackage_name_backup.ab
다시 한번 말씀드리지만, ADB 백업 및 복원 기능에는 ROM에 따른 변수 결과를 포함하여 여러 가지 주의 사항이 있습니다.
앱 구성 요소 나열
앱의 구성 요소는 활동, BroadcastReceivers, 서비스 등과 같은 것입니다. 때로는 특정 앱에서 이러한 구성 요소의 이름을 아는 것이 유용할 수 있습니다. 특히 숨겨진 활동을 시작하거나 특정 데이터가 포함된 브로드캐스트를 보내려는 경우 더욱 그렇습니다.
안타깝게도 ADB에는 앱 구성요소를 나열하는 매우 깔끔한 방법이 없습니다. 하지만 가능합니다. 다음 명령을 실행하십시오.
adb shell dumpsys package
전체 텍스트가 반환됩니다.
- 찾을 때까지 스크롤하십시오. 활동 확인자 테이블 활동을 보려면 제목을 클릭하세요.
- 아래를 보세요 수신기 리졸버 테이블 BroadcastReceiver용.
- 을 체크 해봐 서비스 해결자 테이블 서비스를 위해.
- 등등.
각 구성 요소에는 해당 구성 요소를 시작하는 데 필요한 작업, 구성 요소 이름 및 일부 추가 정보가 표시됩니다.
또는 활동, 서비스 및 수신자를 더 쉽게 볼 수 있는 방법을 원하는 경우 XDA Recognized Developer의 루트 활동 실행기 앱을 사용할 수 있습니다. 자차리1. 다양한 기타 편리한 기능과 함께 각 앱의 구성 요소가 표시됩니다.
가격: 0.99.
활동, 서비스 및 방송 수신기 출시
ADB는 활동을 시작하고, 서비스를 시작하고, BroadcastReceiver에 알리는 데에도 사용할 수 있습니다. 필요한 경우 데이터 URI 및 의도 추가 항목을 지정할 수도 있습니다.
구성 요소를 시작하려면 시작하려는 구성 요소 이름이 필요합니다. 그것을 얻는 방법은 에서 볼 수 있습니다. 앱 구성요소 나열 부분.
활동을 시작하기 위한 명령 구문은 다음과 같습니다.
am start -a <action> -n <component>
서비스를 시작하는 명령 구문은 다음과 같습니다.
am startservice -a <action> -n <component>
BroadcastReceiver에 알리는 명령 구문은 다음과 같습니다.
am broadcast -a <action> -n <component>
대부분의 경우 활동 및 서비스의 경우 작업을 명시적으로 지정할 필요가 없습니다. 일반적으로 구성 요소가 다음이 아닌 다른 구성 요소를 사용하는 경우에만 필요합니다. android.intent.action. 기본.
기본 구문 외에도 전달할 데이터를 더 많이 지정하는 방법은 다음과 같습니다. 일반적으로 모든 데이터 값은 큰따옴표로 묶어야 합니다.
- -디 데이터 URI를 지정할 수 있습니다.
- -이자형 또는 --es 문자열을 추가로 지정할 수 있습니다.
- --esn null 문자열을 추가로 지정할 수 있습니다.
- --ez 부울 추가 항목을 지정하는 데 사용됩니다.
- --ei 정수 추가를 지정하는 데 사용됩니다.
- --엘자 긴 추가 항목을 지정하는 것입니다.
- --ef float 추가를 전달합니다.
- --유럽 연합 URI를 추가로 전달합니다.
- --ecn 구성 요소 이름을 추가로 지정하는 데 사용할 수 있습니다.
-
--eia
값을 Integer[] extra로 전달합니다., ,... -
--eial
값을 목록으로 전달합니다., ,... . - 동일한 배열 및 목록 인수는 long, float 및 String에도 작동합니다. 그냥 교체하세요 나 적절한 문자로.
- -에프 플래그를 지정할 수 있습니다.
사용할 수 있는 동작 옵션이 훨씬 더 많으므로 자세한 내용은 내장 문서를 확인하세요.
거의 모든 앱 비활성화 및 활성화
Android의 시스템 앱은 제거할 수 없으며 안타깝게도 대부분의 앱은 설정을 통해 비활성화할 수 없습니다. ADB에서는 제거를 허용하지 않지만 비활성화하는 데 도움이 될 수 있습니다.
먼저 비활성화하려는 앱의 패키지 이름을 확인하세요. 그런 다음 다음 명령을 시도해 보세요. 하나가 실패하면 다음 옵션을 시도하십시오.
-
오후 비활성화
- 다시 활성화하려면 다음을 사용하십시오. 오후 활성화
-
오후 비활성화-사용자 --사용자 0
- 다시 활성화하려면 다음을 사용하십시오. 오후 활성화
-
오후 숨기기
- 다시 활성화하려면 다음을 사용하십시오. 오후 숨김 해제
-
오후 일시 중지
- 다시 활성화하려면 다음을 사용하십시오. 오후 일시정지 해제
-
오후 제거 -k --user 0
- 다시 활성화하려면 다음을 사용하십시오. 오후 설치-기존
- 이는 사용자 프로필에서 응용 프로그램을 효과적으로 제거합니다. 다시 활성화하라는 명령이 실행되는 동안 ~해야 한다 작동한다는 보장은 없습니다. 앱을 복원하려면 공장 초기화가 필요할 수 있습니다.
- 장치에서 여러 사용자 프로필을 사용하는 경우 위 명령의 0을 실제 사용자 ID로 바꿔야 합니다.
- 다시 활성화하려면 다음을 사용하십시오. 오후 설치-기존
자세한 내용은 다음 튜토리얼을 확인하세요. 루트 액세스 없이 통신업체 및 OEM 블로트웨어를 제거하는 방법.
스크린샷 캡처
대부분의 Android ROM은 스크린샷을 찍고 화면 활동을 기록하는 데 각각 screencap과 screenrecord라는 두 가지 편리한 셸 유틸리티를 제공합니다. ADB 셸에서 직접 호출하여 휴대폰 화면의 정적 스크린샷이나 비디오 조각을 캡처하고 장치의 내부 저장소에 직접 저장할 수 있습니다.
스크린샷을 캡처하는 구문은 매우 간단합니다.
adb shell screencap /sdcard/screenshot.png
마찬가지로 동적 화면 캡처가 필요한 경우 다음을 수행합니다.
adb shell screenrecord /sdcard/recording.mp4
예상할 수 있듯이, screencap 도구는 다소 단순한 반면, screenrecord 유틸리티는 여러 매개변수를 제공합니다. 후자에 대한 옵션은 다음과 같습니다.
-
--크기 WIDTHxHEIGHT
- 비디오 파일의 해상도를 설정합니다(예: "1280x720"). 기본적으로 대상 장치의 기본 디스플레이 해상도(지원되는 경우)를 사용하려고 시도하고 그렇지 않은 경우 1280x720으로 대체됩니다.
-
--비트 전송률
- 비디오 비트 전송률을 초당 비트 수로 설정합니다. 값은 비트 또는 메가비트로 지정될 수 있습니다. '4000000'은 '4M'과 동일합니다.
-
--버그 보고
- 버그를 설명하는 데 유용할 수 있는 타임스탬프 오버레이와 같은 추가 정보를 추가할 수 있습니다.
-
--시간 제한 TIME
- 최대 녹음 시간을 초 단위로 설정합니다. 기본값/최대값은 180입니다.
-
--디스플레이 ID ID
- 녹화할 물리적 디스플레이 ID를 지정하세요. 기본 디스플레이는 기본 디스플레이로 설정되어 있습니다. 유효한 디스플레이 ID는 "dumpsys SurfaceFlinger --display-id"를 참조하세요.
-
--말 수가 많은
- 녹음 세션에 관한 심층 정보를 표시합니다.
다음을 통해 Android에 내장된 화면 캡처 유틸리티의 기능을 더욱 확장할 수 있습니다. 지저분한. ADB의 강력한 기능을 활용하는 오픈 소스 화면 미러링 솔루션입니다.
PC와 Android 기기 간 바이너리 데이터 전송
본격적인 ADB 셸을 생성하고 싶지 않지만 호스트 PC와 대상 Android 장치 사이에 바이너리 데이터의 간소화된 통과를 통합하려는 경우 다음을 사용할 수 있습니다. exec-in
그리고 exec-out
명령.
그럼에도 불구하고 장기간의 존재, exec-in 및 exec-out 명령은 아직 문서화되지 않았습니다. 서로 다른 쉘이 입력과 출력을 처리하는 방식으로 인해 파일이 손상될 수 있습니다. 주의해서 사용하세요.
첫 번째는 Android에서 명령을 실행하고 필터링되지 않은 콘솔 입력을 매개변수로 제공하는 데 도움이 됩니다. 두 번째는 정반대의 작업을 수행합니다. 즉, Android에서 명령을 실행하고 호스트 OS에서 필터링되지 않은 바이너리 출력을 캡처합니다.
예:
adb exec-out "screencap -p" > "D:\screenshot.png"
이것은 screencap
Android의 명령을 사용하여 휴대폰 디스플레이의 스크린샷을 캡처하지만 호스트 PC의 D: 파티션에 스크린샷.png로 직접 저장합니다(Windows를 실행하는 경우). 반면에,
adb exec-in"cd /sdcard && tar -xf -" < "D:\backup.tar"
그러면 Android 장치의 내부 저장소 루트에 있는 호스트 PC(Windows 실행)의 D: 파티션에 저장된 backup.tar 파일의 내용이 추출됩니다.
ADB는 믿을 수 없을 정도로 강력한 도구이며 위에 나온 것보다 훨씬 더 많은 일을 할 수 있습니다. 이 문서의 명령은 유용한 시작점일 뿐입니다. 보다 고급 사용법을 보려면 다음과 같은 명령을 확인하십시오. cmd -l 상호 작용할 수 있는 다양한 서비스를 확인하고 ls -l /시스템/빈 Android ROM에서 사용할 수 있는 다양한 명령 실행 파일을 확인하세요.
다른 Android 여행 및 진드기에 대해서는 다음 가이드를 확인하세요. 안드로이드 스마트폰을 루팅하는 방법, TWRP 복구를 설치하는 방법, 그리고 Android 기기에 맞춤 ROM을 설치하는 방법.