Skip to content

Commit 3b83cfa

Browse files
authored
Disable R8 full mode in android gradle projects (#4081)
This was causing issues like #4000
1 parent 2bcff9d commit 3b83cfa

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

maven/codenameone-maven-plugin/src/main/java/com/codename1/builders/AndroidGradleBuilder.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)