apkanalyzer

APK Analyzer의 명령줄 버전을 통해 빌드 프로세스를 완료한 후 APK의 구성에 관한 정보를 즉시 확인할 수 있으며 두 가지 APK의 차이를 비교할 수 있습니다. APK Analyzer를 사용하면 앱 내의 DEX 파일 및 리소스 관련 문제를 디버그하는 시간과 APK의 크기를 줄일 수 있습니다.

apkanalyzerandroid_sdk/cmdline-tools/version/bin/apkanalyzerAndroid 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 파일 속성 보기 설명
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-fileapk-file2의 크기를 비교합니다. 다음 옵션을 포함할 수 있습니다.
  • --different-only: 차이가 있는 디렉터리와 파일을 출력합니다.
  • --files-only: 디렉터리 항목을 출력하지 않습니다.
  • --patch-size: 원시 차이 대신 파일별 패치 추정치를 표시합니다.

출력 예 (이전 크기 / 새 크기 / 크기 차이 / 경로):

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의 정보 보기 설명
manifest print apk-file XML 형식으로 APK manifest를 출력합니다.
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는 각각 삭제된 노드, 보관된 노드, 참조된 노드, 정의된 노드를 나타냅니다.

출력을 미세 조정하려면 다음 옵션을 추가합니다.

  • --defined-only: APK에서 정의된 클래스만 출력에 포함합니다.
  • --files: 포함할 DEX 파일 이름을 지정합니다. 기본값은 모든 DEX 파일입니다.
  • --proguard-folder file: 매핑을 위해 검색할 Proguard 출력 폴더를 지정합니다.
  • --proguard-mappings file: Proguard 매핑 파일을 지정합니다.
  • --proguard-seeds file: Proguard 시드 파일을 지정합니다.
  • --proguard-usages file: Proguard 사용 파일을 지정합니다.
  • --show-removed: Proguard에서 삭제한 클래스 및 멤버를 표시합니다.

출력 예 (유형/상태/정의된 메서드/참조된 메서드/바이트 크기/이름):

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 옵션을 추가하여 디컴파일할 메서드를 지정합니다.

메서드 디컴파일의 형식은 name(params)returnType입니다(예: someMethod(Ljava/lang/String;I)V).

res/ 및 resources.arsc에 저장되는 리소스 보기 설명
resources packages 리소스 표에 정의된 패키지 목록을 출력합니다.
resources configs --type type [--package package] apk-file 지정된 type의 구성 목록을 출력합니다. typestring과 같은 리소스 유형입니다. 리소스 표 패키지 이름을 지정하려면 --package 옵션을 포함하세요. 포함하지 않으면 첫 번째로 정의된 패키지가 사용됩니다.
resources value --config config --name name --type type [--package package] apk-file config, name, type으로 지정된 리소스 값을 출력합니다. type 옵션은 string과 같은 리소스 유형입니다.

리소스 표 패키지 이름을 지정하려면 --package 옵션을 포함하세요. 포함하지 않으면 첫 번째로 정의된 패키지가 사용됩니다.

resources names --config config --type type [--package package] apk-file 구성 및 유형의 리소스 이름 목록을 출력합니다. type 옵션은 string과 같은 리소스 유형입니다. 리소스 표 패키지 이름을 지정하려면 --package 옵션을 포함하세요. 포함하지 않으면 첫 번째로 정의된 패키지가 사용됩니다.
resources xml --file path apk-file 사람이 읽을 수 있는 바이너리 XML 파일 형식을 출력합니다. file 옵션을 포함하여 파일 경로를 지정합니다.