ext.versions = [ androidGradlePlugin: '4.2.2', compileSdk : 30, minSdk : 19, targetSdk : 30, buildTools : '30.0.3', supportCoreUtils : '1.0.0', kotlinVersion : '1.5.10', v4Support : '1.0.0', javaVersion : 1.8, ndkVersion : '21.4.7075529' // Also update 'platform/android/detect.py#get_project_ndk_version()' when this is updated. ] ext.libraries = [ androidGradlePlugin: "com.android.tools.build:gradle:$versions.androidGradlePlugin", supportCoreUtils : "androidx.legacy:legacy-support-core-utils:$versions.supportCoreUtils", kotlinGradlePlugin : "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlinVersion", kotlinStdLib : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$versions.kotlinVersion", v4Support : "androidx.legacy:legacy-support-v4:$versions.v4Support" ] ext.getExportPackageName = { -> // 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 } ext.getExportVersionCode = { -> String versionCode = project.hasProperty("export_version_code") ? project.property("export_version_code") : "" if (versionCode == null || versionCode.isEmpty()) { versionCode = "1" } try { return Integer.parseInt(versionCode) } catch (NumberFormatException ignored) { return 1 } } ext.getExportVersionName = { -> String versionName = project.hasProperty("export_version_name") ? project.property("export_version_name") : "" if (versionName == null || versionName.isEmpty()) { versionName = "1.0" } return versionName } ext.getGodotEditorVersion = { -> String editorVersion = project.hasProperty("godot_editor_version") ? project.property("godot_editor_version") : "" if (editorVersion == null || editorVersion.isEmpty()) { // Try the library version first editorVersion = getGodotLibraryVersion() if (editorVersion.isEmpty()) { // Fallback value. editorVersion = "custom_build" } } return editorVersion } ext.getGodotLibraryVersion = { -> // Attempt to read the version from the `version.py` file. String libraryVersion = "" File versionFile = new File("../../../version.py") if (versionFile.isFile()) { List requiredKeys = ["major", "minor", "patch", "status", "module_config"] def map = [:] List 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) { libraryVersion = map.values().join(".") } } if (libraryVersion.isEmpty()) { // Fallback value in case we're unable to read the file. libraryVersion = "custom_build" } return libraryVersion } final String VALUE_SEPARATOR_REGEX = "\\|" // 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 exportAbiFilter = []; for (String abi_name : enabledABIs.split(VALUE_SEPARATOR_REGEX)) { 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 } /** * Parse the project properties for the 'plugins_maven_repos' property and return the list * of maven repos. */ ext.getGodotPluginsMavenRepos = { -> Set mavenRepos = [] // 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()) { for (String mavenRepoUrl : mavenReposProperty.split(VALUE_SEPARATOR_REGEX)) { mavenRepos += mavenRepoUrl.trim() } } } return mavenRepos } /** * Parse the project properties for the 'plugins_remote_binaries' property and return * it for inclusion in the build dependencies. */ ext.getGodotPluginsRemoteBinaries = { -> Set 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()) { for (String dep: remoteDepsList.split(VALUE_SEPARATOR_REGEX)) { remoteDeps += dep.trim() } } } return remoteDeps } /** * Parse the project properties for the 'plugins_local_binaries' property and return * their binaries for inclusion in the build dependencies. */ ext.getGodotPluginsLocalBinaries = { -> Set binDeps = [] // 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()) { for (String plugin : pluginsList.split(VALUE_SEPARATOR_REGEX)) { binDeps += plugin.trim() } } } return binDeps } 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 } 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 } ext.isAndroidStudio = { -> def sysProps = System.getProperties() return sysProps != null && sysProps['idea.platform.prefix'] != null } ext.shouldZipAlign = { -> String zipAlignFlag = project.hasProperty("perform_zipalign") ? project.property("perform_zipalign") : "" if (zipAlignFlag == null || zipAlignFlag.isEmpty()) { if (isAndroidStudio()) { zipAlignFlag = "true" } else { zipAlignFlag = "false" } } return Boolean.parseBoolean(zipAlignFlag) } ext.shouldSign = { -> String signFlag = project.hasProperty("perform_signing") ? project.property("perform_signing") : "" if (signFlag == null || signFlag.isEmpty()) { if (isAndroidStudio()) { signFlag = "true" } else { signFlag = "false" } } return Boolean.parseBoolean(signFlag) } ext.shouldNotStrip = { -> return isAndroidStudio() || project.hasProperty("doNotStrip") }