2019-09-03 02:31:51 +02:00
|
|
|
ext.versions = [
|
2022-11-11 01:35:50 +01:00
|
|
|
androidGradlePlugin: '7.2.1',
|
2021-07-11 03:39:31 +02:00
|
|
|
compileSdk : 32,
|
2022-11-11 01:35:50 +01:00
|
|
|
minSdk : 19, // Also update 'platform/android/export/export_plugin.cpp#DEFAULT_MIN_SDK_VERSION'
|
|
|
|
targetSdk : 32, // Also update 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION'
|
2021-07-11 03:39:31 +02:00
|
|
|
buildTools : '32.0.0',
|
2022-11-11 01:35:50 +01:00
|
|
|
kotlinVersion : '1.7.0',
|
2021-08-31 12:02:59 +02:00
|
|
|
fragmentVersion : '1.3.6',
|
2022-05-31 20:10:15 +02:00
|
|
|
nexusPublishVersion: '1.1.0',
|
2021-10-09 20:14:27 +02:00
|
|
|
javaVersion : 11,
|
2022-06-01 09:54:08 +02:00
|
|
|
ndkVersion : '23.2.8568313' // Also update 'platform/android/detect.py#get_ndk_version()' when this is updated.
|
2019-09-03 02:31:51 +02:00
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
ext.libraries = [
|
2020-03-04 18:21:59 +01:00
|
|
|
androidGradlePlugin: "com.android.tools.build:gradle:$versions.androidGradlePlugin",
|
2020-02-25 17:18:36 +01:00
|
|
|
kotlinGradlePlugin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlinVersion",
|
2022-05-31 20:10:15 +02:00
|
|
|
kotlinStdLib : "org.jetbrains.kotlin:kotlin-stdlib:$versions.kotlinVersion",
|
2021-08-31 12:02:59 +02:00
|
|
|
androidxFragment : "androidx.fragment:fragment:$versions.fragmentVersion",
|
2019-09-03 02:31:51 +02:00
|
|
|
]
|
2019-12-13 01:52:57 +01:00
|
|
|
|
|
|
|
ext.getExportPackageName = { ->
|
2020-03-04 18:21:59 +01:00
|
|
|
// Retrieve the app id from the project property set by the Godot build command.
|
|
|
|
String appId = project.hasProperty("export_package_name") ? project.property("export_package_name") : ""
|
|
|
|
// Check if the app id is valid, otherwise use the default.
|
|
|
|
if (appId == null || appId.isEmpty()) {
|
|
|
|
appId = "com.godot.game"
|
|
|
|
}
|
|
|
|
return appId
|
2019-12-13 01:52:57 +01:00
|
|
|
}
|
2019-10-18 18:59:04 +02:00
|
|
|
|
2020-07-23 18:16:03 +02:00
|
|
|
ext.getExportVersionCode = { ->
|
|
|
|
String versionCode = project.hasProperty("export_version_code") ? project.property("export_version_code") : ""
|
|
|
|
if (versionCode == null || versionCode.isEmpty()) {
|
|
|
|
versionCode = "1"
|
|
|
|
}
|
2020-11-21 23:09:33 +01:00
|
|
|
try {
|
|
|
|
return Integer.parseInt(versionCode)
|
|
|
|
} catch (NumberFormatException ignored) {
|
|
|
|
return 1
|
|
|
|
}
|
2020-07-23 18:16:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ext.getExportVersionName = { ->
|
|
|
|
String versionName = project.hasProperty("export_version_name") ? project.property("export_version_name") : ""
|
|
|
|
if (versionName == null || versionName.isEmpty()) {
|
|
|
|
versionName = "1.0"
|
|
|
|
}
|
|
|
|
return versionName
|
|
|
|
}
|
|
|
|
|
2021-12-07 23:38:33 +01:00
|
|
|
ext.getExportMinSdkVersion = { ->
|
|
|
|
String minSdkVersion = project.hasProperty("export_version_min_sdk") ? project.property("export_version_min_sdk") : ""
|
|
|
|
if (minSdkVersion == null || minSdkVersion.isEmpty()) {
|
|
|
|
minSdkVersion = "$versions.minSdk"
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
return Integer.parseInt(minSdkVersion)
|
|
|
|
} catch (NumberFormatException ignored) {
|
|
|
|
return versions.minSdk
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getExportTargetSdkVersion = { ->
|
|
|
|
String targetSdkVersion = project.hasProperty("export_version_target_sdk") ? project.property("export_version_target_sdk") : ""
|
|
|
|
if (targetSdkVersion == null || targetSdkVersion.isEmpty()) {
|
|
|
|
targetSdkVersion = "$versions.targetSdk"
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
return Integer.parseInt(targetSdkVersion)
|
|
|
|
} catch (NumberFormatException ignored) {
|
|
|
|
return versions.targetSdk
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-02-24 12:49:00 +01:00
|
|
|
ext.getGodotEditorVersion = { ->
|
|
|
|
String editorVersion = project.hasProperty("godot_editor_version") ? project.property("godot_editor_version") : ""
|
|
|
|
if (editorVersion == null || editorVersion.isEmpty()) {
|
|
|
|
// Try the library version first
|
2021-06-25 15:45:16 +02:00
|
|
|
editorVersion = getGodotLibraryVersionName()
|
2021-02-24 12:49:00 +01:00
|
|
|
|
|
|
|
if (editorVersion.isEmpty()) {
|
|
|
|
// Fallback value.
|
|
|
|
editorVersion = "custom_build"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return editorVersion
|
|
|
|
}
|
|
|
|
|
2021-06-25 15:45:16 +02:00
|
|
|
ext.getGodotLibraryVersionCode = { ->
|
|
|
|
String versionName = ""
|
|
|
|
int versionCode = 1
|
|
|
|
(versionName, versionCode) = getGodotLibraryVersion()
|
|
|
|
return versionCode
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getGodotLibraryVersionName = { ->
|
|
|
|
String versionName = ""
|
|
|
|
int versionCode = 1
|
|
|
|
(versionName, versionCode) = getGodotLibraryVersion()
|
|
|
|
return versionName
|
|
|
|
}
|
|
|
|
|
2022-03-14 17:19:04 +01:00
|
|
|
ext.generateGodotLibraryVersion = { List<String> requiredKeys ->
|
2021-02-24 12:49:00 +01:00
|
|
|
// Attempt to read the version from the `version.py` file.
|
2021-06-25 15:45:16 +02:00
|
|
|
String libraryVersionName = ""
|
|
|
|
int libraryVersionCode = 0
|
2021-02-24 12:49:00 +01:00
|
|
|
|
|
|
|
File versionFile = new File("../../../version.py")
|
|
|
|
if (versionFile.isFile()) {
|
|
|
|
def map = [:]
|
|
|
|
|
|
|
|
List<String> lines = versionFile.readLines()
|
|
|
|
for (String line in lines) {
|
|
|
|
String[] keyValue = line.split("=")
|
|
|
|
String key = keyValue[0].trim()
|
|
|
|
String value = keyValue[1].trim().replaceAll("\"", "")
|
|
|
|
|
|
|
|
if (requiredKeys.contains(key)) {
|
|
|
|
if (!value.isEmpty()) {
|
|
|
|
map[key] = value
|
|
|
|
}
|
|
|
|
requiredKeys.remove(key)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (requiredKeys.empty) {
|
2021-06-25 15:45:16 +02:00
|
|
|
libraryVersionName = map.values().join(".")
|
|
|
|
try {
|
2022-09-12 06:33:17 +02:00
|
|
|
if (map.containsKey("status")) {
|
|
|
|
int statusCode = 0
|
|
|
|
String statusValue = map["status"]
|
|
|
|
if (statusValue == null) {
|
|
|
|
statusCode = 0
|
|
|
|
} else if (statusValue.startsWith("alpha")) {
|
|
|
|
statusCode = 1
|
|
|
|
} else if (statusValue.startsWith("beta")) {
|
|
|
|
statusCode = 2
|
|
|
|
} else if (statusValue.startsWith("rc")) {
|
|
|
|
statusCode = 3
|
|
|
|
} else if (statusValue.startsWith("stable")) {
|
|
|
|
statusCode = 4
|
|
|
|
} else {
|
|
|
|
statusCode = 0
|
|
|
|
}
|
|
|
|
|
|
|
|
libraryVersionCode = statusCode
|
|
|
|
}
|
|
|
|
|
2021-06-25 15:45:16 +02:00
|
|
|
if (map.containsKey("patch")) {
|
2022-09-12 06:33:17 +02:00
|
|
|
libraryVersionCode += Integer.parseInt(map["patch"]) * 10
|
2021-06-25 15:45:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (map.containsKey("minor")) {
|
2022-09-12 06:33:17 +02:00
|
|
|
libraryVersionCode += (Integer.parseInt(map["minor"]) * 1000)
|
2021-06-25 15:45:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (map.containsKey("major")) {
|
2022-09-12 06:33:17 +02:00
|
|
|
libraryVersionCode += (Integer.parseInt(map["major"]) * 100000)
|
2021-06-25 15:45:16 +02:00
|
|
|
}
|
|
|
|
} catch (NumberFormatException ignore) {
|
|
|
|
libraryVersionCode = 1
|
|
|
|
}
|
2021-02-24 12:49:00 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-06-25 15:45:16 +02:00
|
|
|
if (libraryVersionName.isEmpty()) {
|
2021-02-24 12:49:00 +01:00
|
|
|
// Fallback value in case we're unable to read the file.
|
2021-06-25 15:45:16 +02:00
|
|
|
libraryVersionName = "custom_build"
|
|
|
|
}
|
|
|
|
|
|
|
|
if (libraryVersionCode == 0) {
|
|
|
|
libraryVersionCode = 1
|
2021-02-24 12:49:00 +01:00
|
|
|
}
|
2021-06-25 15:45:16 +02:00
|
|
|
|
|
|
|
return [libraryVersionName, libraryVersionCode]
|
2021-02-24 12:49:00 +01:00
|
|
|
}
|
|
|
|
|
2022-03-14 17:19:04 +01:00
|
|
|
ext.getGodotLibraryVersion = { ->
|
|
|
|
List<String> requiredKeys = ["major", "minor", "patch", "status", "module_config"]
|
|
|
|
return generateGodotLibraryVersion(requiredKeys)
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getGodotPublishVersion = { ->
|
|
|
|
List<String> requiredKeys = ["major", "minor", "patch", "status"]
|
2021-06-25 15:45:16 +02:00
|
|
|
String versionName = ""
|
|
|
|
int versionCode = 1
|
|
|
|
(versionName, versionCode) = generateGodotLibraryVersion(requiredKeys)
|
|
|
|
return versionName
|
2022-03-14 17:19:04 +01:00
|
|
|
}
|
|
|
|
|
2021-02-26 17:38:39 +01:00
|
|
|
final String VALUE_SEPARATOR_REGEX = "\\|"
|
2020-04-24 09:45:14 +02:00
|
|
|
|
2020-07-31 22:48:08 +02:00
|
|
|
// get the list of ABIs the project should be exported to
|
|
|
|
ext.getExportEnabledABIs = { ->
|
|
|
|
String enabledABIs = project.hasProperty("export_enabled_abis") ? project.property("export_enabled_abis") : "";
|
|
|
|
if (enabledABIs == null || enabledABIs.isEmpty()) {
|
|
|
|
enabledABIs = "armeabi-v7a|arm64-v8a|x86|x86_64|"
|
|
|
|
}
|
|
|
|
Set<String> exportAbiFilter = [];
|
2021-02-26 17:38:39 +01:00
|
|
|
for (String abi_name : enabledABIs.split(VALUE_SEPARATOR_REGEX)) {
|
2020-07-31 22:48:08 +02:00
|
|
|
if (!abi_name.trim().isEmpty()){
|
|
|
|
exportAbiFilter.add(abi_name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return exportAbiFilter;
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getExportPath = {
|
|
|
|
String exportPath = project.hasProperty("export_path") ? project.property("export_path") : ""
|
|
|
|
if (exportPath == null || exportPath.isEmpty()) {
|
|
|
|
exportPath = "."
|
|
|
|
}
|
|
|
|
return exportPath
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getExportFilename = {
|
|
|
|
String exportFilename = project.hasProperty("export_filename") ? project.property("export_filename") : ""
|
|
|
|
if (exportFilename == null || exportFilename.isEmpty()) {
|
|
|
|
exportFilename = "godot_android"
|
|
|
|
}
|
|
|
|
return exportFilename
|
|
|
|
}
|
|
|
|
|
2019-10-18 18:59:04 +02:00
|
|
|
/**
|
2020-04-24 09:45:14 +02:00
|
|
|
* Parse the project properties for the 'plugins_maven_repos' property and return the list
|
|
|
|
* of maven repos.
|
2019-10-18 18:59:04 +02:00
|
|
|
*/
|
2020-04-24 09:45:14 +02:00
|
|
|
ext.getGodotPluginsMavenRepos = { ->
|
|
|
|
Set<String> mavenRepos = []
|
2019-10-18 18:59:04 +02:00
|
|
|
|
2020-04-24 09:45:14 +02:00
|
|
|
// Retrieve the list of maven repos.
|
|
|
|
if (project.hasProperty("plugins_maven_repos")) {
|
|
|
|
String mavenReposProperty = project.property("plugins_maven_repos")
|
|
|
|
if (mavenReposProperty != null && !mavenReposProperty.trim().isEmpty()) {
|
2021-02-26 17:38:39 +01:00
|
|
|
for (String mavenRepoUrl : mavenReposProperty.split(VALUE_SEPARATOR_REGEX)) {
|
2020-04-24 09:45:14 +02:00
|
|
|
mavenRepos += mavenRepoUrl.trim()
|
2019-10-18 18:59:04 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-24 09:45:14 +02:00
|
|
|
return mavenRepos
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Parse the project properties for the 'plugins_remote_binaries' property and return
|
|
|
|
* it for inclusion in the build dependencies.
|
|
|
|
*/
|
|
|
|
ext.getGodotPluginsRemoteBinaries = { ->
|
|
|
|
Set<String> remoteDeps = []
|
|
|
|
|
|
|
|
// Retrieve the list of remote plugins binaries.
|
|
|
|
if (project.hasProperty("plugins_remote_binaries")) {
|
|
|
|
String remoteDepsList = project.property("plugins_remote_binaries")
|
|
|
|
if (remoteDepsList != null && !remoteDepsList.trim().isEmpty()) {
|
2021-02-26 17:38:39 +01:00
|
|
|
for (String dep: remoteDepsList.split(VALUE_SEPARATOR_REGEX)) {
|
2020-04-24 09:45:14 +02:00
|
|
|
remoteDeps += dep.trim()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return remoteDeps
|
2019-10-18 18:59:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-04-24 09:45:14 +02:00
|
|
|
* Parse the project properties for the 'plugins_local_binaries' property and return
|
|
|
|
* their binaries for inclusion in the build dependencies.
|
2019-10-18 18:59:04 +02:00
|
|
|
*/
|
2020-04-24 09:45:14 +02:00
|
|
|
ext.getGodotPluginsLocalBinaries = { ->
|
2020-05-27 21:04:31 +02:00
|
|
|
Set<String> binDeps = []
|
2020-04-24 09:45:14 +02:00
|
|
|
|
|
|
|
// Retrieve the list of local plugins binaries.
|
|
|
|
if (project.hasProperty("plugins_local_binaries")) {
|
|
|
|
String pluginsList = project.property("plugins_local_binaries")
|
|
|
|
if (pluginsList != null && !pluginsList.trim().isEmpty()) {
|
2021-02-26 17:38:39 +01:00
|
|
|
for (String plugin : pluginsList.split(VALUE_SEPARATOR_REGEX)) {
|
2020-04-24 09:45:14 +02:00
|
|
|
binDeps += plugin.trim()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-10-18 18:59:04 +02:00
|
|
|
|
2020-04-24 09:45:14 +02:00
|
|
|
return binDeps
|
2019-10-18 18:59:04 +02:00
|
|
|
}
|
2020-11-21 23:09:33 +01:00
|
|
|
|
2021-06-07 18:19:18 +02:00
|
|
|
ext.getDebugKeystoreFile = { ->
|
|
|
|
String keystoreFile = project.hasProperty("debug_keystore_file") ? project.property("debug_keystore_file") : ""
|
|
|
|
if (keystoreFile == null || keystoreFile.isEmpty()) {
|
|
|
|
keystoreFile = "."
|
|
|
|
}
|
|
|
|
return keystoreFile
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.hasCustomDebugKeystore = { ->
|
|
|
|
File keystoreFile = new File(getDebugKeystoreFile())
|
|
|
|
return keystoreFile.isFile()
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getDebugKeystorePassword = { ->
|
|
|
|
String keystorePassword = project.hasProperty("debug_keystore_password") ? project.property("debug_keystore_password") : ""
|
|
|
|
if (keystorePassword == null || keystorePassword.isEmpty()) {
|
|
|
|
keystorePassword = "android"
|
|
|
|
}
|
|
|
|
return keystorePassword
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getDebugKeyAlias = { ->
|
|
|
|
String keyAlias = project.hasProperty("debug_keystore_alias") ? project.property("debug_keystore_alias") : ""
|
|
|
|
if (keyAlias == null || keyAlias.isEmpty()) {
|
|
|
|
keyAlias = "androiddebugkey"
|
|
|
|
}
|
|
|
|
return keyAlias
|
|
|
|
}
|
|
|
|
|
2020-11-21 23:09:33 +01:00
|
|
|
ext.getReleaseKeystoreFile = { ->
|
|
|
|
String keystoreFile = project.hasProperty("release_keystore_file") ? project.property("release_keystore_file") : ""
|
|
|
|
if (keystoreFile == null || keystoreFile.isEmpty()) {
|
|
|
|
keystoreFile = "."
|
|
|
|
}
|
|
|
|
return keystoreFile
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getReleaseKeystorePassword = { ->
|
|
|
|
String keystorePassword = project.hasProperty("release_keystore_password") ? project.property("release_keystore_password") : ""
|
|
|
|
return keystorePassword
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.getReleaseKeyAlias = { ->
|
|
|
|
String keyAlias = project.hasProperty("release_keystore_alias") ? project.property("release_keystore_alias") : ""
|
|
|
|
return keyAlias
|
|
|
|
}
|
|
|
|
|
2021-03-10 09:14:57 +01:00
|
|
|
ext.isAndroidStudio = { ->
|
|
|
|
def sysProps = System.getProperties()
|
|
|
|
return sysProps != null && sysProps['idea.platform.prefix'] != null
|
|
|
|
}
|
|
|
|
|
2020-11-21 23:09:33 +01:00
|
|
|
ext.shouldZipAlign = { ->
|
|
|
|
String zipAlignFlag = project.hasProperty("perform_zipalign") ? project.property("perform_zipalign") : ""
|
|
|
|
if (zipAlignFlag == null || zipAlignFlag.isEmpty()) {
|
2021-03-10 09:14:57 +01:00
|
|
|
if (isAndroidStudio()) {
|
|
|
|
zipAlignFlag = "true"
|
|
|
|
} else {
|
|
|
|
zipAlignFlag = "false"
|
|
|
|
}
|
2020-11-21 23:09:33 +01:00
|
|
|
}
|
|
|
|
return Boolean.parseBoolean(zipAlignFlag)
|
|
|
|
}
|
|
|
|
|
|
|
|
ext.shouldSign = { ->
|
|
|
|
String signFlag = project.hasProperty("perform_signing") ? project.property("perform_signing") : ""
|
|
|
|
if (signFlag == null || signFlag.isEmpty()) {
|
2021-03-10 09:14:57 +01:00
|
|
|
if (isAndroidStudio()) {
|
|
|
|
signFlag = "true"
|
|
|
|
} else {
|
|
|
|
signFlag = "false"
|
|
|
|
}
|
2020-11-21 23:09:33 +01:00
|
|
|
}
|
|
|
|
return Boolean.parseBoolean(signFlag)
|
|
|
|
}
|
2021-03-10 09:14:57 +01:00
|
|
|
|
|
|
|
ext.shouldNotStrip = { ->
|
2021-03-11 00:03:17 +01:00
|
|
|
return isAndroidStudio() || project.hasProperty("doNotStrip")
|
2021-03-10 09:14:57 +01:00
|
|
|
}
|