@@ -171,3 +171,161 @@ jobs:
171171 architecture : x64
172172 - run : flutter pub get
173173 - run : flutter test
174+
175+ # Minification Compatibility Test
176+ minification_compatibility_test :
177+ runs-on : ubuntu-latest
178+
179+ steps :
180+ - name : Checkout code
181+ uses : actions/checkout@v3
182+
183+ - name : Setup Flutter
184+ uses : subosito/flutter-action@v2
185+ with :
186+ channel : ' stable'
187+ architecture : x64
188+ cache : true
189+
190+ - name : Setup Java
191+ uses : actions/setup-java@v3
192+ with :
193+ distribution : ' temurin'
194+ java-version : ' 11'
195+
196+ - name : Install dependencies
197+ run : |
198+ flutter pub get
199+ cd example && flutter pub get
200+
201+ - name : Create ProGuard rules for example app
202+ run : |
203+ cat > example/android/app/proguard-rules.pro << 'EOF'
204+ # Example app ProGuard rules for minification testing
205+
206+ # Keep example app classes
207+ -keep class com.optimizely.optimizely_flutter_sdk_example.** { *; }
208+
209+ # Keep Flutter classes
210+ -keep class io.flutter.app.** { *; }
211+ -keep class io.flutter.plugins.GeneratedPluginRegistrant { *; }
212+
213+ # Google Play Core (for Flutter engine)
214+ -keep class com.google.android.play.core.** { *; }
215+ -dontwarn com.google.android.play.core.**
216+
217+ # Additional safety for Optimizely (redundant but safe)
218+ -keep class com.optimizely.** { *; }
219+ -dontwarn com.optimizely.**
220+
221+ # Jackson JSON
222+ -keep class com.fasterxml.jackson.** { *; }
223+ -dontwarn com.fasterxml.jackson.**
224+
225+ # Ignore missing classes
226+ -dontwarn javax.mail.**
227+ -dontwarn javax.activation.**
228+ EOF
229+
230+ - name : Test with minification ENABLED
231+ run : |
232+ echo "🧪 Testing with minifyEnabled = true"
233+
234+ # Backup original build.gradle
235+ cp example/android/app/build.gradle example/android/app/build.gradle.backup
236+
237+ # Enable minification and ensure ProGuard rules are referenced
238+ sed -i 's/minifyEnabled false/minifyEnabled true/' example/android/app/build.gradle
239+ sed -i 's/shrinkResources false/shrinkResources true/' example/android/app/build.gradle
240+
241+ # Ensure ProGuard rules are applied
242+ if ! grep -q "proguardFiles.*proguard-rules.pro" example/android/app/build.gradle; then
243+ sed -i '/minifyEnabled true/a\ proguardFiles getDefaultProguardFile('\''proguard-android-optimize.txt'\''), '\''proguard-rules.pro'\''' example/android/app/build.gradle
244+ fi
245+
246+ echo "📄 Build configuration with minification:"
247+ grep -A 5 "buildTypes" example/android/app/build.gradle
248+
249+ # Build release APK
250+ cd example
251+ flutter build apk --release --verbose
252+
253+ echo "✅ Build successful with minification ENABLED"
254+
255+ - name : Test with minification DISABLED
256+ run : |
257+ echo "🧪 Testing with minifyEnabled = false"
258+
259+ # Restore original and disable minification
260+ cp example/android/app/build.gradle.backup example/android/app/build.gradle
261+ sed -i 's/minifyEnabled true/minifyEnabled false/' example/android/app/build.gradle
262+ sed -i 's/shrinkResources true/shrinkResources false/' example/android/app/build.gradle
263+
264+ echo "📄 Build configuration without minification:"
265+ grep -A 5 "buildTypes" example/android/app/build.gradle
266+
267+ # Clean and build again
268+ cd example
269+ flutter clean
270+ flutter build apk --release --verbose
271+
272+ echo "✅ Build successful with minification DISABLED"
273+
274+ - name : Run unit tests
275+ run : |
276+ echo "🧪 Running unit tests to verify SDK functionality"
277+ flutter test
278+
279+ - name : Verify APK artifacts
280+ run : |
281+ echo "📱 Checking APK files were created:"
282+ ls -la example/build/app/outputs/apk/release/
283+
284+ # Check APK size
285+ if [ -f "example/build/app/outputs/apk/release/app-release.apk" ]; then
286+ APK_SIZE=$(stat -c%s example/build/app/outputs/apk/release/app-release.apk 2>/dev/null || stat -f%z example/build/app/outputs/apk/release/app-release.apk)
287+ echo "📊 Final APK Size: $(($APK_SIZE / 1024 / 1024)) MB"
288+ fi
289+
290+ - name : Check for ProGuard artifacts
291+ run : |
292+ echo "🔍 Checking for ProGuard/R8 artifacts:"
293+
294+ # Look for mapping files
295+ if [ -f "example/build/app/outputs/mapping/release/mapping.txt" ]; then
296+ echo "✅ ProGuard mapping file found"
297+ echo "📄 Mapping file size: $(wc -l < example/build/app/outputs/mapping/release/mapping.txt) lines"
298+ else
299+ echo "ℹ️ No mapping file found (expected if minification was disabled)"
300+ fi
301+
302+ - name : Upload APK artifacts
303+ uses : actions/upload-artifact@v3
304+ with :
305+ name : minification-test-apk
306+ path : |
307+ example/build/app/outputs/apk/release/app-release.apk
308+ example/build/app/outputs/mapping/release/mapping.txt
309+ retention-days : 7
310+
311+ - name : Report test results
312+ run : |
313+ echo "🎉 Minification compatibility test completed successfully!"
314+ echo "✅ minifyEnabled = true: PASSED"
315+ echo "✅ minifyEnabled = false: PASSED"
316+ echo "✅ Your Optimizely Flutter SDK is minification-compatible!"
317+ echo ""
318+ echo "This confirms that:"
319+ echo " • Library ProGuard rules are working correctly"
320+ echo " • Plugin registration survives minification"
321+ echo " • No critical classes are being stripped"
322+ echo " • Customer's issue should be resolved"
323+
324+ - name : Cleanup
325+ if : always()
326+ run : |
327+ # Restore original build.gradle if backup exists
328+ if [ -f "example/android/app/build.gradle.backup" ]; then
329+ mv example/android/app/build.gradle.backup example/android/app/build.gradle
330+ echo "✅ Restored original build.gradle"
331+ fi
0 commit comments