Skip to content

Commit 892fa4c

Browse files
authored
fix: Kotlin support when using gradle 8 (#3792)
When using gradle 8, kotlin is included automatically so it needs to be stripped from user classes if they are provided.
1 parent 50cbaf4 commit 892fa4c

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

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

+25
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ public class AndroidGradleBuilder extends Executor {
8888

8989
private boolean useGradle8 = true;
9090

91+
// Flag to indicate whether we should strip kotlin from user classes
92+
// Necessary for using gradle 8 because kotlin seems to be included by default,
93+
// so we get duplicate class errors.
94+
private boolean stripKotlinFromUserClasses = true;
95+
9196
private boolean extendAppCompatActivity = false;
9297

9398
private boolean useJava8SourceLevel = true;
@@ -477,6 +482,8 @@ public boolean build(File sourceZip, final BuildRequest request) throws BuildExc
477482
newFirebaseMessaging = request.getArg("android.newFirebaseMessaging", "true").equals("true");
478483
useGradle8 = request.getArg("android.useGradle8", ""+(useGradle8 || newFirebaseMessaging || facebookSupported)).equals("true");
479484
extendAppCompatActivity = request.getArg("android.extendAppCompatActivity", "false").equals("true");
485+
// When using gradle 8 we need to strip kotlin files from user classes otherwise we get duplicate class errors
486+
stripKotlinFromUserClasses = useGradle8;
480487
useJava8SourceLevel = request.getArg("android.java8", ""+useJava8SourceLevel).equals("true");
481488
if (useGradle8) {
482489
getGradleJavaHome(); // will throw build exception if JAVA17_HOME is not set
@@ -976,6 +983,9 @@ public boolean build(File sourceZip, final BuildRequest request) throws BuildExc
976983
} catch (Exception ex) {
977984
throw new BuildException("Failed to extract source zip "+sourceZip, ex);
978985
}
986+
if (stripKotlinFromUserClasses) {
987+
stripKotlin(dummyClassesDir);
988+
}
979989

980990
File appDir = buildToolsVersionInt >= 27 ?
981991
new File(srcDir.getParentFile(), "app") :
@@ -4445,4 +4455,19 @@ private void initPlayServiceVersions(BuildRequest request) {
44454455
}
44464456
}
44474457
}
4458+
4459+
private void stripKotlin(File dummyClassesDir) {
4460+
String[] skipDirectories = new String[] {
4461+
"org" + File.separator + "jetbrains" + File.separator + "annotations",
4462+
"org" + File.separator + "intellij" + File.separator + "lang" + File.separator + "annotations",
4463+
"kotlin"
4464+
};
4465+
for (String path : skipDirectories) {
4466+
File directory = new File(dummyClassesDir, path);
4467+
if (directory.isDirectory()) {
4468+
log("Deleting directory " + directory);
4469+
delTree(directory, true);
4470+
}
4471+
}
4472+
}
44484473
}

0 commit comments

Comments
 (0)