| name | android-app-icon |
| description | Generate app icon using IconKitchen and place in correct locations |
| category | android |
| version | 1.0.0 |
| inputs | [object Object], [object Object], [object Object] |
| outputs | app/src/main/res/mipmap-*/, fastlane/metadata/android/en-US/images/icon.png, docs/APP_ICON_SETUP.md |
| verify | test -f fastlane/metadata/android/en-US/images/icon.png && file fastlane/metadata/android/en-US/images/icon.png | grep '512 x 512' |
Android App Icon
Guide user through IconKitchen to generate app icons, then place assets in correct locations.
Prerequisites
- Android project
- App name defined in
app/src/main/res/values/strings.xml
Inputs
| Input | Required | Default | Description |
|---|---|---|---|
| icon_source | No | - | Path to logo/image file for icon |
| app_name | No | From strings.xml | App name for text-based icon |
| primary_color | No | From colors.xml | Primary brand color (hex) |
Process
Step 1: Analyze Project for Icon Suggestions
# Extract app name from strings.xml
APP_NAME=$(grep 'name="app_name"' app/src/main/res/values/strings.xml | sed 's/.*>\([^<]*\)<.*/\1/')
echo "App name: $APP_NAME"
# Extract primary color from colors.xml or themes.xml
if [ -f "app/src/main/res/values/colors.xml" ]; then
PRIMARY_COLOR=$(grep 'name="colorPrimary"\|name="md_theme_light_primary"' app/src/main/res/values/colors.xml | head -1 | sed 's/.*>\([^<]*\)<.*/\1/')
echo "Primary color: $PRIMARY_COLOR"
fi
# Check if icon resources already exist
if [ -d "app/src/main/res/mipmap-xxxhdpi" ]; then
echo "Existing icon resources found:"
ls app/src/main/res/mipmap-xxxhdpi/
fi
Step 2: Generate Icon Setup Guide
Create docs/APP_ICON_SETUP.md with project-specific instructions.
Step 3: IconKitchen Workflow
Direct user to https://icon.kitchen/
Recommended settings based on project:
- Platform: Android
- Icon Type: Adaptive (for Android 8+)
- Foreground: User's logo or app name as text
- Background Color: Primary color from project
- Shape: Circle or Squircle (most common)
Options:
- Option A: Image/Logo - Upload PNG or SVG (ideally 512x512+)
- Option B: Clipart - Search for icon that represents the app
- Option C: Text - Use app name or initials
Step 4: Download and Process Icon Assets
After generating in IconKitchen:
- Click "Download" button
- Select "Android" format
- Save and extract the ZIP file
The ZIP contains:
android/
├── mipmap-mdpi/
├── mipmap-hdpi/
├── mipmap-xhdpi/
├── mipmap-xxhdpi/
├── mipmap-xxxhdpi/
└── play_store_512.png
Step 5: Copy Assets to Project
# Copy mipmap resources (replace existing)
cp -r /path/to/extracted/android/mipmap-* app/src/main/res/
# Copy Play Store icon to Fastlane metadata
mkdir -p fastlane/metadata/android/en-US/images
cp /path/to/extracted/android/play_store_512.png \
fastlane/metadata/android/en-US/images/icon.png
Or use the provided scripts/process-icon.sh helper script.
Step 6: Verify AndroidManifest
Ensure AndroidManifest.xml references the icon:
<application
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
...>
Step 7: Build and Verify
# Clean and rebuild
./gradlew clean assembleDebug
# Install and check icon on device/emulator
./gradlew installDebug
Icon Processing Script
A helper script scripts/process-icon.sh can automate asset placement:
#!/bin/bash
# Usage: ./scripts/process-icon.sh /path/to/iconkitchen-download.zip
ZIP_PATH="${1:-}"
if [ -z "$ZIP_PATH" ]; then
echo "Usage: $0 <path-to-iconkitchen-zip>"
exit 1
fi
# Extract and process icon assets
TEMP_DIR=$(mktemp -d)
trap "rm -rf $TEMP_DIR" EXIT
unzip -q "$ZIP_PATH" -d "$TEMP_DIR"
# Find android directory
ANDROID_DIR=$(find "$TEMP_DIR" -type d -name "android" | head -1)
# Copy mipmap resources
for density in mdpi hdpi xhdpi xxhdpi xxxhdpi; do
SRC_DIR="$ANDROID_DIR/mipmap-$density"
DEST_DIR="app/src/main/res/mipmap-$density"
if [ -d "$SRC_DIR" ]; then
mkdir -p "$DEST_DIR"
cp -r "$SRC_DIR"/* "$DEST_DIR/"
echo " ✓ mipmap-$density"
fi
done
# Copy Play Store icon
PLAY_STORE_ICON=$(find "$ANDROID_DIR" -name "play_store_*.png" | head -1)
if [ -n "$PLAY_STORE_ICON" ]; then
mkdir -p fastlane/metadata/android/en-US/images
cp "$PLAY_STORE_ICON" fastlane/metadata/android/en-US/images/icon.png
echo " ✓ Play Store icon (512x512)"
fi
echo "✅ Icon assets installed successfully!"
Verification
MANDATORY: Run these commands:
# Check icon resources exist
ls -la app/src/main/res/mipmap-xxxhdpi/
# Check Play Store icon
ls -la fastlane/metadata/android/en-US/images/icon.png
# Verify icon dimensions
file fastlane/metadata/android/en-US/images/icon.png
# Should show: PNG image data, 512 x 512
# Build to verify
./gradlew assembleDebug
Completion Criteria
-
docs/APP_ICON_SETUP.mdgenerated with project-specific instructions - Mipmap resources copied to
app/src/main/res/mipmap-*/ - Play Store icon at
fastlane/metadata/android/en-US/images/icon.png - Icon is 512x512 PNG
-
./gradlew assembleDebugbuilds successfully with new icon
Play Store Requirements
| Asset | Size | Format | Notes |
|---|---|---|---|
| App Icon | 512 x 512 px | PNG | No transparency, no rounded corners |
IconKitchen's play_store_512.png meets these requirements.
Troubleshooting
"Icon looks pixelated"
Cause: Source image too small Fix: Use source image at least 512x512, prefer SVG
"Icon has wrong shape on some devices"
Cause: Android adaptive icons can be masked differently Fix: Ensure important content is in center "safe zone" (66dp circle)
"Monochrome icon not showing in Android 13"
Cause: Missing monochrome layer
Fix: IconKitchen generates this automatically, check ic_launcher.xml
Next Steps
After completing this skill:
- Run
/devtools:android-store-listingto create feature graphic - Run
/devtools:android-screenshot-automationto capture screenshots - Upload to Play Store:
bundle exec fastlane upload_metadata