Skip to content

[FSSDK-11888] fix: update ProGuard rules for AGP 8+ and R8 compatibility #6

[FSSDK-11888] fix: update ProGuard rules for AGP 8+ and R8 compatibility

[FSSDK-11888] fix: update ProGuard rules for AGP 8+ and R8 compatibility #6

Workflow file for this run

name: Minification Compatibility Test
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
jobs:
minification_compatibility_test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
architecture: x64
cache: true
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Configure Gradle JVM options
run: |
mkdir -p ~/.gradle
cat > ~/.gradle/gradle.properties << 'EOF'
# Increase heap size for CI builds
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true
android.enableJetifier=true
android.useAndroidX=true
EOF
- name: Configure Android build options
run: |
cat >> example/android/gradle.properties << 'EOF'
# Memory optimization for CI
org.gradle.jvmargs=-Xmx3g -XX:MaxMetaspaceSize=512m
android.enableJetifier=true
android.useAndroidX=true
EOF
- name: Install dependencies
run: |
flutter pub get
cd example && flutter pub get
- name: Create ProGuard rules for example app
run: |
cat > example/android/app/proguard-rules.pro << 'EOF'
# Example app ProGuard rules for minification testing
# Keep example app classes
-keep class com.optimizely.optimizely_flutter_sdk_example.** { *; }
# Keep Flutter classes
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugins.GeneratedPluginRegistrant { *; }
# Google Play Core (for Flutter engine)
-keep class com.google.android.play.core.** { *; }
-dontwarn com.google.android.play.core.**
# Jackson JSON
-keep class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.**
# Ignore missing classes
-dontwarn javax.mail.**
-dontwarn javax.activation.**
EOF
- name: Test with minification ENABLED
run: |
echo "🧪 Testing with minifyEnabled = true"
# Backup original build.gradle
cp example/android/app/build.gradle example/android/app/build.gradle.backup
# Enable minification
sed -i 's/minifyEnabled false/minifyEnabled true/' example/android/app/build.gradle
sed -i 's/shrinkResources false/shrinkResources true/' example/android/app/build.gradle
# Ensure ProGuard rules are applied
if ! grep -q "proguardFiles.*proguard-rules.pro" example/android/app/build.gradle; then
sed -i '/minifyEnabled true/a\ proguardFiles getDefaultProguardFile('\''proguard-android-optimize.txt'\''), '\''proguard-rules.pro'\''' example/android/app/build.gradle
fi
echo "📄 Build configuration with minification:"
grep -A 5 "buildTypes" example/android/app/build.gradle
# Build for single architecture to save memory
cd example
flutter build apk --release --target-platform android-arm64 --split-per-abi
echo "✅ Build successful with minification ENABLED"
- name: Test with minification DISABLED
run: |
echo "🧪 Testing with minifyEnabled = false"
# Restore original
cp example/android/app/build.gradle.backup example/android/app/build.gradle
sed -i 's/minifyEnabled true/minifyEnabled false/' example/android/app/build.gradle
sed -i 's/shrinkResources true/shrinkResources false/' example/android/app/build.gradle
echo "📄 Build configuration without minification:"
grep -A 5 "buildTypes" example/android/app/build.gradle
# Clean and build
cd example
flutter clean
flutter build apk --release --target-platform android-arm64 --split-per-abi
echo "✅ Build successful with minification DISABLED"
- name: Run unit tests
run: flutter test
- name: Verify APK artifacts
run: |
echo "📱 Checking APK files:"
find example/build/app/outputs/apk/ -name "*.apk" -exec ls -la {} \;
- name: Check for ProGuard artifacts
run: |
echo "🔍 Checking for ProGuard/R8 artifacts:"
if [ -f "example/build/app/outputs/mapping/release/mapping.txt" ]; then
echo "✅ ProGuard mapping file found"
echo "📄 Mapping file size: $(wc -l < example/build/app/outputs/mapping/release/mapping.txt) lines"
else
echo "ℹ️ No mapping file found"
fi
- name: Report test results
run: |
echo "🎉 Minification compatibility test completed!"
echo "✅ minifyEnabled = true: PASSED"
echo "✅ minifyEnabled = false: PASSED"
echo "✅ Memory optimizations applied successfully"
- name: Cleanup
if: always()
run: |
if [ -f "example/android/app/build.gradle.backup" ]; then
mv example/android/app/build.gradle.backup example/android/app/build.gradle
echo "✅ Restored original build.gradle"
fi