@@ -120,6 +120,12 @@ public File getGradleProjectDirectory() {
120120 // A flag to indicate whether we should use 'implementation' or 'compile' for dependencies
121121 private boolean useArrImplementation = false ;
122122
123+ // R8 configuration flags to control optimization behavior
124+ // Setting disableR8FullMode=true puts R8 in compatibility mode (less aggressive optimization)
125+ // which prevents issues with reflection-based code like CommonProgressAnimations
126+ private boolean disableR8FullMode = true ;
127+ private boolean disableR8 = false ;
128+
123129 public static final String [] ANDROID_PERMISSIONS = new String []{
124130 "android.permission.ACCESS_BACKGROUND_LOCATION" ,
125131 "android.permission.ACCESS_CHECKIN_PROPERTIES" ,
@@ -501,6 +507,10 @@ public boolean build(File sourceZip, final BuildRequest request) throws BuildExc
501507 // When using gradle 8 we need to strip kotlin files from user classes otherwise we get duplicate class errors
502508 stripKotlinFromUserClasses = useGradle8 ;
503509 useJava8SourceLevel = request .getArg ("android.java8" , "" +useJava8SourceLevel ).equals ("true" );
510+
511+ // R8 configuration - disable full mode by default to prevent issues with reflection
512+ disableR8 = request .getArg ("android.disableR8" , "false" ).equals ("true" );
513+ disableR8FullMode = request .getArg ("android.disableR8FullMode" , "true" ).equals ("true" );
504514 if (useGradle8 ) {
505515 getGradleJavaHome (); // will throw build exception if JAVA17_HOME is not set
506516 MIN_GRADLE_VERSION = 8 ;
@@ -3770,6 +3780,15 @@ public void usesClassMethod(String cls, String method) {
37703780 gradlePropertiesObject .setProperty ("android.useAndroidX" , "true" );
37713781 gradlePropertiesObject .setProperty ("android.enableJetifier" , "true" );
37723782 }
3783+
3784+ // Configure R8 optimization mode to prevent reflection issues
3785+ if (disableR8 ) {
3786+ gradlePropertiesObject .setProperty ("android.enableR8" , "false" );
3787+ gradlePropertiesObject .setProperty ("android.enableR8.libraries" , "false" );
3788+ } else if (disableR8FullMode ) {
3789+ gradlePropertiesObject .setProperty ("android.enableR8.fullMode" , "false" );
3790+ }
3791+
37733792 try {
37743793 FileOutputStream antPropertiesOutputStream = new FileOutputStream (gradlePropertiesFile );
37753794 gradlePropertiesObject .store (antPropertiesOutputStream , "Gradle properties for android build generated by Codename One" );
0 commit comments