@@ -171,3 +171,161 @@ jobs:
171
171
architecture : x64
172
172
- run : flutter pub get
173
173
- 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