Android app PacKage의 약어로 Android 가상머신에서 실행되는 소프트웨어 배포용 패키지 파일이며 .apk 확장자를 사용한다.
JAR(Java Archive)에 기반한 zip 형태의 압축 파일이고, AndroidManifest.xml
, classes.dex
및 res/*
, assets/*
등으로 구성된다.
메타 데이터가 담겨있다.
An additional Android manifest file, describing the name, version, access rights, referenced library files for the application. This file may be in Android binary XML that can be converted into human-readable plaintext XML
개발자가 구현한 Java 코드를 컴파일하면 생성되는 클래스파일(.class) 및 사용된 라이브러리를 Android 가상머신(*Dalvik Virtual Machine)에서 실행되는 형태로 재구성한 바이트 코드이다.
* Dalvik Virtual Machine: 안드로이드에서 JVM대신 사용하는 가상머신이다.
먼저 apk를 jar로 변환시킨다.
변환된 jar 파일을 jd-gui로 디컴파일한다.
표시한 것처럼, apk의 main
코드는 MainActivity.class
의 onCreate
메소드에서 확인할 수 있다.
임의로 이름이 변경가능하기 때문에 위의 캡쳐화면처럼 HomeActivity.class
등으로 변경될 수 있다.
AndroidManifest.xml을 확인하기 위해 apktool을 이용하여 디컴파일 한다.
xml 파일을 보면 그 프로그램에서 정의한 액티비티를 확인할 수 있는데
<activity android:name="no.tghack.gaiainvaders.HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
코드에서 보이는 것처럼 LAUNCHER
속성을 가지고 있는 액티비티가 main
에 해당하는 액티비티이다.
https://www.popit.kr/how-to-decompile-an-android-apps/
: apk 설명 및 분석도구
https://en.wikipedia.org/wiki/Android_application_package
: apk 위키