APK Analyzer의 명령줄 버전을 통해 빌드 프로세스를 완료한 후 APK의 구성에 관한 정보를 즉시 확인할 수 있으며 두 가지 APK의 차이를 비교할 수 있습니다. APK Analyzer를 사용하면 앱 내의 DEX 파일 및 리소스 관련 문제를 디버그하는 시간과 APK의 크기를 줄일 수 있습니다.
apkanalyzer는 android_sdk/cmdline-tools/version/bin/apkanalyzer의 Android SDK 명령줄 도구 패키지에 포함되어 있습니다.
또는 APK Analyzer로 빌드 분석에서 설명한 대로 Android 스튜디오 내에서 APK Analyzer 도구에 액세스할 수 있습니다.
구문
apkanalyzer의 구문은 다음과 같습니다.
apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
subject는 개발자가 쿼리하려는 것이며 전체 APK 또는 APK의 일부일 수 있습니다. subject는 다음 중 하나일 수 있습니다.
- apk: 애플리케이션 ID, 버전 코드, 버전 이름과 같은 APK 파일 속성을 분석합니다.
- files: APK 파일 내의 파일을 분석합니다.
- manifest: APK 파일 내 매니페스트의 콘텐츠를 분석합니다.
- dex: APK 파일 내 DEX 파일을 분석합니다.
- resources: 텍스트, 이미지 및 문자열 리소스를 봅니다.
verb는 subject에 관해 알고 싶은 내용입니다. subject, verb 및 그 옵션은 명령어에 대한 다음 섹션에 설명되어 있습니다.
모든 명령어는 APK 파일을 지정해야 합니다. apk compare 명령어에만 개발자가 두 번째 APK를 지정해야 합니다.
옵션이 명확하다면 모든 옵션을 간단하게 줄일 수 있습니다. 예를 들어 --human-readable 전역 옵션은 -h로 줄일 수 있습니다.
다음 예에서는 apk(subject)를 분석하여 그 file-size(verb)를 가져온 후 파일 크기를 사람이 읽을 수 있는 형식(-h 옵션)으로 출력합니다.
apkanalyzer -h apk file-size myapk.apk
명령어
명령어에 관한 다음 설명은 subject별로 정렬되어 있으며, 각 subject에 사용 가능한 verb와 옵션을 안내합니다.
| 설명 | |
|---|---|
| apk summary apk-file | 애플리케이션 ID, 버전 코드, 버전 이름을 출력합니다. 출력 예: com.myapp 5 1.1-beta | 
| apk file-size apk-file | APK의 총 파일 크기를 출력합니다. | 
| apk download-size apk-file | APK의 예상 다운로드 크기를 출력합니다. | 
| apk features [--not-required] apk-file | APK에서 Play 스토어 필터링을 트리거하는 데 사용하는 기능을 출력합니다. --not-required옵션을 추가하여 출력에 필요하지 않은 것으로 표시된 기능을 포함합니다.출력 예: android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission | 
| apk compare [options] apk-file
        apk-file2 | apk-file및apk-file2의 크기를 비교합니다.
       다음 옵션을 포함할 수 있습니다.
 출력 예(이전 크기/새 크기/크기 차이/경로): 39086736 48855615 9768879 / 10678448 11039232 360784 /classes.dex 18968956 18968956 0 /lib/ 110576 110100 -476 /AndroidManifest.xml ... | 
| APK 파일 시스템 보기 | 설명 | 
|  files list apk-file | APK의 모든 파일을 표시합니다. 출력 예: / /classes2.dex /classes.dex /assets/ /assets/asset.data /AndroidManifest.xml /resources.arsc /res/ ... | 
| files cat --file path apk-file | 파일 콘텐츠를 출력합니다. --file
      /AndroidManifest.xml과 같은--file path옵션을 사용하여 APK 내에 경로를 지정해야 합니다. | 
| 매니페스트의 정보 보기 | 설명 | 
| manifest print apk-file | XML 형식으로 APK 매니페스트를 출력합니다. | 
| manifest application-id apk-file | 애플리케이션 ID 값을 출력합니다. | 
| manifest version-name apk-file | 버전 이름 값을 출력합니다. | 
| manifest version-code apk-file | 버전 코드 값을 출력합니다. | 
| manifest min-sdk apk-file | 최소 SDK 버전을 출력합니다. | 
| manifest target-sdk apk-file | 대상 SDK 버전을 출력합니다. | 
| manifest permissions apk-file | 권한 목록을 출력합니다. | 
| manifest debuggable apk-file | 앱의 디버그 가능 여부를 출력합니다. | 
| DEX 파일 정보 액세스 | 설명 | 
| dex list apk-file | APK의 DEX 파일 목록을 출력합니다. | 
| dex references [--files path] [--files path2]
        apk-file | 지정된 DEX 파일의 메서드 참조 횟수를 출력합니다.
      기본값은 모든 DEX 파일입니다. --files옵션을 추가하여 포함하려는 특정 파일을 표시합니다.출력 예: classes.dex 59598 classes2.dex 8042 | 
| dex packages [option1 option2 ...] apk-file | DEX의 클래스 트리를 출력합니다. 출력에서 P,C,M,F는 각각 패키지, 클래스, 메서드, 필드를 나타냅니다. 그리고x,k,r,d는 각각 삭제된 노드, 보관된 노드, 참조된 노드, 정의된 노드를 나타냅니다.출력을 미세 조정하려면 다음 옵션을 추가합니다. 
 출력 예(유형/상태/정의된 메서드/참조된 메서드/바이트 크기/이름): P d 1 1 85 g P d 1 1 85 g.a C d 1 1 85 g.a.a M d 1 1 45 g.a.a java.lang.Object get() C r 0 1 40 byte[] M r 0 1 40 byte[] java.lang.Object clone() | 
| dex code --class class [--method method] | smali 형식으로 클래스 또는 메서드의 바이트 코드를 출력합니다. 클래스 이름은 필수이며, 디컴파일할 정규화된 클래스 이름을 출력합니다. --method옵션을 추가하여 디컴파일할 메서드를 지정합니다.메서드 디컴파일의 형식은  | 
| res/ 및 resources.arsc에 저장된 리소스 보기 | 설명 | 
| resources packages | 리소스 표에 정의된 패키지 목록을 출력합니다. | 
| resources configs --type type [--package package] apk-file | 지정된 type의 구성 목록을 출력합니다.type은string과 같은 리소스 유형입니다.
    리소스 표 패키지 이름을 지정하려면--package옵션을 포함하세요. 포함하지 않으면 첫 번째로 정의된 패키지가 사용됩니다. | 
| resources value --config config --name name
 --type type [--package package] apk-file | config,name,type으로 지정된 리소스 값을 출력합니다.type옵션은string과 같은 리소스 유형입니다.리소스 표 패키지 이름을 지정하려면  | 
| resources names --config config --type type
     [--package package] apk-file | 구성 및 유형의 리소스 이름 목록을 출력합니다. type옵션은string과 같은 리소스 유형입니다.
    리소스 표 패키지 이름을 지정하려면--package옵션을 포함하세요. 포함하지 않으면 첫 번째로 정의된 패키지가 사용됩니다. | 
| resources xml --file path apk-file | 사람이 읽을 수 있는 바이너리 XML 파일 형식을 출력합니다. file옵션을 포함하여 파일 경로를 지정합니다. | 
