> ## Documentation Index
> Fetch the complete documentation index at: https://moengage-unity-sdk-initialization-split.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Android

> Manually initialize the MoEngage SDK in your Unity project's Android Application class.

## Enable Custom Manifest File

Navigate to Build Settings and switch the platform to Android. Then go to **Player Settings --> Player --> Android --> Publishing Settings**.\
Under the Build Heading check **Custom Main Manifest**.

<Frame>
  <img src="https://mintcdn.com/moengage-unity-sdk-initialization-split/4ns8q6FZm-M1NjgJ/images/Unity-Custom-Main-Manifest.png?fit=max&auto=format&n=4ns8q6FZm-M1NjgJ&q=85&s=06d5d335fa2d99fafa41246f6e7d1b4c" alt="Unity Custom Main Manifest" width="2266" height="1586" data-path="images/Unity-Custom-Main-Manifest.png" />
</Frame>

## Adding Dependencies

MoEngage plugin depends on the following Jetpack libraries. In case you don't have them in your application already, please add them.\
You can choose to enable the custom gradle template in your Application's **Player Settings** and the below dependencies.

<CodeGroup>
  ```Groovy Groovy theme={null}
  implementation("androidx.core:core:1.9.0") implementation("androidx.appcompat:appcompat:1.4.2") implementation("androidx.lifecycle:lifecycle-process:2.5.1")
  ```
</CodeGroup>

## Add Application Class

* Create a Java/Kotlin class and add it to the **Assets --> Plugins --> Android** folder. Extend the class with **android.app.Application** and override the onCreate().
* Declare the above-created class in the Manifest file inside the application tag.

<CodeGroup>
  ```AndroidManifest.xml AndroidManifest.xml theme={null}
  <application android:name="[FULLY_QUALIFIED_NAME_OF_APPLICATION_CLASS]">
  ```
</CodeGroup>

The Manifest file can be found in the **Assets--> Plugins --> Android** folder.

## SDK Initialization

Get the Workspace ID from **Dashboard → Settings → Workspace → General** on the MoEngage dashboard and initialize the MoEngage SDK in the **Application class's onCreate()** method.

<Info>
  It is recommended that you initialize the SDK on the main thread inside **onCreate()** and not create a worker thread and initialize the SDK on that thread.
</Info>

<CodeGroup>
  ```kotlin Kotlin theme={null}
  import com.moengage.unity.wrapper.MoEInitializer
  import com.moengage.core.MoEngage
  import com.moengage.core.DataCenter

  // "YOUR_Workspace_ID" is the Workspace ID from the dashboard.
  val moEngage = MoEngage.Builder(this, "YOUR_Workspace_ID", DataCenter.DATA_CENTER_X)

  MoEInitializer.initialiseDefaultInstance(applicationContext, moEngage)
  ```

  ```java Java theme={null}
  import com.moengage.unity.wrapper.MoEInitializer;
  import com.moengage.core.MoEngage;
  import com.moengage.core.DataCenter;

  // "YOUR_Workspace_ID" is the Workspace ID from the dashboard.
  MoEngage.Builder moEngage = new MoEngage.Builder(this, "YOUR_Workspace_ID", DataCenter.DATA_CENTER_X);

  MoEInitializer.INSTANCE.initialiseDefaultInstance(applicationContext, moEngage);
  ```
</CodeGroup>

Following details of the different data centers you need to set based on the dashboard hosts

| Data Center                | Dashboard host            |
| -------------------------- | ------------------------- |
| DataCenter.DATA\_CENTER\_1 | dashboard-01.moengage.com |
| DataCenter.DATA\_CENTER\_2 | dashboard-02.moengage.com |
| DataCenter.DATA\_CENTER\_3 | dashboard-03.moengage.com |
| DataCenter.DATA\_CENTER\_4 | dashboard-04.moengage.com |
| DataCenter.DATA\_CENTER\_5 | dashboard-05.moengage.com |

For more information about the detailed list of possible configurations, refer to the [API reference](https://moengage.github.io/android-api-reference/core/com.moengage.core/\[android-jvm]-mo-engage/-builder/index.html).

<Info>
  All the configurations are added to the builder before initialization. If you are calling initialize at multiple places, ensure that all the required flags and configurations are set each time you initialize to maintain consistency in behavior.
</Info>

<Info>
  You can also initialize the SDK using a configuration file instead of this programmatic approach. Refer to [File Based Initialization](/developer-guide/unity-sdk/sdk-integration/sdk-initialization/file-based-initialization/android) for more information.
</Info>

## Exclude MoEngage Storage File from Auto-Backup

This is a mandatory integration step and is very essential to prevent your data from getting corrupted. Android's auto back-up service periodically backs up Shared Preference files, Database files, etc, more details [here](https://developer.android.com/guide/topics/data/autobackup). This backup results in MoEngage SDK's identifiers being backed up and restored after re-install.This restoration of the identifier results in your data being corrupted and users not being reachable via push notifications.

To ensure data is not corrupted after a backup is restored, opt out of MoEngage SDK's storage files. Refer to [Exclude MoEngage Storage File from the Auto-Backup](/developer-guide/android-sdk/sdk-integration/basic-integration/exclude-mo-engage-storage-file-from-auto-backup) section of the documentation to learn more about which files to exclude.
