diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-09-24 16:29:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-24 16:29:34 +0200 |
commit | 2b628e5d5b1b955beb599199e681b38edb5394a4 (patch) | |
tree | b8fccbc0561d3adec47e0cddf9cb086888b83fe0 /platform/android/java/build.gradle | |
parent | 78e6b7c1bfb4de1a6eb82d5d0e6884d3a9f1566e (diff) | |
parent | ef143447adc31eae038940efc8bc8dffbec5a18b (diff) |
Merge pull request #32269 from m4gr3d/improve_build_time
Update the Godot gradle build tasks to provide additional flexibility
Diffstat (limited to 'platform/android/java/build.gradle')
-rw-r--r-- | platform/android/java/build.gradle | 87 |
1 files changed, 72 insertions, 15 deletions
diff --git a/platform/android/java/build.gradle b/platform/android/java/build.gradle index 99ffa937b0..2052017888 100644 --- a/platform/android/java/build.gradle +++ b/platform/android/java/build.gradle @@ -20,14 +20,33 @@ allprojects { } } -def binDir = "../../../bin/" +ext { + sconsExt = org.gradle.internal.os.OperatingSystem.current().isWindows() ? ".bat" : "" + + supportedAbis = ["armv7", "arm64v8", "x86", "x86_64"] + supportedTargets = ['release':"release", 'debug':"release_debug"] + + // Used by gradle to specify which architecture to build for by default when running `./gradlew build`. + // This command is usually used by Android Studio. + // If building manually on the command line, it's recommended to use the + // `./gradlew generateGodotTemplates` build command instead after running the `scons` command. + // The defaultAbi must be one of the {supportedAbis} values. + defaultAbi = "arm64v8" +} + +def rootDir = "../../.." +def binDir = "$rootDir/bin/" + +def getSconsTaskName(String buildType) { + return "compileGodotNativeLibs" + buildType.capitalize() +} /** * Copy the generated 'android_debug.apk' binary template into the Godot bin directory. * Depends on the app build task to ensure the binary is generated prior to copying. */ task copyDebugBinaryToBin(type: Copy) { - dependsOn ':app:build' + dependsOn ':app:assembleDebug' from('app/build/outputs/apk/debug') into(binDir) include('android_debug.apk') @@ -38,7 +57,7 @@ task copyDebugBinaryToBin(type: Copy) { * Depends on the app build task to ensure the binary is generated prior to copying. */ task copyReleaseBinaryToBin(type: Copy) { - dependsOn ':app:build' + dependsOn ':app:assembleRelease' from('app/build/outputs/apk/release') into(binDir) include('android_release.apk') @@ -49,7 +68,7 @@ task copyReleaseBinaryToBin(type: Copy) { * Depends on the library build task to ensure the AAR file is generated prior to copying. */ task copyDebugAAR(type: Copy) { - dependsOn ':lib:build' + dependsOn ':lib:assembleDebug' from('lib/build/outputs/aar') into('app/libs/debug') include('godot-lib.debug.aar') @@ -60,7 +79,7 @@ task copyDebugAAR(type: Copy) { * Depends on the library build task to ensure the AAR file is generated prior to copying. */ task copyReleaseAAR(type: Copy) { - dependsOn ':lib:build' + dependsOn ':lib:assembleRelease' from('lib/build/outputs/aar') into('app/libs/release') include('godot-lib.release.aar') @@ -72,8 +91,10 @@ task copyReleaseAAR(type: Copy) { * The zip file also includes some gradle tools to allow building of the custom build. */ task zipCustomBuild(type: Zip) { - dependsOn 'copyDebugAAR' - dependsOn 'copyReleaseAAR' + dependsOn ':generateGodotTemplates' + doFirst { + logger.lifecycle("Generating Godot custom build template") + } from(fileTree(dir: 'app', excludes: ['**/build/**', '**/.gradle/**', '**/*.iml']), fileTree(dir: '.', includes: ['gradle.properties','gradlew', 'gradlew.bat', 'gradle/**'])) include '**/*' archiveName 'android_source.zip' @@ -84,12 +105,48 @@ task zipCustomBuild(type: Zip) { * Master task used to coordinate the tasks defined above to generate the set of Godot templates. */ task generateGodotTemplates(type: GradleBuild) { - tasks = [ - // Copy the generated aar library files to the custom build directory. - 'copyDebugAAR', 'copyReleaseAAR', - // Zip the custom build directory. - 'zipCustomBuild', - // Copy the prebuilt binary templates to the bin directory. - 'copyDebugBinaryToBin', 'copyReleaseBinaryToBin', - ] + // We exclude these gradle tasks so we can run the scons command manually. + for (String buildType : supportedTargets.keySet()) { + startParameter.excludedTaskNames += ":lib:" + getSconsTaskName(buildType) + } + + tasks = [] + + // Only build the apks and aar files for which we have native shared libraries. + for (String target : supportedTargets.keySet()) { + File targetLibs = new File("lib/libs/" + target) + if (targetLibs != null && targetLibs.isDirectory()) { + File[] targetLibsContents = targetLibs.listFiles() + if (targetLibsContents != null && targetLibsContents.length > 0) { + // Copy the generated aar library files to the custom build directory. + tasks += "copy" + target.capitalize() + "AAR" + // Copy the prebuilt binary templates to the bin directory. + tasks += "copy" + target.capitalize() + "BinaryToBin" + } + } + } + + finalizedBy 'zipCustomBuild' +} + +/** + * Clean the generated artifacts. + */ +task cleanGodotTemplates(type: Delete) { + // Delete the generated native libs + delete("lib/libs") + + // Delete the library generated AAR files + delete("lib/build/outputs/aar") + + // Delete the app libs directory contents + delete("app/libs") + + // Delete the generated binary apks + delete("app/build/outputs/apk") + + // Delete the Godot templates in the Godot bin directory + delete("$binDir/android_debug.apk") + delete("$binDir/android_release.apk") + delete("$binDir/android_source.zip") } |