Note
This is a fork of expo-dynamic-app-icon to support Expo SDK 51. It also includes:
- support for resetting the icon to the default
- round icon support
- different icons for Android and iOS
Programmatically change the app icon in Expo.
npx expo install @mozzius/expo-dynamic-app-icon
add plugins in app.json
"plugins": [
[
"expo-dynamic-app-icon",
{
"red": { // icon name
"ios": "./assets/ios_icon1.png", // icon path for ios
"android": "./assets/android_icon1.png", // icon path for android
"prerendered": true // for ios UIPrerenderedIcon option
},
"gray": {
"android": "./assets/icon2.png", // android-only icon
}
}
]
]
expo prebuild
check added line AndroidManifest.xml
...
<activity-alias android:name="expo.modules.dynamicappicon.example.MainActivityred" android:enabled="false" android:exported="true" android:icon="@mipmap/red" android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
<activity-alias android:name="expo.modules.dynamicappicon.example.MainActivitygray" android:enabled="false" android:exported="true" android:icon="@mipmap/gray" android:targetActivity=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity-alias>
...
create a new expo-dev-client
and begin using expo-dynamic-app-icon
- if error, return false
- else, return changed app icon name
- pass
null
to reset app icon to default
import { setAppIcon } from "expo-dynamic-app-icon";
...
setAppIcon("red") // set icon 'assets/icon1.png'
get current app icon name
- default return is
DEFAULT
import { getAppIcon } from "expo-dynamic-app-icon";
...
getAppIcon() // get current icon name 'red'
Buy outsung (original author) a coffee! I couldn't have done it without his work! 👇