Create Dynamic App Icon Using Activity Alias
Tags: android, mobile, programming, java
Published: 2023-03-27 02:17:49

## Introduction
Have you ever see some apps can change their app icon without reinstall of update their app from Play Store? We all know that one app can only contains one app icon integrated. So if your app want to integrate with multiple app icon, You can using **Activity Alias**.

Android’s `<activity-alias>` tag is one of the most unused tags in the android manifest. The existence and benefits of it are unknown to many Android developers, even today. This API is introduced from API Level 1.

![Sample app icon 1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7n60i6or3h2ofz47ibqx.png)

![Sample app icon 2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u2oafmqsbetdiffj7v1g.png)

Activity alias syntax is written as below:

![Activity alias syntax](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/je4h02diqezl788z0szs.png)

This tag contained in:
`<application>`

And this tag can contain:
`<intent-filter> 
<meta-data>
`

## Attribute explanation
1. `android:enabled`
Whether or not the target activity can be instantiated by the system through this alias — "true" if it can be, and "false" if not. The default value is "true".
The `<application>` element has its own enabled attribute that applies to all application components, including activity aliases. The `<application>` and `<activity-alias>` attributes must both be "true" for the system to be able to instantiate the target activity through the alias. If either is "false", the alias does not work.

2. `android:exported`
Whether or not components of other applications can launch the target activity through this alias — "true" if they can, and "false" if not. If "false", the target activity can be launched through the alias only by components of the same application as the alias or applications with the same user ID.
The default value depends on whether the alias contains intent filters. The absence of any filters means that the activity can be invoked through the alias only by specifying the exact name of the alias. This implies that the alias is intended only for application-internal use (since others would not know its name) — so the default value is "false". On the other hand, the presence of at least one filter implies that the alias is intended for external use — so the default value is "true".

3. `android:icon`
An icon for the target activity when presented to users through the alias. See the `<activity>` element's icon attribute for more information.

4. `android:label`
A user-readable label for the alias when presented to users through the alias. See the `<activity>` element's label attribute for more information.

5. `android:name`
A unique name for the alias. The name should resemble a fully qualified class name. But, unlike the name of the target activity, the alias name is arbitrary; it does not refer to an actual class.

6. `android:permission`
The name of a permission that clients must have to launch the target activity or get it to do something via the alias. If a caller of `startActivity()` or `startActivityForResult()` has not been granted the specified permission, the target activity will not be activated.
This attribute supplants any permission set for the target activity itself. If it is not set, a permission is not needed to activate the target through the alias.

7. `android:targetActivity`
The name of the activity that can be activated through the alias. This name must match the name attribute of an `<activity>` element that precedes the alias in the manifest. 

Example of writing activity aliases as below:

![ScreenShot Code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nknb4pi61tijvm6gcd0g.png)

the **targetActivity** is **Splash Activity** because we create fake activity (activity alias) which references to **Splash Activity**