Wiki 9Minecraft Wiki 9Minecraft

Project Setup on Android

Configuring file access, directory paths, and workspace tools to build Bedrock add-ons directly on an Android device.

6Sections
3Code examples
4Known errors

Building Minecraft Bedrock add-ons directly on an Android phone or tablet is entirely possible because the mobile client uses the exact same JSON engine and folder structure as the Windows edition. The primary challenge on mobile is navigating Android's strict scoped storage permissions, which lock the game's internal files away from standard apps. This guide walks through unlocking that directory access, locating the development folders, and constructing your first linked behavior and resource pack pair.

Storage Permissions and Scoped Storage

Before you create any files, you must configure Minecraft to store its data in a public directory rather than its isolated internal app memory. Open Minecraft, go to Settings, select the Profile tab (or Storage on newer UI layouts), and change the File Storage Location dropdown from Application to External. If you leave this set to Application, your add-on files will be stored inside the root data partition, which is completely invisible to non-rooted Android devices.

Starting with Android 11, Google introduced Scoped Storage, which restricts standard file managers from viewing or modifying the Android/data/ directory where Minecraft places its external files. On Android 13 and 14, these restrictions became even tighter. To bypass this legally without rooting your device, you either need a third-party file manager that invokes the hidden system DocumentsUI app (such as Marc Files or ZArchiver), or you can use the Shizuku service combined with a compatible file manager to grant elevated ADB-level folder access directly on the device.

Along with a capable file manager, you will need a plain text or code editor that supports syntax highlighting and UTF-8 encoding without adding hidden formatting characters. Apps like Acode, QuickEdit, or Squircle CE are reliable choices. Avoid using word processors or standard note-taking apps, as they automatically convert straight quotation marks into curved 'smart quotes', which immediately breaks JSON parsing.

The com.mojang Directory Structure

Once you have configured External storage and opened a file manager capable of reading app data, navigate to your device's primary shared storage and follow this exact path: Android/data/com.mojang.minecraftpe/files/games/com.mojang/. If you just switched your storage setting to External and do not see these folders yet, launch Minecraft, create one blank world so the game initializes the file tree, and close the app.

Inside the com.mojang folder, you will see several directories that handle different parts of the game's assets. For add-on creation, you must always place your working files inside the development folders rather than the standard installed pack folders. The game checks the development folders for changes every time you load a world, meaning you can edit a JSON file, save it, and reload your world to see the results immediately without re-importing anything.

Folder NameWhat it doesNotes
development_behavior_packsHolds uncompiled behavior packs you are actively editing.Changes here reload automatically when you exit and re-enter a world.
development_resource_packsHolds uncompiled resource packs you are actively editing.Used for textures, models, sounds, and UI files during testing.
behavior_packsStores imported .mcpack and .mcaddon behavior files.Managed by the game cache; do not edit projects directly inside this folder.
resource_packsStores imported .mcpack and .mcaddon resource files.Files here can be overwritten or deleted if you clear game storage data.
minecraftWorldsContains individual folders for each local world save.Folder names use randomized base64 strings; look inside at levelname.txt to identify a specific world.

Working Around Restricted Folder Access

If a recent Android security update completely blocks your code editor from saving files directly inside the Android/data/ folder, you can still build add-ons using an external workspace workflow. Instead of fighting system permissions on every save, create a dedicated workspace folder in your main Documents or Download directory, where all apps have unrestricted read and write access.

Build your behavior pack and resource pack folders inside this public workspace. When you are ready to test your work in-game, select the contents of your behavior pack folder (making sure to select the manifest.json and subfolders directly, not the parent folder containing them) and compress them into a standard ZIP archive. Rename the file extension from .zip to .mcpack.

Tap the newly renamed .mcpack file in your file manager and select Minecraft as the target application to open it. Minecraft will launch automatically and import the files into its internal storage on your behalf. While this requires re-importing when you make changes, it completely sidesteps Android's folder lockouts and works on every OS version.

Creating the Behavior Pack Manifest

Every add-on begins with a manifest.json file located at the root of the pack folder. Using your file manager, navigate to development_behavior_packs and create a new folder named my_first_bp. Inside that folder, create an empty text file named manifest.json. This file tells Minecraft that the folder is a valid pack, defines its name, and assigns it a unique identity.

Notice the uuid fields in the code below. A UUID (Universally Unique Identifier) is a 36-character alphanumeric string that acts as a permanent serial number for your pack. You must never reuse a UUID from another pack, nor can you use the same UUID for both the header and the modules section in the same file. Since you are working on Android, use a free UUID generator app or a web tool in your mobile browser to generate version 4 UUIDs, and replace the example strings below with your own.

