Programmatically change the app icon in Expo.
npx expo install expo-dynamic-app-icon
add plugins in app.json
"plugins": [
[
"expo-dynamic-app-icon",
{
"red": { // icon name
"image": "./assets/icon1.png", // icon path
"prerendered": true, // for ios UIPrerenderedIcon option
"platforms": ["ios", "android"] // optional platforms array. defaults to both platforms if emitted
},
"gray": {
"image": "./assets/icon2.png",
"prerendered": true,
"platforms": ["ios"]
}
}
]
]
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
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'