Packaging for mobile distribution
While desktop creators typically work with loose folders inside their development directories, Android requires packaged archives for reliable importing. Before moving your files to a mobile device, compress your pack into a standard ZIP archive and change the file extension to match the content.
The way you structure the ZIP determines whether Minecraft can read it. For a single pack, select the contents of your pack folder—specifically the manifest.json file and its sibling directories—and compress them directly. Do not zip the parent folder itself, or the game will fail to locate the manifest at the root of the archive. For a combined add-on containing both a behavior pack and a resource pack, place the two individual .mcpack files (or their respective folders) into a single ZIP and rename the outer archive to .mcaddon.
| Extension | What it contains | Where Minecraft installs it |
|---|---|---|
| .mcpack | A single behavior pack or resource pack with manifest.json at the archive root. | behavior_packs or resource_packs |
| .mcaddon | One or more .mcpack files or pack folders bundled together. | Splits contents into behavior_packs and resource_packs |
| .mcworld | A complete world save folder, including level.dat and any embedded packs. | minecraftWorlds |
| .mctemplate | A world template with a world_template manifest and locked settings. | world_templates |
Importing via file association
The most reliable way to install an add-on on modern Android versions is through intent-based file association. Instead of manually copying folders into the game's storage directory, you tell an Android file manager to open the archive with Minecraft, and the game handles the extraction and placement internally.
First, transfer your .mcpack or .mcaddon file to the device's Downloads folder using a USB cable, cloud storage, or a local network transfer. Next, open a file manager app and tap the file. Many built-in Android file apps—including the default Google Files app on some devices—do not recognize custom Minecraft extensions and will either refuse to open the file or treat it as a generic ZIP archive.
If tapping the file does not immediately launch Minecraft, use a third-party file manager that supports explicit 'Open With' intents, such as Cx File Explorer, Solid Explorer, or ZArchiver. Select the file, choose the 'Open With' or 'View' option, and select Minecraft from the application list. If Android prompts you to choose between 'Just Once' and 'Always', select 'Always' so future builds of your add-on import with a single tap.
Once Minecraft launches, wait on the main menu for a few seconds. A toast banner will appear at the top of the screen reading 'Import started...', followed shortly by 'Successfully imported' and the name of your pack. If you imported an .mcaddon containing both a behavior pack and a resource pack, you will see two separate success notifications.
Validating the manifest for automatic import
When you open an archive with Minecraft on Android, the game does not know ahead of time whether you are importing a resource pack, a behavior pack, or a skin pack. It relies entirely on the modules array inside your manifest.json to route the extracted files to the correct internal folder. If your manifest is malformed, has a syntax error such as a trailing comma, or uses an invalid module type, the import will fail before the files ever reach the storage directory.
Additionally, if you are pushing rapid test builds to an Android device, you must consider how the importer handles UUIDs and version arrays. If a pack with the exact same header UUID and version number already exists on the device, the Android importer will reject the file as a duplicate rather than overwriting your old files. During active development, either delete the old pack from Settings > Storage inside Minecraft before importing a new build, or increment the patch number in the header version array.
{
"format_version": 2,
"header": {
"name": "pack.name",
"description": "pack.description",
"uuid": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"version": [1, 0, 0],
"min_engine_version": [1, 20, 0]
},
"modules": [
{
"type": "data",
"uuid": "f6e5d4c3-b2a1-4f5e-8d9c-0b1a2f3e4d5c",
"version": [1, 0, 0]
}
],
"dependencies": [
{
"uuid": "12345678-1234-4234-8234-123456789abc",
"version": [1, 0, 0]
}
]
}Direct folder installation and Scoped Storage
When you are iterating quickly on scripts, entities, or UI files, re-packaging an .mcpack and deleting the cached version in-game for every minor edit becomes tedious. Placing an unzipped pack directly into the development_behavior_packs and development_resource_packs folders allows you to overwrite individual JSON or script files without bumping the manifest version or clearing the game's storage cache.
Prior to late 2021, Minecraft stored its user data at /storage/emulated/0/games/com.mojang/. On Android 10 and newer, Google enforced Scoped Storage, which required Minecraft to migrate its files into an application-specific sandbox directory. The game now reads and writes all packs, worlds, and logs inside the Android/data tree.
Before Minecraft will write to or read from these directories, you must open the game, navigate to Settings > Profile, and change the File Storage Location dropdown from 'Application' to 'External'. If left on 'Application', the files are stored in the protected root partition where standard file managers and USB connections cannot reach them.
On Android 11, 12, and 13, Google restricted third-party apps from reading the Android/data folder directly, though some file managers bypass this by requesting permissions from the built-in system Files app. On Android 14 and newer, on-device access to Android/data is blocked even for advanced file managers. To copy loose development files on modern Android, connect the phone to a PC via USB in File Transfer (MTP) mode and browse to the com.mojang folder from your computer's file explorer, or push the files over the command line using Android Debug Bridge (adb push).
| Pack or Data Type | Android External Storage Path |
|---|---|
| Imported Behavior Packs | /storage/emulated/0/Android/data/com.mojang.minecraftpe/files/games/com.mojang/behavior_packs/ |
| Imported Resource Packs | /storage/emulated/0/Android/data/com.mojang.minecraftpe/files/games/com.mojang/resource_packs/ |
| Development Behavior Packs | /storage/emulated/0/Android/data/com.mojang.minecraftpe/files/games/com.mojang/development_behavior_packs/ |
| Development Resource Packs | /storage/emulated/0/Android/data/com.mojang.minecraftpe/files/games/com.mojang/development_resource_packs/ |
| World Saves | /storage/emulated/0/Android/data/com.mojang.minecraftpe/files/games/com.mojang/minecraftWorlds/ |
Activating the add-on in a world
Importing the pack or copying it into the development folder only registers it in the game's global storage pool; it does not affect gameplay until you attach it to a specific world. From the main menu, tap Play, then tap the pencil icon next to your test world (or create a new world). Scroll down the left sidebar to the Add-Ons section.
Tap Behavior Packs, switch to the 'My Packs' tab, select your add-on, and tap Activate. A warning dialog will inform you that achievements will be disabled for the world; confirm to proceed. If your manifest includes a dependency array linking the behavior pack's header UUID to the resource pack's header UUID, activating the behavior pack will automatically activate the resource pack as well. If you did not define a dependency, you must manually go to the Resource Packs tab and activate the companion pack.
While you are still in the world settings, scroll up to the Creator section and enable both 'Enable Content Log File' and 'Enable Content Log GUI'. Because Android does not have a native console window, the on-screen Content Log GUI is your primary tool for reading JSON parse errors, missing texture warnings, and script exceptions directly on the device.
Which versions this applies to
Applies to all modern Bedrock versions (1.18 and newer, when the Android Scoped Storage migration to Android/data was finalized). No experimental toggles are required to install add-ons, though your specific pack may require them once activated in a world.
When it does not work
| What you see | Why | The fix |
|---|---|---|
| Toast notification says 'Failed to import [Pack Name]. Duplicate pack detected.' | A pack with the exact same header UUID and version number is already installed in your behavior_packs, resource_packs, or development folders. | Open Minecraft Settings > Storage, expand Behavior Packs or Resource Packs, tap the existing version of your pack, and delete it. Alternatively, bump the version array in your manifest.json (for example, from [1, 0, 0] to [1, 0, 1]) before packaging. |
| Toast notification says 'Failed to import [Pack Name]. Not a valid zip archive.' or 'Unknown pack name'. | You compressed the parent folder containing your pack rather than the contents of the pack itself, putting manifest.json one directory level too deep. This also happens if you used RAR or 7z compression and simply renamed the file extension to .mcpack. | Extract the archive, select manifest.json and its sibling folders directly, and compress them using standard ZIP compression before renaming the extension to .mcpack. |
| Tapping the .mcpack file in the phone's Downloads list says 'Can't open file' or opens an archive viewer instead of launching Minecraft. | The built-in Android Files app or browser download manager does not register custom file extensions like .mcpack or .mcaddon with Minecraft's launch intent. | Install a third-party file manager such as Cx File Explorer or ZArchiver, navigate to the Downloads folder, tap the file, and explicitly select Minecraft from the 'Open With' menu. |
| The com.mojang.minecraftpe folder is completely missing from Android/data when browsing over USB. | Minecraft defaults to 'Application' storage on a fresh install, keeping all game directories hidden inside internal root storage until changed. | In Minecraft, go to Settings > Profile, change File Storage Location from 'Application' to 'External', and create at least one world or restart the app so the game initializes the external folder tree. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
