android-app-icon
Android App Icon
Generate Android adaptive icons using VectorDrawables from Iconify's 200k+ icon library.
How This Skill Works
This skill uses executable scripts for reliable, deterministic icon generation. The agent's role is to:
- Run scripts with user-confirmed parameters
- Present results and wait for user decisions
- Verify output
Scripts location: ~/claude-devtools/skills/android-app-icon/scripts/
| Script | Purpose |
|---|---|
search-icons.sh <term> |
Search Iconify for icons |
generate-app-icons.sh <icon-id> |
Generate all icon assets |
Checklist
Prerequisites
- Project has
minSdk >= 26→ Verify -
curlis installed -
python3is installed -
rsvg-convertis installed → Install instructions
Steps
- Step 1: Check for existing legacy icons → Details
- ⏸️ WAIT: If legacy icons found, ask user whether to delete them
- Step 2: Get search term from user → Details
- ⏸️ WAIT: User confirms or provides search term
- Step 3: Run search script → Details
- ⏸️ WAIT: User selects icon from results
- Step 4: Run generate script → Details
- Step 5: Verify build → Details
Completion Criteria
- All legacy icons removed (if user confirmed)
-
app/src/main/res/drawable/ic_launcher_foreground.xmlexists -
app/src/main/res/drawable/ic_launcher_background.xmlexists -
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xmlexists -
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xmlexists -
fastlane/metadata/android/en-US/images/icon.pngexists -
./gradlew assembleDebugsucceeds
Reference Details
Verifying minSdk
Check app/build.gradle.kts or app/build.gradle:
android {
defaultConfig {
minSdk = 26 // Must be 26 or higher
}
}
Installing rsvg-convert
macOS:
brew install librsvg
Ubuntu/Debian:
sudo apt install librsvg2-bin
Verify:
rsvg-convert --version
Step 1: Check for Existing Legacy Icons
Check for legacy raster icons that are not needed for minSdk 26+:
find app/src/main/res/mipmap-mdpi app/src/main/res/mipmap-hdpi \
app/src/main/res/mipmap-xhdpi app/src/main/res/mipmap-xxhdpi \
app/src/main/res/mipmap-xxxhdpi \
\( -name "ic_launcher*.webp" -o -name "ic_launcher*.png" \) \
2>/dev/null
If files are found, present to user:
"I found existing legacy icon files:
mipmap-mdpi/ic_launcher.webpmipmap-hdpi/ic_launcher.webp- ... (list all)
These are not needed for minSdk 26+ (VectorDrawables are used instead).
Would you like me to delete them? (y/n)"
If user confirms deletion:
find app/src/main/res/mipmap-mdpi app/src/main/res/mipmap-hdpi \
app/src/main/res/mipmap-xhdpi app/src/main/res/mipmap-xxhdpi \
app/src/main/res/mipmap-xxxhdpi \
\( -name "ic_launcher*.webp" -o -name "ic_launcher*.png" \) \
-delete 2>/dev/null
Step 2: Get Search Term
Auto-detect from project context:
# From package name in build.gradle.kts
grep -E 'namespace|applicationId' app/build.gradle.kts 2>/dev/null
# From app name in strings.xml
grep 'name="app_name"' app/src/main/res/values/strings.xml 2>/dev/null
Present to user:
"Based on your project, I suggest searching for:
{detected_term}Would you like to:
- Use
{detected_term}- Enter a different search term"
Step 3: Search for Icons
Run the search script with the confirmed search term:
~/claude-devtools/skills/android-app-icon/scripts/search-icons.sh "<search-term>"
Present results to user:
"Found icons matching '{search-term}':
mdi:heart-pulse- Material Design Icons (Apache 2.0)healthicons:health-worker- Health Icons (MIT)- ...
Preview: https://icon-sets.iconify.design/mdi/heart-pulse/
Enter a number to select, or type a different search term:"
Step 4: Generate Icons
Run the generate script from the project root:
cd /path/to/android/project
~/claude-devtools/skills/android-app-icon/scripts/generate-app-icons.sh "<icon-id>"
The script auto-detects:
- Background color from
themes.xml→colors.xml - Scale factor (default 1.15)
- Output paths
Optional overrides (if user requests):
ICON_BACKGROUND="#2196F3" ICON_SCALE="1.2" \
~/claude-devtools/skills/android-app-icon/scripts/generate-app-icons.sh <icon-id>
Step 5: Verify
./gradlew assembleDebug
Check all files exist:
test -f app/src/main/res/drawable/ic_launcher_foreground.xml && echo "✓ foreground"
test -f app/src/main/res/drawable/ic_launcher_background.xml && echo "✓ background"
test -f app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml && echo "✓ ic_launcher"
test -f app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml && echo "✓ ic_launcher_round"
test -f fastlane/metadata/android/en-US/images/icon.png && echo "✓ play store icon"
Troubleshooting
Icon appears cut off
Reduce scale: ICON_SCALE=1.0 generate-app-icons.sh <icon>
rsvg-convert not found
Icon not found
Verify icon ID at https://icon-sets.iconify.design/