@@ -88,6 +88,11 @@ public class AndroidGradleBuilder extends Executor {
88
88
89
89
private boolean useGradle8 = true ;
90
90
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
+
91
96
private boolean extendAppCompatActivity = false ;
92
97
93
98
private boolean useJava8SourceLevel = true ;
@@ -477,6 +482,8 @@ public boolean build(File sourceZip, final BuildRequest request) throws BuildExc
477
482
newFirebaseMessaging = request .getArg ("android.newFirebaseMessaging" , "true" ).equals ("true" );
478
483
useGradle8 = request .getArg ("android.useGradle8" , "" +(useGradle8 || newFirebaseMessaging || facebookSupported )).equals ("true" );
479
484
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 ;
480
487
useJava8SourceLevel = request .getArg ("android.java8" , "" +useJava8SourceLevel ).equals ("true" );
481
488
if (useGradle8 ) {
482
489
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
976
983
} catch (Exception ex ) {
977
984
throw new BuildException ("Failed to extract source zip " +sourceZip , ex );
978
985
}
986
+ if (stripKotlinFromUserClasses ) {
987
+ stripKotlin (dummyClassesDir );
988
+ }
979
989
980
990
File appDir = buildToolsVersionInt >= 27 ?
981
991
new File (srcDir .getParentFile (), "app" ) :
@@ -4445,4 +4455,19 @@ private void initPlayServiceVersions(BuildRequest request) {
4445
4455
}
4446
4456
}
4447
4457
}
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
+ }
4448
4473
}
0 commit comments