Merge pull request #91271 from m4gr3d/clean_gradle_build_setup
Clean up the gradle build logic used to generate the Godot Android binaries
This commit is contained in:
commit
690c5669e2
@ -3270,18 +3270,17 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<String> copy_args;
|
List<String> copy_args;
|
||||||
String copy_command;
|
String copy_command = "copyAndRenameBinary";
|
||||||
if (export_format == EXPORT_FORMAT_AAB) {
|
|
||||||
copy_command = vformat("copyAndRename%sAab", build_type);
|
|
||||||
} else if (export_format == EXPORT_FORMAT_APK) {
|
|
||||||
copy_command = vformat("copyAndRename%sApk", build_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_args.push_back(copy_command);
|
copy_args.push_back(copy_command);
|
||||||
|
|
||||||
copy_args.push_back("-p"); // argument to specify the start directory.
|
copy_args.push_back("-p"); // argument to specify the start directory.
|
||||||
copy_args.push_back(build_path); // start directory.
|
copy_args.push_back(build_path); // start directory.
|
||||||
|
|
||||||
|
copy_args.push_back("-Pexport_build_type=" + build_type.to_lower());
|
||||||
|
|
||||||
|
String export_format_arg = export_format == EXPORT_FORMAT_AAB ? "aab" : "apk";
|
||||||
|
copy_args.push_back("-Pexport_format=" + export_format_arg);
|
||||||
|
|
||||||
String export_filename = p_path.get_file();
|
String export_filename = p_path.get_file();
|
||||||
String export_path = p_path.get_base_dir();
|
String export_path = p_path.get_base_dir();
|
||||||
if (export_path.is_relative_path()) {
|
if (export_path.is_relative_path()) {
|
||||||
|
@ -211,70 +211,24 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
task copyAndRenameDebugApk(type: Copy) {
|
task copyAndRenameBinary(type: Copy) {
|
||||||
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
|
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
|
||||||
// and directories. Otherwise this check may cause permissions access failures on Windows
|
// and directories. Otherwise this check may cause permissions access failures on Windows
|
||||||
// machines.
|
// machines.
|
||||||
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
|
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
|
||||||
|
|
||||||
from "$buildDir/outputs/apk/debug/android_debug.apk"
|
String exportPath = getExportPath()
|
||||||
into getExportPath()
|
String exportFilename = getExportFilename()
|
||||||
rename "android_debug.apk", getExportFilename()
|
String exportBuildType = getExportBuildType()
|
||||||
}
|
String exportFormat = getExportFormat()
|
||||||
|
|
||||||
task copyAndRenameDevApk(type: Copy) {
|
boolean isAab = exportFormat == "aab"
|
||||||
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
|
String sourceFilepath = isAab ? "$buildDir/outputs/bundle/$exportBuildType/build-${exportBuildType}.aab" : "$buildDir/outputs/apk/$exportBuildType/android_${exportBuildType}.apk"
|
||||||
// and directories. Otherwise this check may cause permissions access failures on Windows
|
String sourceFilename = isAab ? "build-${exportBuildType}.aab" : "android_${exportBuildType}.apk"
|
||||||
// machines.
|
|
||||||
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
|
|
||||||
|
|
||||||
from "$buildDir/outputs/apk/dev/android_dev.apk"
|
from sourceFilepath
|
||||||
into getExportPath()
|
into exportPath
|
||||||
rename "android_dev.apk", getExportFilename()
|
rename sourceFilename, exportFilename
|
||||||
}
|
|
||||||
|
|
||||||
task copyAndRenameReleaseApk(type: Copy) {
|
|
||||||
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
|
|
||||||
// and directories. Otherwise this check may cause permissions access failures on Windows
|
|
||||||
// machines.
|
|
||||||
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
|
|
||||||
|
|
||||||
from "$buildDir/outputs/apk/release/android_release.apk"
|
|
||||||
into getExportPath()
|
|
||||||
rename "android_release.apk", getExportFilename()
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyAndRenameDebugAab(type: Copy) {
|
|
||||||
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
|
|
||||||
// and directories. Otherwise this check may cause permissions access failures on Windows
|
|
||||||
// machines.
|
|
||||||
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
|
|
||||||
|
|
||||||
from "$buildDir/outputs/bundle/debug/build-debug.aab"
|
|
||||||
into getExportPath()
|
|
||||||
rename "build-debug.aab", getExportFilename()
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyAndRenameDevAab(type: Copy) {
|
|
||||||
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
|
|
||||||
// and directories. Otherwise this check may cause permissions access failures on Windows
|
|
||||||
// machines.
|
|
||||||
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
|
|
||||||
|
|
||||||
from "$buildDir/outputs/bundle/dev/build-dev.aab"
|
|
||||||
into getExportPath()
|
|
||||||
rename "build-dev.aab", getExportFilename()
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyAndRenameReleaseAab(type: Copy) {
|
|
||||||
// The 'doNotTrackState' is added to disable gradle's up-to-date checks for output files
|
|
||||||
// and directories. Otherwise this check may cause permissions access failures on Windows
|
|
||||||
// machines.
|
|
||||||
doNotTrackState("No need for up-to-date checks for the copy-and-rename operation")
|
|
||||||
|
|
||||||
from "$buildDir/outputs/bundle/release/build-release.aab"
|
|
||||||
into getExportPath()
|
|
||||||
rename "build-release.aab", getExportFilename()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -224,6 +224,22 @@ ext.getExportFilename = {
|
|||||||
return exportFilename
|
return exportFilename
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ext.getExportBuildType = {
|
||||||
|
String exportBuildType = project.hasProperty("export_build_type") ? project.property("export_build_type") : ""
|
||||||
|
if (exportBuildType == null || exportBuildType.isEmpty()) {
|
||||||
|
exportBuildType = "debug"
|
||||||
|
}
|
||||||
|
return exportBuildType
|
||||||
|
}
|
||||||
|
|
||||||
|
ext.getExportFormat = {
|
||||||
|
String exportFormat = project.hasProperty("export_format") ? project.property("export_format") : ""
|
||||||
|
if (exportFormat == null || exportFormat.isEmpty()) {
|
||||||
|
exportFormat = "apk"
|
||||||
|
}
|
||||||
|
return exportFormat
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse the project properties for the 'plugins_maven_repos' property and return the list
|
* Parse the project properties for the 'plugins_maven_repos' property and return the list
|
||||||
* of maven repos.
|
* of maven repos.
|
||||||
|
@ -35,115 +35,16 @@ ext {
|
|||||||
// `./gradlew generateGodotTemplates` build command instead after running the `scons` command(s).
|
// `./gradlew generateGodotTemplates` build command instead after running the `scons` command(s).
|
||||||
// The {selectedAbis} values must be from the {supportedAbis} values.
|
// The {selectedAbis} values must be from the {supportedAbis} values.
|
||||||
selectedAbis = ["arm64"]
|
selectedAbis = ["arm64"]
|
||||||
}
|
|
||||||
|
|
||||||
def rootDir = "../../.."
|
rootDir = "../../.."
|
||||||
def binDir = "$rootDir/bin/"
|
binDir = "$rootDir/bin/"
|
||||||
def androidEditorBuildsDir = "$binDir/android_editor_builds/"
|
androidEditorBuildsDir = "$binDir/android_editor_builds/"
|
||||||
|
}
|
||||||
|
|
||||||
def getSconsTaskName(String flavor, String buildType, String abi) {
|
def getSconsTaskName(String flavor, String buildType, String abi) {
|
||||||
return "compileGodotNativeLibs" + flavor.capitalize() + buildType.capitalize() + abi.capitalize()
|
return "compileGodotNativeLibs" + flavor.capitalize() + buildType.capitalize() + abi.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_dev.apk' binary template into the Godot bin directory.
|
|
||||||
* Depends on the app build task to ensure the binary is generated prior to copying.
|
|
||||||
*/
|
|
||||||
task copyDevBinaryToBin(type: Copy) {
|
|
||||||
dependsOn ':app:assembleDev'
|
|
||||||
from('app/build/outputs/apk/dev')
|
|
||||||
into(binDir)
|
|
||||||
include('android_dev.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:assembleTemplateDebug'
|
|
||||||
from('lib/build/outputs/aar')
|
|
||||||
into('app/libs/debug')
|
|
||||||
include('godot-lib.template_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:assembleTemplateDebug'
|
|
||||||
from('lib/build/outputs/aar')
|
|
||||||
into(binDir)
|
|
||||||
include('godot-lib.template_debug.aar')
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy the Godot android library archive dev file into the app module dev libs directory.
|
|
||||||
* Depends on the library build task to ensure the AAR file is generated prior to copying.
|
|
||||||
*/
|
|
||||||
task copyDevAARToAppModule(type: Copy) {
|
|
||||||
dependsOn ':lib:assembleTemplateDev'
|
|
||||||
from('lib/build/outputs/aar')
|
|
||||||
into('app/libs/dev')
|
|
||||||
include('godot-lib.template_debug.dev.aar')
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy the Godot android library archive dev file into the root bin directory.
|
|
||||||
* Depends on the library build task to ensure the AAR file is generated prior to copying.
|
|
||||||
*/
|
|
||||||
task copyDevAARToBin(type: Copy) {
|
|
||||||
dependsOn ':lib:assembleTemplateDev'
|
|
||||||
from('lib/build/outputs/aar')
|
|
||||||
into(binDir)
|
|
||||||
include('godot-lib.template_debug.dev.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:assembleTemplateRelease'
|
|
||||||
from('lib/build/outputs/aar')
|
|
||||||
into('app/libs/release')
|
|
||||||
include('godot-lib.template_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:assembleTemplateRelease'
|
|
||||||
from('lib/build/outputs/aar')
|
|
||||||
into(binDir)
|
|
||||||
include('godot-lib.template_release.aar')
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate Godot gradle build template by zipping the source files from the app directory, as well
|
* Generate Godot gradle build template by zipping the source files from the app directory, as well
|
||||||
* as the AAR files generated by 'copyDebugAAR', 'copyDevAAR' and 'copyReleaseAAR'.
|
* as the AAR files generated by 'copyDebugAAR', 'copyDevAAR' and 'copyReleaseAAR'.
|
||||||
@ -197,7 +98,7 @@ def generateBuildTasks(String flavor = "template") {
|
|||||||
throw new GradleException("Invalid build flavor: $flavor")
|
throw new GradleException("Invalid build flavor: $flavor")
|
||||||
}
|
}
|
||||||
|
|
||||||
def tasks = []
|
def buildTasks = []
|
||||||
|
|
||||||
// Only build the apks and aar files for which we have native shared libraries unless we intend
|
// Only build the apks and aar files for which we have native shared libraries unless we intend
|
||||||
// to run the scons build tasks.
|
// to run the scons build tasks.
|
||||||
@ -206,72 +107,93 @@ def generateBuildTasks(String flavor = "template") {
|
|||||||
String libsDir = isTemplate ? "lib/libs/" : "lib/libs/tools/"
|
String libsDir = isTemplate ? "lib/libs/" : "lib/libs/tools/"
|
||||||
for (String target : supportedFlavorsBuildTypes[flavor]) {
|
for (String target : supportedFlavorsBuildTypes[flavor]) {
|
||||||
File targetLibs = new File(libsDir + target)
|
File targetLibs = new File(libsDir + target)
|
||||||
|
|
||||||
|
String targetSuffix = target
|
||||||
|
if (target == "dev") {
|
||||||
|
targetSuffix = "debug.dev"
|
||||||
|
}
|
||||||
|
|
||||||
if (!excludeSconsBuildTasks || (targetLibs != null
|
if (!excludeSconsBuildTasks || (targetLibs != null
|
||||||
&& targetLibs.isDirectory()
|
&& targetLibs.isDirectory()
|
||||||
&& targetLibs.listFiles() != null
|
&& targetLibs.listFiles() != null
|
||||||
&& targetLibs.listFiles().length > 0)) {
|
&& targetLibs.listFiles().length > 0)) {
|
||||||
|
|
||||||
String capitalizedTarget = target.capitalize()
|
String capitalizedTarget = target.capitalize()
|
||||||
if (isTemplate) {
|
if (isTemplate) {
|
||||||
// Copy the generated aar library files to the build directory.
|
// Copy the Godot android library archive file into the app module libs directory.
|
||||||
tasks += "copy${capitalizedTarget}AARToAppModule"
|
// Depends on the library build task to ensure the AAR file is generated prior to copying.
|
||||||
// Copy the generated aar library files to the bin directory.
|
String copyAARTaskName = "copy${capitalizedTarget}AARToAppModule"
|
||||||
tasks += "copy${capitalizedTarget}AARToBin"
|
if (tasks.findByName(copyAARTaskName) != null) {
|
||||||
// Copy the prebuilt binary templates to the bin directory.
|
buildTasks += tasks.getByName(copyAARTaskName)
|
||||||
tasks += "copy${capitalizedTarget}BinaryToBin"
|
} else {
|
||||||
|
buildTasks += tasks.create(name: copyAARTaskName, type: Copy) {
|
||||||
|
dependsOn ":lib:assembleTemplate${capitalizedTarget}"
|
||||||
|
from('lib/build/outputs/aar')
|
||||||
|
include("godot-lib.template_${targetSuffix}.aar")
|
||||||
|
into("app/libs/${target}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the Godot android library archive file into the root bin directory.
|
||||||
|
// Depends on the library build task to ensure the AAR file is generated prior to copying.
|
||||||
|
String copyAARToBinTaskName = "copy${capitalizedTarget}AARToBin"
|
||||||
|
if (tasks.findByName(copyAARToBinTaskName) != null) {
|
||||||
|
buildTasks += tasks.getByName(copyAARToBinTaskName)
|
||||||
|
} else {
|
||||||
|
buildTasks += tasks.create(name: copyAARToBinTaskName, type: Copy) {
|
||||||
|
dependsOn ":lib:assembleTemplate${capitalizedTarget}"
|
||||||
|
from('lib/build/outputs/aar')
|
||||||
|
include("godot-lib.template_${targetSuffix}.aar")
|
||||||
|
into(binDir)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the generated binary template into the Godot bin directory.
|
||||||
|
// Depends on the app build task to ensure the binary is generated prior to copying.
|
||||||
|
String copyBinaryTaskName = "copy${capitalizedTarget}BinaryToBin"
|
||||||
|
if (tasks.findByName(copyBinaryTaskName) != null) {
|
||||||
|
buildTasks += tasks.getByName(copyBinaryTaskName)
|
||||||
|
} else {
|
||||||
|
buildTasks += tasks.create(name: copyBinaryTaskName, type: Copy) {
|
||||||
|
dependsOn ":app:assemble${capitalizedTarget}"
|
||||||
|
from("app/build/outputs/apk/${target}")
|
||||||
|
into(binDir)
|
||||||
|
include("android_${target}.apk")
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Copy the generated editor apk to the bin directory.
|
// Copy the generated editor apk to the bin directory.
|
||||||
tasks += "copyEditor${capitalizedTarget}ApkToBin"
|
String copyEditorApkTaskName = "copyEditor${capitalizedTarget}ApkToBin"
|
||||||
|
if (tasks.findByName(copyEditorApkTaskName) != null) {
|
||||||
|
buildTasks += tasks.getByName(copyEditorApkTaskName)
|
||||||
|
} else {
|
||||||
|
buildTasks += tasks.create(name: copyEditorApkTaskName, type: Copy) {
|
||||||
|
dependsOn ":editor:assemble${capitalizedTarget}"
|
||||||
|
from("editor/build/outputs/apk/${target}")
|
||||||
|
into(androidEditorBuildsDir)
|
||||||
|
include("android_editor-${target}*.apk")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Copy the generated editor aab to the bin directory.
|
// Copy the generated editor aab to the bin directory.
|
||||||
tasks += "copyEditor${capitalizedTarget}AabToBin"
|
String copyEditorAabTaskName = "copyEditor${capitalizedTarget}AabToBin"
|
||||||
|
if (tasks.findByName(copyEditorAabTaskName) != null) {
|
||||||
|
buildTasks += tasks.getByName(copyEditorAabTaskName)
|
||||||
|
} else {
|
||||||
|
buildTasks += tasks.create(name: copyEditorAabTaskName, type: Copy) {
|
||||||
|
dependsOn ":editor:bundle${capitalizedTarget}"
|
||||||
|
from("editor/build/outputs/bundle/${target}")
|
||||||
|
into(androidEditorBuildsDir)
|
||||||
|
include("android_editor-${target}*.aab")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.lifecycle("No native shared libs for target $target. Skipping build.")
|
logger.lifecycle("No native shared libs for target $target. Skipping build.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return tasks
|
return buildTasks
|
||||||
}
|
|
||||||
|
|
||||||
task copyEditorReleaseApkToBin(type: Copy) {
|
|
||||||
dependsOn ':editor:assembleRelease'
|
|
||||||
from('editor/build/outputs/apk/release')
|
|
||||||
into(androidEditorBuildsDir)
|
|
||||||
include('android_editor-release*.apk')
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyEditorReleaseAabToBin(type: Copy) {
|
|
||||||
dependsOn ':editor:bundleRelease'
|
|
||||||
from('editor/build/outputs/bundle/release')
|
|
||||||
into(androidEditorBuildsDir)
|
|
||||||
include('android_editor-release*.aab')
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyEditorDebugApkToBin(type: Copy) {
|
|
||||||
dependsOn ':editor:assembleDebug'
|
|
||||||
from('editor/build/outputs/apk/debug')
|
|
||||||
into(androidEditorBuildsDir)
|
|
||||||
include('android_editor-debug.apk')
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyEditorDebugAabToBin(type: Copy) {
|
|
||||||
dependsOn ':editor:bundleDebug'
|
|
||||||
from('editor/build/outputs/bundle/debug')
|
|
||||||
into(androidEditorBuildsDir)
|
|
||||||
include('android_editor-debug.aab')
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyEditorDevApkToBin(type: Copy) {
|
|
||||||
dependsOn ':editor:assembleDev'
|
|
||||||
from('editor/build/outputs/apk/dev')
|
|
||||||
into(androidEditorBuildsDir)
|
|
||||||
include('android_editor-dev.apk')
|
|
||||||
}
|
|
||||||
|
|
||||||
task copyEditorDevAabToBin(type: Copy) {
|
|
||||||
dependsOn ':editor:bundleDev'
|
|
||||||
from('editor/build/outputs/bundle/dev')
|
|
||||||
into(androidEditorBuildsDir)
|
|
||||||
include('android_editor-dev.aab')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user