> For the complete documentation index, see [llms.txt](https://docs.buildnatively.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.buildnatively.com/natively-platform/app-info/android-build.md).

# Android App

## Bundle Identifier

{% hint style="warning" %}
The Bundle Identifier is a unique identifier for your app. Once set, it can only be changed if your app or developer account is suspended.
{% endhint %}

### Generate Bundle ID

The simplest option - Natively automatically generates a valid, unique Bundle Identifier for your app.&#x20;

### Create Own Bundle ID

On Android, the Bundle Identifier is called a **Package Name**. It's the unique ID that identifies your app across the entire Google Play Store, and it follows a Reverse-DNS format based on a domain you control - for example `com.yourcompany.appname`. Once you publish your app with a given Package Name, you can never change it, so it's worth getting right from the start.

Google Play enforces a strict set of rules for Package Names. If your Package Name doesn't follow these, your build will fail validation:

* Must follow the Reverse-DNS convention (e.g., `com.yourcompany.appname`).
* Must contain at least two segments separated by a period.
* Can only contain letters, numbers, underscores (\_), and periods (.) - no hyphens and no spaces.
* Each segment must start with a letter, not a number.
* No Hyphens: Android Package Names cannot contain hyphens (`-`).
* Avoid using reserved Java keywords like `abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while`.
* Must be globally unique across the Google Play Store - if someone else has already published `com.myapp.test`, you can't use it.

#### **Checking if a Package Name is available**

Before settling on a Package Name, check whether it's already taken by visiting:

`https://play.google.com/store/apps/details?id=YOUR_PACKAGE_NAME`

If the page shows "not found," the name is likely available. If an app page loads - even for an old or unrelated app - that name is taken, and you'll need to choose another.

Once you've decided on a Package Name, enter it in the **Bundle Identifier** field under **Publish > Android Build** in the Natively Dashboard.

<figure><img src="/files/pYWBvyKB5XOu3anYoPxj" alt=""><figcaption></figcaption></figure>

## Google Play Console requirements

Before you create your app listing in Google Play Console, it's worth understanding how Google Play handles package names - this will help you avoid issues later when you're ready to publish.

#### Package names are permanent

Once you upload your first build to Google Play Console under a given package name, that name is locked to your app forever. Package names can't be deleted or reused in the future, so choose carefully. If you need to change it later, you'd have to publish as a new app with a new listing - you can't reuse or migrate the package name.

#### Package names must be globally unique

Your app's package name must be unique across all of Google Play, not just within your own developer account - if another app already uses the package name you chose, you'll need to recompile with a different one.

#### First upload matters

Google Play Console creates the app listing for your package name based on your first uploaded build. Make sure the package name you set in Natively matches the one you intend to use for your Play Console listing before generating your build.