BP/manifest.json
{
  "format_version": 2,
  "header": {
    "name": "My Mobile Behavior Pack",
    "description": "Behavior pack created on Android",
    "uuid": "d8b35a12-47c6-4190-8122-395f861d80a1",
    "version": [1, 0, 0],
    "min_engine_version": [1, 20, 80]
  },
  "modules": [
    {
      "description": "Behavior Data Module",
      "type": "data",
      "uuid": "74c89e20-62b1-483e-9a4b-112c38f901b2",
      "version": [1, 0, 0]
    }
  ],
  "dependencies": [
    {
      "uuid": "a1904b3c-89d2-461e-b234-98123f456a78",
      "version": [1, 0, 0]
    }
  ]
}

Creating the Resource Pack Manifest

Next, navigate back to com.mojang, open the development_resource_packs folder, and create a new folder named my_first_rp. Create another manifest.json file inside this directory. The structure is nearly identical to the behavior pack, except the module type is changed from data to resources so the game knows to look for textures, models, and sounds here.

Notice how the header uuid in this resource pack matches the uuid listed inside the dependencies array of the behavior pack from the previous step. Linking the two packs via the dependencies block ensures that whenever you apply the behavior pack to a world, Minecraft automatically activates the matching resource pack alongside it, preventing missing purple-and-black textures.

RP/manifest.json
{
  "format_version": 2,
  "header": {
    "name": "My Mobile Resource Pack",
    "description": "Resource pack created on Android",
    "uuid": "a1904b3c-89d2-461e-b234-98123f456a78",
    "version": [1, 0, 0],
    "min_engine_version": [1, 20, 80]
  },
  "modules": [
    {
      "description": "Resource Asset Module",
      "type": "resources",
      "uuid": "55e12c34-90a1-423b-8c7d-67890e123f45",
      "version": [1, 0, 0]
    }
  ]
}

Adding a Test Block and Enabling Content Logs

Because Android does not have an external console window to display system errors, you must turn on Minecraft's built-in debugging tools. Launch the game, open Settings, and scroll down to the Creator tab. Enable both Enable Content Log File and Enable Content Log GUI. Whenever you load a world with a broken JSON file, a banner will immediately appear at the top of your screen explaining which file failed to parse and what line number contains the mistake. You can also view the complete error history at any time from the pause menu.

To verify your Android workspace is functioning properly, create a subfolders named blocks inside your my_first_bp directory, and save the following JSON file inside it. Once saved, open Minecraft, create a new Creative world, scroll down to Behavior Packs on the left sidebar, and activate your pack from the Available tab. Load the world and run the command /give @s custom:test_slate in chat. You should receive a functional block in your inventory.

BP/blocks/test_slate.json
{
  "format_version": "1.20.80",
  "minecraft:block": {
    "description": {
      "identifier": "custom:test_slate"
    },
    "components": {
      "minecraft:destructible_by_mining": {
        "seconds_to_destroy": 1.5
      },
      "minecraft:destructible_by_explosion": {
        "explosion_resistance": 6.0
      },
      "minecraft:map_color": "#4a4a52"
    }
  }
}

Which versions this applies to

Applies to all modern Bedrock versions on Android (1.16.100+). The sample block uses format_version 1.20.80 and stable components; no experimental toggles are required to set up a workspace or run the example code.

When it does not work

What you seeWhyThe fix
The pack never appears in the Available tab under Behavior Packs or Resource Packs when creating a world.Your File Storage Location is still set to Application, your manifest.json has a syntax error (like a missing comma or curved quotes from a mobile keyboard), or you accidentally placed the manifest inside an extra nested subfolder.Confirm Settings > Profile > File Storage Location is set to External. Ensure your folder path is directly development_behavior_packs/your_pack_name/manifest.json. Check the Content Log in Settings > Creator for JSON parsing errors.
Failed to import... 'Duplicate pack detected' when opening an .mcpack file.A pack with the exact same header or module UUID already exists in your behavior_packs or development_behavior_packs folder.Delete the older version of the pack from Settings > Storage before importing the new .mcpack, or increment the version array in manifest.json (for example, from [1, 0, 0] to [1, 0, 1]) so the game treats it as an update.
The file manager shows the Android/data/ folder as completely empty or displays 'Access Denied'.Android 11 through 14 Scoped Storage policies block standard apps from reading the data directory without elevated permissions.Use a file manager that bridges to the native Android system file picker, set up Shizuku to grant ADB-level folder access, or build your pack in your public Documents folder and import it via .mcpack files.
Content Log shows: [Json] Failed to parse file 'manifest.json' - syntax error at line 3.Mobile keyboards frequently insert typographic 'smart quotes' (“ ”) or hidden zero-width spaces when auto-correct is active.Open the file in a dedicated code editor like Acode or QuickEdit, turn off keyboard auto-correction, and replace all curved quotation marks with standard straight ASCII double quotes (").

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.