mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			206 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Groovy
		
	
	
	
	
	
| apply from: 'app/config.gradle'
 | |
| 
 | |
| buildscript {
 | |
|     apply from: 'app/config.gradle'
 | |
| 
 | |
|     repositories {
 | |
|         google()
 | |
|         jcenter()
 | |
|     }
 | |
|     dependencies {
 | |
|         classpath libraries.androidGradlePlugin
 | |
|         classpath libraries.kotlinGradlePlugin
 | |
|     }
 | |
| }
 | |
| 
 | |
| allprojects {
 | |
|     repositories {
 | |
|         google()
 | |
|         jcenter()
 | |
|         mavenCentral()
 | |
|     }
 | |
| }
 | |
| 
 | |
| ext {
 | |
|     supportedAbis = ["armv7", "arm64v8", "x86", "x86_64"]
 | |
|     supportedTargets = ["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:assembleDebug'
 | |
|     from('app/build/outputs/apk/debug')
 | |
|     into(binDir)
 | |
|     include('android_debug.apk')
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Copy the generated 'android_release.apk' binary template into the Godot bin directory.
 | |
|  * Depends on the app build task to ensure the binary is generated prior to copying.
 | |
|  */
 | |
| task copyReleaseBinaryToBin(type: Copy) {
 | |
|     dependsOn ':app:assembleRelease'
 | |
|     from('app/build/outputs/apk/release')
 | |
|     into(binDir)
 | |
|     include('android_release.apk')
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Copy the Godot android library archive debug file into the app module debug libs directory.
 | |
|  * Depends on the library build task to ensure the AAR file is generated prior to copying.
 | |
|  */
 | |
| task copyDebugAARToAppModule(type: Copy) {
 | |
|     dependsOn ':lib:assembleDebug'
 | |
|     from('lib/build/outputs/aar')
 | |
|     into('app/libs/debug')
 | |
|     include('godot-lib.debug.aar')
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Copy the Godot android library archive debug file into the root bin directory.
 | |
|  * Depends on the library build task to ensure the AAR file is generated prior to copying.
 | |
|  */
 | |
| task copyDebugAARToBin(type: Copy) {
 | |
|     dependsOn ':lib:assembleDebug'
 | |
|     from('lib/build/outputs/aar')
 | |
|     into(binDir)
 | |
|     include('godot-lib.debug.aar')
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Copy the Godot android library archive release file into the app module release libs directory.
 | |
|  * Depends on the library build task to ensure the AAR file is generated prior to copying.
 | |
|  */
 | |
| task copyReleaseAARToAppModule(type: Copy) {
 | |
|     dependsOn ':lib:assembleRelease'
 | |
|     from('lib/build/outputs/aar')
 | |
|     into('app/libs/release')
 | |
|     include('godot-lib.release.aar')
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Copy the Godot android library archive release file into the root bin directory.
 | |
|  * Depends on the library build task to ensure the AAR file is generated prior to copying.
 | |
|  */
 | |
| task copyReleaseAARToBin(type: Copy) {
 | |
|     dependsOn ':lib:assembleRelease'
 | |
|     from('lib/build/outputs/aar')
 | |
|     into(binDir)
 | |
|     include('godot-lib.release.aar')
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Generate Godot custom build template by zipping the source files from the app directory, as well
 | |
|  * as the AAR files generated by 'copyDebugAAR' and 'copyReleaseAAR'.
 | |
|  * The zip file also includes some gradle tools to allow building of the custom build.
 | |
|  */
 | |
| task zipCustomBuild(type: Zip) {
 | |
|     onlyIf { generateGodotTemplates.state.executed || generateDevTemplate.state.executed }
 | |
|     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'
 | |
|     destinationDir(file(binDir))
 | |
| }
 | |
| 
 | |
| def templateExcludedBuildTask() {
 | |
|     // We exclude these gradle tasks so we can run the scons command manually.
 | |
|     def excludedTasks = []
 | |
|     for (String buildType : supportedTargets) {
 | |
|         excludedTasks += ":lib:" + getSconsTaskName(buildType)
 | |
|     }
 | |
|     return excludedTasks
 | |
| }
 | |
| 
 | |
| def templateBuildTasks() {
 | |
|     def tasks = []
 | |
| 
 | |
|     // Only build the apks and aar files for which we have native shared libraries.
 | |
|     for (String target : supportedTargets) {
 | |
|         File targetLibs = new File("lib/libs/" + target)
 | |
|         if (targetLibs != null
 | |
|             && targetLibs.isDirectory()
 | |
|             && targetLibs.listFiles() != null
 | |
|             && targetLibs.listFiles().length > 0) {
 | |
|             String capitalizedTarget = target.capitalize()
 | |
|             // Copy the generated aar library files to the custom build directory.
 | |
|             tasks += "copy" + capitalizedTarget + "AARToAppModule"
 | |
|             // Copy the generated aar library files to the bin directory.
 | |
|             tasks += "copy" + capitalizedTarget + "AARToBin"
 | |
|             // Copy the prebuilt binary templates to the bin directory.
 | |
|             tasks += "copy" + capitalizedTarget + "BinaryToBin"
 | |
|         } else {
 | |
|             logger.lifecycle("No native shared libs for target $target. Skipping build.")
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return tasks
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Master task used to coordinate the tasks defined above to generate the set of Godot templates.
 | |
|  */
 | |
| task generateGodotTemplates(type: GradleBuild) {
 | |
|     startParameter.excludedTaskNames = templateExcludedBuildTask()
 | |
|     tasks = templateBuildTasks()
 | |
| 
 | |
|     finalizedBy 'zipCustomBuild'
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Generates the same output as generateGodotTemplates but with dev symbols
 | |
|  */
 | |
| task generateDevTemplate (type: GradleBuild) {
 | |
|     // add parameter to set symbols to true
 | |
|     startParameter.projectProperties += [doNotStrip: true]
 | |
| 
 | |
|     startParameter.excludedTaskNames = templateExcludedBuildTask()
 | |
|     tasks = templateBuildTasks()
 | |
| 
 | |
|     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")
 | |
|     delete("$binDir/godot-lib.debug.aar")
 | |
|     delete("$binDir/godot-lib.release.aar")
 | |
| 
 | |
|     finalizedBy getTasksByName("clean", true)
 | |
| }
 | 
