Android의 프로그램 파일은 APK 형식이며, APK 파일은 Android 최종 실행 프로그램으로, Android Package의 약자입니다. 이는 Symbian 운영 체제의 sis 파일이나 J2ME 플랫폼의 JAR 파일과 유사합니다. APK 파일은 사실 ZIP 파일 형식이지만, 확장자가 APK로 변경되어 있습니다. RAR로 압축을 풀면 Dex 파일을 볼 수 있는데, Dex는 Dalvik VM executes의 약자로, 즉 Android Dalvik 실행 프로그램을 의미하며, Java 바이트코드가 아니라 Dalvik 바이트코드입니다.
하나의 APK 파일 구조는 다음과 같습니다:
- res/ : 리소스 파일을 저장하는 디렉토리
- META-INF/ : Jar 파일에서 자주 볼 수 있는 디렉토리
- resources.arsc : 컴파일된 이진 리소스 파일로, 주로 프로그램에서 사용되는 문자열 포함
- AndroidManifest.xml : 프로그램 전역 구성 파일
- classes.dex : Dalvik 바이트코드 파일로, 우리가 작성한 JAVA 파일이 DEX 형식의 바이트코드로 컴파일된 것입니다.
정리하면, Android는 프로그램을 실행할 때 먼저 UnZip을 수행하며, Symbian과 비슷하게 직접 실행되지만 Windows Mobile의 PE 파일과는 다릅니다. 이렇게 하는 것은 프로그램의 보안성과 신뢰성이 매우 높지 않지만, dexdump 명령을 통해 디컴파일할 수 있습니다. 이런 방식은 발전 과정에 부합하며, Microsoft의 Windows Gadgets 또는 WPF도 이러한 구조를 채택했습니다.
1. Java 파일 - 애플리케이션 소스 파일
이는 Android를 언급할 때 흔히 들을 수 있는 파일로, Android 자체의 상당 부분이 Java로 작성되어 있습니다(기본적으로 아키텍처 도면에서 파란색 부분이 모두 Java로 개발된 부분입니다). Android 앱은 반드시 Java로 개발해야 합니다.
2. Class 파일 - Java 컴파일 후의 목적 파일
일반적으로 사용하는 J2SE와 달리, Java를 클래스 파일로 컴파일하면 바로 실행할 수 있지만, Android 플랫폼에서는 클래스 파일이 직접 실행되지 않습니다. Google이 자체 Dalvik을 사용하여 앱을 실행하기 때문에, 여기의 클래스 파일도 Sun의 Java 환경에서는 실행될 수 없습니다. 개인적으로 Android의 클래스 파일은 사실 컴파일 과정의 중간 목표 파일이며, Dalvik에서 실행하려면 DEX 파일로 링크해야 합니다.3. Dex 파일-----Android 플랫폼에서의 실행 파일 Android 가상 머신 Dalvik이 지원하는 바이트코드 파일 형식 Google은 새로 발표한 Android 플랫폼에서 자체 Dalvik 가상 머신을 사용하여 정의했으며, 이 가상 머신이 실행하는 것은 Java 바이트코드가 아니라 또 다른 바이트코드인 dex 형식 바이트코드입니다. Java 코드를 컴파일한 후, Android 플랫폼의 도구를 통해 Java 바이트코드를 Dex 바이트코드로 변환할 수 있습니다. Google은 Dalvik이 모바일 기기에 맞게 제작되었다고 하지만, 업계에서는 많은 사람들이 이것이 Sun에 Java 라이선스를 신청하지 않기 위한 것이라고 생각합니다. 세부 내용이 많이 공개되지 않았기 때문에 현재 Dalvik의 구체적인 구현은 찾을 수 없으며, SDK를 기반으로 간단한 분석 작업만 할 수 있습니다. 이 Dalvik VM은 휴대폰 프로그램/CPU에 대해 최적화되어 여러 VM을 동시에 실행해도 많은 리소스를 차지하지 않습니다. Dalvik VM 소스는 현재 다운로드할 수 있도록 공개되지 않았으며(미래에는 전체 시스템이 공개될 예정), 현재 Google의 관점은 모두가 이 SDK를 사용해 앱 개발을 시작하도록 하고, 하위 레벨의 것은 천천히 공개하려는 것입니다. 4. Apk 파일-------Android의 설치 파일 Apk는 Android 설치 패키지의 확장자이며, 하나의 Android 설치 패키지는 특정 Android 애플리케이션과 관련된 모든 파일을 포함합니다. apk 파일은 AndroidManifest.xml 파일, 애플리케이션 코드(.dex 파일), 리소스 파일 및 기타 파일을 하나의 압축 파일로 묶습니다. 하나의 프로젝트는 하나의 .apk 파일만 만들 수 있습니다. 어떻게 크랙할지는 개인에게 달려 있습니다.