diff options
Diffstat (limited to 'platform/android')
| -rw-r--r-- | platform/android/export/export.cpp | 29 | ||||
| -rw-r--r-- | platform/android/java/app/build.gradle | 5 | ||||
| -rw-r--r-- | platform/android/plugin/godot_plugin_config.h | 16 | ||||
| -rw-r--r-- | platform/android/plugin/godot_plugin_jni.cpp | 5 |
4 files changed, 53 insertions, 2 deletions
diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index dfaaf68b69..1bd198ccc0 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -254,6 +254,8 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { }; Vector<PluginConfig> plugins; + String last_plugin_names; + uint64_t last_custom_build_time = 0; volatile bool plugins_changed; Mutex plugins_lock; Vector<Device> devices; @@ -1831,6 +1833,29 @@ public: return list; } + 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) { ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags); @@ -1877,8 +1902,12 @@ public: 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 custom_maven_repos = get_plugins_custom_maven_repos(enabled_plugins); + bool clean_build_required = is_clean_build_required(enabled_plugins); List<String> cmdline; + if (clean_build_required) { + cmdline.push_back("clean"); + } cmdline.push_back("build"); 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. diff --git a/platform/android/java/app/build.gradle b/platform/android/java/app/build.gradle index ea341b37b1..19202d2310 100644 --- a/platform/android/java/app/build.gradle +++ b/platform/android/java/app/build.gradle @@ -75,6 +75,11 @@ android { } defaultConfig { + // The default ignore pattern for the 'assets' directory includes hidden files and directories which are used by Godot projects. + aaptOptions { + ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~" + } + // Feel free to modify the application id to your own. applicationId getExportPackageName() minSdkVersion versions.minSdk diff --git a/platform/android/plugin/godot_plugin_config.h b/platform/android/plugin/godot_plugin_config.h index 2151451bc8..5bc0fc3a58 100644 --- a/platform/android/plugin/godot_plugin_config.h +++ b/platform/android/plugin/godot_plugin_config.h @@ -70,6 +70,8 @@ The `dependencies` section and fields are optional and defined as follow: struct PluginConfig { // Set to true when the config file is properly loaded. bool valid_config = false; + // Unix timestamp of last change to this plugin. + uint64_t last_updated = 0; // Required config section String name; @@ -87,6 +89,7 @@ struct PluginConfig { */ static const PluginConfig GODOT_PAYMENT = { /*.valid_config =*/true, + /*.last_updated =*/0, /*.name =*/"GodotPayment", /*.binary_type =*/"local", /*.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; } +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) { 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.last_updated = get_plugin_modification_time(plugin_config, path); } } diff --git a/platform/android/plugin/godot_plugin_jni.cpp b/platform/android/plugin/godot_plugin_jni.cpp index 557743fa73..053a4c078e 100644 --- a/platform/android/plugin/godot_plugin_jni.cpp +++ b/platform/android/plugin/godot_plugin_jni.cpp @@ -114,12 +114,13 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_plugin_GodotPlugin_nativeEmitS String signal_name = jstring_to_string(j_signal_name, env); int count = env->GetArrayLength(j_signal_params); + Variant variant_params[count]; const Variant *args[count]; for (int i = 0; i < count; i++) { jobject j_param = env->GetObjectArrayElement(j_signal_params, i); - Variant variant = _jobject_to_variant(env, j_param); - args[i] = &variant; + variant_params[i] = _jobject_to_variant(env, j_param); + args[i] = &variant_params[i]; env->DeleteLocalRef(j_param); }; |
