[FSSDK-11888] fix: update ProGuard rules for AGP 8+ and R8 compatibility #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |