How to Open an APK File Without Installing It [2026]
Most people think opening an APK requires an Android phone or a special app. It does not. An APK is a ZIP file with a different extension β and you can unzip it in your browser, inspect every file inside, and download what you need, all without touching an Android device or uploading the file anywhere.

Table of Contents
An APK is just a ZIP: the key insight that unlocks everything
APK stands for Android Package Kit. Android's package installer reads APK files when you install an app on your phone. But what the installer actually receives is a ZIP archive β the .apk extension is a naming convention, not a fundamentally different file format.
You can verify this yourself right now: take any .apk file, rename it to .zip, and open it with your operating system's built-in ZIP handler. On Windows, double-click to open in Explorer. On macOS, double-click to extract with Archive Utility. You will see the full folder structure inside β classes.dex, res/, assets/, AndroidManifest.xml, META-INF/ β exactly as if you had used a dedicated tool.
This is not a hack or an undocumented feature. Google publicly documented the APK format as a ZIP archive. The choice was deliberate: ZIP is an open, patent-free standard with tooling in every programming language and operating system. Building Android's package format on top of ZIP meant developers could use existing ZIP tools to inspect, build, and debug APKs without proprietary utilities.
The same principle applies in the browser: JSZip β which reads ZIP archives in JavaScript β can open an APK file just as well as any .zip. That is exactly what the SammaPix APK Extractor does. No special APK-parsing code required. The file never needs to leave your device.
The ZIP magic bytes: how tools identify the format
File format identification does not rely on extensions alone. ZIP archives always start with the bytes 50 4B 03 04 (hex), which spell "PK" β the initials of Phil Katz, who invented the ZIP format. If you open an APK in a hex editor, you will see exactly those bytes at offset 0. This is why 7-Zip, WinRAR, and other archive tools can open APKs without any APK-specific support: they detect the ZIP signature and proceed normally. A file's extension is for the OS; a file's magic bytes are the real format fingerprint.
What you can read directly and what requires a decompiler
Not every file inside an APK is immediately human-readable after extraction. Google chose to compile many resource files to binary formats at build time for performance. Here is an honest breakdown:
| File / folder | Readable after extraction? | Notes |
|---|---|---|
| res/drawable/*.png, *.webp | Yes, directly. | Image files are stored raw. Open with any image viewer after download. |
| assets/ (fonts, HTML, JSON, SQLite) | Yes, directly. | Raw files, never compiled. Fonts, HTML/JS/CSS, JSON config, SQLite databases open as-is. |
| META-INF/MANIFEST.MF, CERT.SF | Yes, plain text. | Lists all files with their SHA digests. Readable in any text editor. |
| AndroidManifest.xml | Binary AXML β not plain XML. | Requires apktool or an AXML decoder. Permission strings may be partially visible in hex. |
| res/layout/*.xml | Binary AXML β not plain XML. | Compiled like the manifest. Requires apktool to decode to plain XML. |
| resources.arsc | Binary compiled resource table. | Maps resource IDs to values. Readable with aapt2 or apktool decode. |
| classes.dex, classes2.dex | Binary bytecode β not Java source. | Requires jadx or BytecodeViewer to decompile to approximate Java source code. |
| lib/*.so | Binary ELF native library. | Requires a disassembler (Ghidra, IDA Pro) to analyse native code. |
The practical takeaway: if you need images, fonts, bundled HTML/JS, SQLite databases, or signing metadata β the browser extractor is all you need. If you need to read the app logic from source or decode the manifest to human-readable XML β add apktool or jadx to your workflow.
A practical guide to every folder and file inside an APK
When you open an APK with the browser tool, the file list can look overwhelming. Here is what each entry is and why it matters:
AndroidManifest.xml β the entry point
This is the first file to look at when inspecting an APK. Even in binary form, it declares the app's package name, version, and permissions. A permission like android.permission.ACCESS_FINE_LOCATION or android.permission.READ_CONTACTS will often be partially visible as a string in the binary, even without full decoding. For a fully structured read, use apktool to decode the AXML to plain XML.
classes.dex β the compiled app logic
The .dex file is the heart of the app. All the Java and Kotlin code the developer wrote was compiled, optimised, and translated into Dalvik bytecode stored here. Larger apps have multiple .dex files (classes.dex, classes2.dex, classes3.dex...) due to the 64k method limit per dex file, a constraint called multidex. This file is binary. You cannot read it directly. Decompiling it with jadx converts it to approximate Java source code β useful for security research or understanding an app's behaviour, but that is a separate workflow.
res/ β compiled app resources
The res/ folder contains resources generated by the Android build tools. Image files (PNG, WebP, JPEG) inside res/drawable/ and res/mipmap/ are stored as raw images and open in any viewer. XML files β layouts in res/layout/, animators, drawables defined in XML β are compiled to binary AXML and require a decoder to read as text. The resources.arsc file at the APK root is the compiled resource table mapping resource IDs to their actual values.
assets/ β raw bundled content
This is the most accessible folder for inspection. Files in assets/ are never compiled β they are copied verbatim from the developer's project into the APK. Common finds: TTF and OTF font files, HTML/CSS/JS bundles for WebView-based screens, JSON configuration files (API endpoints, feature flags), SQLite database schema files (.db, .sqlite), certificate files (.pem, .crt), and game data (maps, levels, audio). If you are a developer looking to understand how a competitor structured their app's bundled web content, this is where to look.
lib/ β native CPU architecture libraries
Apps using the Android NDK (C/C++ native code) ship compiled .so (shared object) files in lib/, organised by architecture. lib/arm64-v8a/ contains 64-bit ARM libraries (modern Android phones). lib/x86_64/ contains 64-bit x86 libraries (often used in emulators). These are ELF binaries. The presence of multiple architectures means the APK is universally compatible. A game-heavy APK may have large .so files here for its native rendering engine.
META-INF/ β signing and integrity metadata
The META-INF/ folder is what makes an APK trustworthy. It contains MANIFEST.MF (a list of every file in the APK and its SHA-1 or SHA-256 hash), CERT.SF (the signed version of the manifest), and CERT.RSA (the developer's signing certificate). Android verifies these signatures during installation to confirm the APK has not been tampered with. MANIFEST.MF and CERT.SF are plain text β you can open them in a text editor and read the file list and hash values directly.
Browse inside your APK right now
JSZip reads the archive locally. Browse AndroidManifest.xml, res/, assets/, META-INF/. Download individual files or grab everything as a ZIP. No upload, no Android required, no signup. Free.
Open APK Extractor, FreeHow to open an APK file online, step by step
The full process takes under a minute for most APK files:
- Go to sammapix.com/tools/apk-extractor in Chrome, Safari, Firefox, or Edge. No account required.
- Drop your .apk or .xapk file onto the dropzone or click to browse for it. The file is read locally by the File API β nothing leaves your device.
- Browse the file list. JSZip reads the archive and shows you every file inside β folder structure, names, and sizes. Identify the files you need: images in res/mipmap/ for the icon, fonts in assets/, or signing metadata in META-INF/.
- Download what you need. Click any file to download it individually. For images and assets, they open directly in your browser or image viewer. For binary files like classes.dex, the raw bytes download β you will need additional tools to process them further.
- Or download everything as ZIP. Use the Download All as ZIP button to get the entire APK contents in a single archive with the original folder structure preserved.
Typical use cases for this workflow: extracting icon images (res/mipmap/ic_launcher.png) for documentation, pulling bundled font files from assets/, checking which split APKs are included in an XAPK, inspecting META-INF/MANIFEST.MF to verify file integrity, or confirming a specific file was included in a release build before distribution.
Privacy and security: why opening an APK without installing matters
Installing an unknown APK on an Android device carries real risk. Android's permission system contains the damage once an app is installed β but a malicious app installed from an unknown source can still send data to remote servers, read storage, or exploit vulnerabilities before you notice.
Inspecting an APK before installing it lets you do a preliminary check without any execution risk:
- Check the permissions. Even in binary AXML, permission strings are often partially visible. Look for
android.permission.SEND_SMS,android.permission.READ_CONTACTS, orandroid.permission.ACCESS_FINE_LOCATIONin a hex viewer or via apktool decode. Permissions that do not match the app's stated purpose are a red flag. - Inspect assets/ for hardcoded endpoints. JSON config files or plain-text files in assets/ may contain API base URLs or server addresses. If an app claims to be a simple calculator but its assets/ contains references to a remote API collecting device data, that is worth investigating before installing.
- Verify the signing certificate in META-INF/. CERT.RSA contains the developer's signing certificate. Tools like
keytool -printcert -file CERT.RSAdisplay the certificate's subject, issuer, and validity period. An APK claiming to be from a major company but signed with an unknown certificate is suspicious. - Confirm the package name matches expectations. The binary AndroidManifest.xml contains the package name (e.g.
com.google.android.apps.maps) as a readable string. A fake APK mimicking a legitimate app may use a slightly different package name.
Opening the APK in a browser tool carries zero execution risk: JSZip reads the archive structure and presents you with file names. Nothing in the APK runs. This is a passive inspection, not an installation.
All the ways to open an APK: honest comparison
Here is an objective look at every approach to opening an APK and what each is suited for:
| Method | Install required | Readable manifest | Decompiles bytecode |
|---|---|---|---|
| SammaPix APK Extractor (browser) | No | Binary only (strings partially visible) | No |
| Rename to .zip + OS extractor | No (extension rename only) | Binary only | No |
| 7-Zip or WinRAR (desktop) | Yes | Binary only | No |
| apktool (desktop, open source) | Yes (Java required) | Yes β decodes AXML to plain XML | No (Smali disassembly only) |
| jadx (desktop, open source) | Yes (Java required) | Yes | Yes β decompiles .dex to Java source |
For most people β developers checking their own builds, designers extracting icon assets, or users doing a quick pre-install inspection β the browser-based approach covers everything needed. For security researchers or reverse engineers who need source-level insight, jadx is the tool to reach for after the initial inspection.
How to verify no upload happens
You do not need to trust my word. Here is how to verify this yourself in under two minutes using your browser's built-in developer tools:
- Open DevTools. Press F12 (Windows/Linux) or Command Option I (Mac). On Safari, enable the Develop menu first via Settings β Advanced.
- Click the Network tab. Clear any existing requests by clicking the clear button. Enable "Preserve log" to ensure no requests are hidden during processing.
- Drop your APK file and wait for the file list to appear. Watch the Network panel during the entire process.
- Observe: zero outgoing file requests. The only requests you will see are the initial page load assets (JavaScript, CSS). No request carries your APK data to any server. Your file stays entirely in browser memory.
This is the same verification method privacy researchers use to audit tools claiming to be client-side. If your file was being uploaded, you would see a POST or PUT request in the Network panel carrying its bytes. You will see none.
Your APK file stays on your device
No upload, no account, no server. JSZip reads the archive locally. Browse files, download individually or as ZIP. Verify with DevTools. Free.
Other archive tools that run in your browser
SammaPix offers a full suite of browser-based archive tools, all with no upload and no server processing:
- APK Extractor: open .apk and .xapk files in your browser. JSZip reads the ZIP-based archive locally. Browse, inspect, and download contents. The tool covered in this article.
- Unrar: extract the contents of a RAR archive directly in the browser. Preview file list, download individual files or grab everything as a ZIP. Powered by libarchive.wasm.
- Open 7Z: extract 7-Zip archives in your browser. Same libarchive.wasm engine, no upload. Useful when you receive a .7z file and do not have 7-Zip installed.
- RAR to ZIP: convert a RAR archive to a universally compatible ZIP, entirely in your browser. libarchive.wasm extracts, JSZip repackages.
- Minecraft Extractor: open .mcpack, .mcworld, and .mctemplate files β all ZIP-based, all handled in browser memory. Like APK files, Minecraft packs are just ZIPs with custom extensions.
All your archive needs, all in-browser
Open APK, extract RAR, open 7Z, convert RAR to ZIP, open Minecraft packs β without uploading files anywhere. All tools run locally in your browser. No server. No signup. No watermark.
FAQ
Is an APK file really just a ZIP?
Yes, completely. An APK (Android Package Kit) is a standard ZIP archive with an .apk file extension. If you rename any APK to .zip and open it with Windows Explorer, macOS Archive Utility, or any ZIP reader, it opens without error β because the internal format is identical. Google chose ZIP as the container format because it is open, universally supported, and well-tested. The .apk extension is just a naming convention that tells Android's package installer how to handle the file.
Can I read AndroidManifest.xml from an APK as plain text?
Not directly from an extracted APK. Inside the APK, AndroidManifest.xml is stored in a compiled binary format called AXML (Android Binary XML). This is not human-readable plain text β it is an optimised binary encoding that Android's runtime parses efficiently. If you extract the file and open it in a text editor, you will see mostly binary data. To read it as plain-text XML, you need a tool like apktool (apktool d myapp.apk) or jadx, which decode the AXML format back to readable XML. The SammaPix APK Extractor gives you the raw binary file β readable decoding requires a dedicated desktop decoder.
How can I view an APK's permissions without an Android device?
There are two approaches. The faster browser-based approach: open the APK with the SammaPix APK Extractor, download AndroidManifest.xml, and open it in a hex editor or AXML decoder β you can usually spot permission strings like android.permission.CAMERA or android.permission.ACCESS_FINE_LOCATION in the binary, even without full decoding. The more reliable approach: use apktool on your desktop (apktool d myapp.apk) which decodes the binary manifest to plain-text XML and lists every declared permission clearly in the decoded AndroidManifest.xml output.
What is the difference between res/ and assets/ in an APK?
Both folders ship files with the app, but they serve different purposes. res/ contains compiled resources β images, layouts, drawables, and strings that are referenced by resource IDs in the code (like R.drawable.icon or R.string.app_name). The XML files in res/ are compiled to binary AXML inside the APK. PNG and WebP images in res/drawable/ remain as image files and are directly downloadable. assets/ contains raw files that the app accesses by file path at runtime β fonts, local HTML/JS for WebViews, SQLite database templates, JSON configs, game data. Files in assets/ are stored exactly as-is and are immediately readable after extraction. If you want fonts or bundled web content, look in assets/.
Is my APK file uploaded when I use the browser tool?
No. The file stays entirely in your browser's memory. JSZip processes the APK archive using the browser's File API β the raw bytes go from your filesystem into JavaScript memory without touching the network. You can verify this yourself: open DevTools (F12), go to the Network tab, drop your APK into the tool, and watch the panel. You will see no outgoing POST or PUT requests carrying file data. The only network activity is the initial page load.
What are split APKs and how do they differ from a regular APK?
A split APK is part of a larger app delivery system called Android App Bundles (AAB). Instead of one monolithic APK containing resources for all device configurations, Android's Dynamic Delivery generates a base APK plus optional split APKs β separate packages for specific screen densities (hdpi, xhdpi, xxhdpi), CPU architectures (arm64, x86), and language packs. The base.apk contains the core app logic. Split APKs contain only the configuration-specific resources. When you download from the Play Store, you typically receive only the splits relevant to your device. If you download an XAPK from APKPure, you get all splits bundled into one XAPK archive.
Is this tool affiliated with Google or Android?
No. This is an independent browser tool that reads ZIP archives, including files with the .apk and .xapk extensions. Android is a trademark of Google LLC. The APK format is the file format specification published by Google for the Android operating system. This tool is not affiliated with, endorsed by, or connected to Google or Android in any way. It is built and maintained by Luca Sammarco independently of Google.