Perform a clean Gradle build if android plugins changed
Fixes #38986
(cherry picked from commit abd66c1bb0
)
This commit is contained in:
parent
1bd51883c0
commit
b6c536317b
|
@ -257,6 +257,8 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
|
||||||
};
|
};
|
||||||
|
|
||||||
Vector<PluginConfig> plugins;
|
Vector<PluginConfig> plugins;
|
||||||
|
String last_plugin_names;
|
||||||
|
uint64_t last_custom_build_time = 0;
|
||||||
volatile bool plugins_changed;
|
volatile bool plugins_changed;
|
||||||
Mutex *plugins_lock;
|
Mutex *plugins_lock;
|
||||||
Vector<Device> devices;
|
Vector<Device> devices;
|
||||||
|
@ -2201,6 +2203,29 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool is_clean_build_required(Vector<PluginConfig> enabled_plugins) {
|
||||||
|
String plugin_names = get_plugins_names(enabled_plugins);
|
||||||
|
bool first_build = last_custom_build_time == 0;
|
||||||
|
bool have_plugins_changed = false;
|
||||||
|
|
||||||
|
if (!first_build) {
|
||||||
|
have_plugins_changed = plugin_names != last_plugin_names;
|
||||||
|
if (!have_plugins_changed) {
|
||||||
|
for (int i = 0; i < enabled_plugins.size(); i++) {
|
||||||
|
if (enabled_plugins.get(i).last_updated > last_custom_build_time) {
|
||||||
|
have_plugins_changed = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
last_custom_build_time = OS::get_singleton()->get_unix_time();
|
||||||
|
last_plugin_names = plugin_names;
|
||||||
|
|
||||||
|
return have_plugins_changed || first_build;
|
||||||
|
}
|
||||||
|
|
||||||
virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) {
|
virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) {
|
||||||
|
|
||||||
ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags);
|
ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags);
|
||||||
|
@ -2250,8 +2275,12 @@ public:
|
||||||
String local_plugins_binaries = get_plugins_binaries(BINARY_TYPE_LOCAL, enabled_plugins);
|
String local_plugins_binaries = get_plugins_binaries(BINARY_TYPE_LOCAL, enabled_plugins);
|
||||||
String remote_plugins_binaries = get_plugins_binaries(BINARY_TYPE_REMOTE, enabled_plugins);
|
String remote_plugins_binaries = get_plugins_binaries(BINARY_TYPE_REMOTE, enabled_plugins);
|
||||||
String custom_maven_repos = get_plugins_custom_maven_repos(enabled_plugins);
|
String custom_maven_repos = get_plugins_custom_maven_repos(enabled_plugins);
|
||||||
|
bool clean_build_required = is_clean_build_required(enabled_plugins);
|
||||||
|
|
||||||
List<String> cmdline;
|
List<String> cmdline;
|
||||||
|
if (clean_build_required) {
|
||||||
|
cmdline.push_back("clean");
|
||||||
|
}
|
||||||
cmdline.push_back("build");
|
cmdline.push_back("build");
|
||||||
cmdline.push_back("-Pexport_package_name=" + package_name); // argument to specify the package name.
|
cmdline.push_back("-Pexport_package_name=" + package_name); // argument to specify the package name.
|
||||||
cmdline.push_back("-Pplugins_local_binaries=" + local_plugins_binaries); // argument to specify the list of plugins local dependencies.
|
cmdline.push_back("-Pplugins_local_binaries=" + local_plugins_binaries); // argument to specify the list of plugins local dependencies.
|
||||||
|
|
|
@ -70,6 +70,8 @@ The `dependencies` section and fields are optional and defined as follow:
|
||||||
struct PluginConfig {
|
struct PluginConfig {
|
||||||
// Set to true when the config file is properly loaded.
|
// Set to true when the config file is properly loaded.
|
||||||
bool valid_config = false;
|
bool valid_config = false;
|
||||||
|
// Unix timestamp of last change to this plugin.
|
||||||
|
uint64_t last_updated = 0;
|
||||||
|
|
||||||
// Required config section
|
// Required config section
|
||||||
String name;
|
String name;
|
||||||
|
@ -87,6 +89,7 @@ struct PluginConfig {
|
||||||
*/
|
*/
|
||||||
static const PluginConfig GODOT_PAYMENT = {
|
static const PluginConfig GODOT_PAYMENT = {
|
||||||
/*.valid_config =*/true,
|
/*.valid_config =*/true,
|
||||||
|
/*.last_updated =*/0,
|
||||||
/*.name =*/"GodotPayment",
|
/*.name =*/"GodotPayment",
|
||||||
/*.binary_type =*/"local",
|
/*.binary_type =*/"local",
|
||||||
/*.binary =*/"res://android/build/libs/plugins/GodotPayment.release.aar",
|
/*.binary =*/"res://android/build/libs/plugins/GodotPayment.release.aar",
|
||||||
|
@ -150,6 +153,18 @@ static inline bool is_plugin_config_valid(PluginConfig plugin_config) {
|
||||||
return valid_name && valid_binary && valid_binary_type && valid_local_dependencies;
|
return valid_name && valid_binary && valid_binary_type && valid_local_dependencies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint64_t get_plugin_modification_time(const PluginConfig &plugin_config, const String &config_path) {
|
||||||
|
uint64_t last_updated = FileAccess::get_modified_time(config_path);
|
||||||
|
last_updated = MAX(last_updated, FileAccess::get_modified_time(plugin_config.binary));
|
||||||
|
|
||||||
|
for (int i = 0; i < plugin_config.local_dependencies.size(); i++) {
|
||||||
|
String binary = plugin_config.local_dependencies.get(i);
|
||||||
|
last_updated = MAX(last_updated, FileAccess::get_modified_time(binary));
|
||||||
|
}
|
||||||
|
|
||||||
|
return last_updated;
|
||||||
|
}
|
||||||
|
|
||||||
static inline PluginConfig load_plugin_config(Ref<ConfigFile> config_file, const String &path) {
|
static inline PluginConfig load_plugin_config(Ref<ConfigFile> config_file, const String &path) {
|
||||||
PluginConfig plugin_config = {};
|
PluginConfig plugin_config = {};
|
||||||
|
|
||||||
|
@ -177,6 +192,7 @@ static inline PluginConfig load_plugin_config(Ref<ConfigFile> config_file, const
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin_config.valid_config = is_plugin_config_valid(plugin_config);
|
plugin_config.valid_config = is_plugin_config_valid(plugin_config);
|
||||||
|
plugin_config.last_updated = get_plugin_modification_time(plugin_config, path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue