본문 바로가기
SW 개발/Android

Command line 기반 Android Apk 분석 툴: apkanalyzer

by Kibua20 2020. 8. 20.

Command line 기반의 Android APK 분석 tool 인 'apkanalyzer' 사용 방법에 대해서 정리하고자 합니다.  Command line 분석 Tool은 Android Studio가 설치되지 않은 서버에서 APK를 분석하거나, APK 분석을 자동화할 때 유용하게 사용할 수 있습니다. 

 

Apk 분석 툴은 Google에서 배포하는 aapt2 (※ 정확하게는 aapt2는 리소스 컴파일 및 dump tool임)와 apkanalyzer가 있고, Python 기반의 apk-parser가 있습니다.  구글이 배포하는 tool은 최신 Android OS의 수정 사항까지 반영된다는 장점이 있고, APK를 디컴파일하여 분석하는 목적으로는 apk-parser가 좀 더 유용한 것 같습니다. 

 

설치

apkanalyzer Android SDK 도구 패키지에 포함되어 있으며 android_sdk/tools/bin/apkanalyzer 또는 Android SDK 다운로드 사이트에서 Command line tool에만 받아서 설치가 가능합니다. 

Android SDK 에서 Command line tool 설치
Android SDK download 사이트에서 command line tool만 설치 가능함

 

사용법

apkanalyzer 사용법은 아래와 같습니다. Global 옵션 항목을 -h 값 (human readable)을 설정하고 있고,  <Subject>는 apk, files, manifest, dex, resources 중 하나의 값을 지정해야 하며, <apk> 값에는 분석하고자 하는 apk의 파일명을 입력하면 됩니다. 

 

Usage:
apkanalyzer [global options] <subject> <verb> [options] <apk> [<apk2>]

 

 

사용 예제

Google Play APK 파일은 'Google Play Store_v20.9.10-all [0] [PR] 319853039_apkpure.com.apk' 입니다. Google Play 기준으로 설명합니다. 

 

$ apkanalyzer -h apk summary 'Google Play Store_v20.9.10-all [0] [PR] 319853039_apkpure.com.apk'

→ apk package name, version code

com.android.vending 82091000 20.9.10-all [0] [PR] 319853039

 

$ apkanalyzer -h apk features [abc.apk]

apk features [--not-required] apk-file APK에서 Play 스토어 필터링을 트리거하는 데 사용하는 기능을 출력합니다. --not-required 옵션을 추가하여 출력에 필요하지 않은 것으로 표시된 기능을 포함합니다.

android.hardware.screen.portrait implied: one or more activities have specified a portrait orientation
android.hardware.location implied: requested android.permission.ACCESS_COARSE_LOCATION permission, and requested android.permission.ACCESS_FINE_LOCATION permission
android.hardware.wifi implied: requested android.permission.ACCESS_WIFI_STATE permission
android.hardware.faketouch implied: default feature for all apps

 

$ apkanalyzer -h files list 'Google Play Store_v20.9.10-all [0] [PR] 319853039_apkpure.com.apk'

→ apk 내 포함된  모든 파일 list를 출력합니다.

 

$ apkanalyzer -h files cat 'Google Play Store_v20.9.10-all [0] [PR] 319853039_apkpure.com.apk' --file /AndroidManifest.xml

→ apk 내 /AndroidManifest.xml 을 cat 으로 출력

 

$ apkanalyzer -h dex list 'Google Play Store_v20.9.10-all [0] [PR] 319853039_apkpure.com.apk'
→ dex 파일 list 출력

classes5.dex
classes4.dex
classes3.dex
classes2.dex
classes.dex

 

$ apkanalyzer -h resources xml 'Google Play Store_v20.9.10-all [0] [PR] 319853039_apkpure.com.apk' --file AndroidManifest.xml

→ AndroidManifest.xml 파일 내용을 사람이 인지 가능한 내용으로 출력

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="82091000"
android:versionName="20.9.10-all [0] [PR] 319853039"
android:compileSdkVersion="30"
android:compileSdkVersionCodename="11"
package="com.android.vending"
platformBuildVersionCode="30"
platformBuildVersionName="11">

<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="29" />

 

 

관련 글

[모바일 SW 개발/Android] - Android 11 기능 소개

[모바일 SW 개발/Python] - 파이썬으로 Apk Download 자동화: Selenium기반의 Apk 크롤러

[모바일 SW 개발/Python] - [Tips] Python: XML Parsing 시 multiple elements on top level

[개발환경/우분투] - Ubuntu 동영상 플레이어: VLC Player 설치

[모바일 SW 개발/Android] - Ubuntu에서 Android 10 빌드하기

[모바일 SW 개발/Android] - Android Studio 4.0 사용하기

[모바일 SW 개발/Android] - Android 10 (Q-OS) 소스 다운로드




댓글