APK Structure
An APK (Android Package Kit) is the package format used to distribute and install Android applications. It is essentially a ZIP archive containing everything required for an app to run, including compiled code, resources, assets, native libraries, and configuration files.
Android applications are typically written in Java or Kotlin. During compilation, the source code is converted into DEX (Dalvik Executable) bytecode, which is executed by Android Runtime (ART) or the older Dalvik VM.
APK files can be extracted using tools such as unzip to inspect their contents.
$ unzip myapp.apk
$ ls -l
total 27584
-rw-r--r-- 1 Rezy Rezy 4220 Jan 1 1981 AndroidManifest.xml
drwxr-xr-x 49 Rezy Rezy 1568 May 10 13:36 META-INF
drwxr-xr-x 3 Rezy Rezy 96 May 10 13:36 assets
-rw-r--r-- 1 Rezy Rezy 8285624 Jan 1 1981 classes.dex
drwxr-xr-x 9 Rezy Rezy 288 May 10 13:36 kotlin
drwxr-xr-x 6 Rezy Rezy 192 May 10 13:36 lib
drwxr-xr-x 545 Rezy Rezy 17440 May 10 13:36 res
-rw-r--r-- 1 Rezy Rezy 922940 Jan 1 1981 resources.arsc
The files extracted from the APK are encoded, and neither the source code nor the configuration files are human-readable. If we check it's content (eg: vim AndroidManifest.xml):

The image below shows the unzipped structure of an APK file:
