feat: Add automatic Android asset validation to prevent build failures
- Add validate_android_assets() function to build-android.sh - Check for missing source assets (icon.png, splash.png, splash_dark.png) - Verify Android resources exist (drawable/splash.png, mipmap/*/ic_launcher*.png) - Auto-regenerate missing resources using @capacitor/assets - Integrate validation into main build process with exit code 9 - Add npm run assets:validate:android for manual validation - Support --assets-only flag for asset-only operations - Create comprehensive documentation in doc/android-asset-validation.md Fixes build failures caused by missing drawable/splash and mipmap/ic_launcher resources. Prevents "Android resource linking failed" errors during Gradle builds. Resolves: Android build failures due to missing asset resources
This commit is contained in:
@@ -41,7 +41,7 @@
|
||||
# 6 - Capacitor sync failed
|
||||
# 7 - Asset generation failed
|
||||
# 8 - Android Studio launch failed
|
||||
# 9 - Resource check failed
|
||||
# 9 - Android asset validation failed
|
||||
|
||||
# Exit on any error
|
||||
set -e
|
||||
@@ -74,6 +74,117 @@ validate_dependencies() {
|
||||
log_success "All critical dependencies validated successfully"
|
||||
}
|
||||
|
||||
# Function to validate Android assets and resources
|
||||
validate_android_assets() {
|
||||
log_info "Validating Android assets and resources..."
|
||||
|
||||
# Check if source assets exist
|
||||
local missing_assets=()
|
||||
|
||||
if [ ! -f "resources/icon.png" ]; then
|
||||
missing_assets+=("resources/icon.png")
|
||||
fi
|
||||
|
||||
if [ ! -f "resources/splash.png" ]; then
|
||||
missing_assets+=("resources/splash.png")
|
||||
fi
|
||||
|
||||
if [ ! -f "resources/splash_dark.png" ]; then
|
||||
missing_assets+=("resources/splash_dark.png")
|
||||
fi
|
||||
|
||||
if [ ${#missing_assets[@]} -gt 0 ]; then
|
||||
log_error "Missing source assets:"
|
||||
for asset in "${missing_assets[@]}"; do
|
||||
log_error " - $asset"
|
||||
done
|
||||
log_error "Please ensure all required assets are present in the resources/ directory."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if Android drawable resources exist
|
||||
local missing_drawables=()
|
||||
|
||||
if [ ! -f "android/app/src/main/res/drawable/splash.png" ]; then
|
||||
missing_drawables+=("drawable/splash.png")
|
||||
fi
|
||||
|
||||
# Check if mipmap resources exist
|
||||
local missing_mipmaps=()
|
||||
local mipmap_dirs=("mipmap-mdpi" "mipmap-hdpi" "mipmap-xhdpi" "mipmap-xxhdpi" "mipmap-xxxhdpi")
|
||||
|
||||
for dir in "${mipmap_dirs[@]}"; do
|
||||
if [ ! -f "android/app/src/main/res/$dir/ic_launcher.png" ]; then
|
||||
missing_mipmaps+=("$dir/ic_launcher.png")
|
||||
fi
|
||||
if [ ! -f "android/app/src/main/res/$dir/ic_launcher_round.png" ]; then
|
||||
missing_mipmaps+=("$dir/ic_launcher_round.png")
|
||||
fi
|
||||
done
|
||||
|
||||
# If any resources are missing, regenerate them
|
||||
if [ ${#missing_drawables[@]} -gt 0 ] || [ ${#missing_mipmaps[@]} -gt 0 ]; then
|
||||
log_warn "Missing Android resources detected:"
|
||||
for resource in "${missing_drawables[@]}" "${missing_mipmaps[@]}"; do
|
||||
log_warn " - $resource"
|
||||
done
|
||||
|
||||
log_info "Regenerating Android assets..."
|
||||
|
||||
# Create assets directory if it doesn't exist
|
||||
mkdir -p assets
|
||||
|
||||
# Copy source assets to assets directory for capacitor-assets
|
||||
cp resources/icon.png assets/ 2>/dev/null || log_warn "Could not copy icon.png"
|
||||
cp resources/splash.png assets/ 2>/dev/null || log_warn "Could not copy splash.png"
|
||||
cp resources/splash_dark.png assets/ 2>/dev/null || log_warn "Could not copy splash_dark.png"
|
||||
|
||||
# Generate assets
|
||||
if npx @capacitor/assets generate >/dev/null 2>&1; then
|
||||
log_success "Android assets regenerated successfully"
|
||||
|
||||
# Clean up temporary assets
|
||||
rm -f assets/icon.png assets/splash.png assets/splash_dark.png
|
||||
|
||||
# Verify the resources were created
|
||||
local verification_failed=false
|
||||
|
||||
if [ ! -f "android/app/src/main/res/drawable/splash.png" ]; then
|
||||
log_error "Failed to generate drawable/splash.png"
|
||||
verification_failed=true
|
||||
fi
|
||||
|
||||
for dir in "${mipmap_dirs[@]}"; do
|
||||
if [ ! -f "android/app/src/main/res/$dir/ic_launcher.png" ]; then
|
||||
log_error "Failed to generate $dir/ic_launcher.png"
|
||||
verification_failed=true
|
||||
fi
|
||||
if [ ! -f "android/app/src/main/res/$dir/ic_launcher_round.png" ]; then
|
||||
log_error "Failed to generate $dir/ic_launcher_round.png"
|
||||
verification_failed=true
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$verification_failed" = true ]; then
|
||||
log_error "Asset generation completed but some resources are still missing."
|
||||
log_info "You may need to manually create the missing resources or check the asset generation process."
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_error "Failed to generate Android assets"
|
||||
log_info "You may need to manually create the missing resources:"
|
||||
for resource in "${missing_drawables[@]}" "${missing_mipmaps[@]}"; do
|
||||
log_info " - android/app/src/main/res/$resource"
|
||||
done
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
log_success "All Android assets and resources validated successfully"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Default values
|
||||
BUILD_MODE="development"
|
||||
BUILD_TYPE="debug"
|
||||
@@ -126,7 +237,7 @@ parse_android_args() {
|
||||
--sync)
|
||||
SYNC_ONLY=true
|
||||
;;
|
||||
--assets)
|
||||
--assets|--assets-only)
|
||||
ASSETS_ONLY=true
|
||||
;;
|
||||
--deploy)
|
||||
@@ -208,6 +319,12 @@ print_header "TimeSafari Android Build Process"
|
||||
# Validate dependencies before proceeding
|
||||
validate_dependencies
|
||||
|
||||
# Validate Android assets and resources
|
||||
validate_android_assets || {
|
||||
log_error "Android asset validation failed. Please fix the issues above and try again."
|
||||
exit 9
|
||||
}
|
||||
|
||||
# Log build start
|
||||
log_info "Starting Android build process at $(date)"
|
||||
log_info "Build mode: $BUILD_MODE"
|
||||
|
||||
Reference in New Issue
Block a user