Browse Source

Display a warning if device CPU architecture is not active in the export preset.

Alexander Hartmann 1 year ago
parent
commit
293c34a2d2

+ 26 - 1
editor/editor_run_native.cpp

@@ -79,6 +79,11 @@ void EditorRunNative::_notification(int p_what) {
 	}
 	}
 }
 }
 
 
+void EditorRunNative::_confirm_run_native() {
+	run_confirmed = true;
+	resume_run_native();
+}
+
 Error EditorRunNative::start_run_native(int p_id) {
 Error EditorRunNative::start_run_native(int p_id) {
 	if (p_id < 0) {
 	if (p_id < 0) {
 		return OK;
 		return OK;
@@ -86,9 +91,9 @@ Error EditorRunNative::start_run_native(int p_id) {
 
 
 	int platform = p_id / 10000;
 	int platform = p_id / 10000;
 	int idx = p_id % 10000;
 	int idx = p_id % 10000;
+	resume_id = p_id;
 
 
 	if (!EditorNode::get_singleton()->ensure_main_scene(true)) {
 	if (!EditorNode::get_singleton()->ensure_main_scene(true)) {
-		resume_id = p_id;
 		return OK;
 		return OK;
 	}
 	}
 
 
@@ -110,6 +115,22 @@ Error EditorRunNative::start_run_native(int p_id) {
 		return ERR_UNAVAILABLE;
 		return ERR_UNAVAILABLE;
 	}
 	}
 
 
+	String architecture = eep->get_device_architecture(idx);
+	if (!run_confirmed && !architecture.is_empty()) {
+		String preset_arch = "architectures/" + architecture;
+		bool is_arch_enabled = preset->get(preset_arch);
+
+		if (!is_arch_enabled) {
+			String warning_message = vformat(TTR("Warning: The CPU architecture '%s' is not active in your export preset.\n\n"), Variant(architecture));
+			warning_message += TTR("Run 'Remote Debug' anyway?");
+
+			run_native_confirm->set_text(warning_message);
+			run_native_confirm->popup_centered();
+			return OK;
+		}
+	}
+	run_confirmed = false;
+
 	emit_signal(SNAME("native_run"), preset);
 	emit_signal(SNAME("native_run"), preset);
 
 
 	int flags = 0;
 	int flags = 0;
@@ -174,5 +195,9 @@ EditorRunNative::EditorRunNative() {
 	add_child(result_dialog);
 	add_child(result_dialog);
 	result_dialog->hide();
 	result_dialog->hide();
 
 
+	run_native_confirm = memnew(ConfirmationDialog);
+	add_child(run_native_confirm);
+	run_native_confirm->connect("confirmed", callable_mp(this, &EditorRunNative::_confirm_run_native));
+
 	set_process(true);
 	set_process(true);
 }
 }

+ 4 - 0
editor/editor_run_native.h

@@ -41,12 +41,16 @@ class EditorRunNative : public HBoxContainer {
 
 
 	RichTextLabel *result_dialog_log = nullptr;
 	RichTextLabel *result_dialog_log = nullptr;
 	AcceptDialog *result_dialog = nullptr;
 	AcceptDialog *result_dialog = nullptr;
+	ConfirmationDialog *run_native_confirm = nullptr;
+	bool run_confirmed = false;
 
 
 	MenuButton *remote_debug = nullptr;
 	MenuButton *remote_debug = nullptr;
 	bool first = true;
 	bool first = true;
 
 
 	int resume_id = -1;
 	int resume_id = -1;
 
 
+	void _confirm_run_native();
+
 protected:
 protected:
 	static void _bind_methods();
 	static void _bind_methods();
 	void _notification(int p_what);
 	void _notification(int p_what);

+ 1 - 0
editor/export/editor_export_platform.h

@@ -227,6 +227,7 @@ public:
 	virtual Ref<ImageTexture> get_option_icon(int p_index) const;
 	virtual Ref<ImageTexture> get_option_icon(int p_index) const;
 	virtual String get_option_label(int p_device) const { return ""; }
 	virtual String get_option_label(int p_device) const { return ""; }
 	virtual String get_option_tooltip(int p_device) const { return ""; }
 	virtual String get_option_tooltip(int p_device) const { return ""; }
+	virtual String get_device_architecture(int p_device) const { return ""; }
 
 
 	enum DebugFlags {
 	enum DebugFlags {
 		DEBUG_FLAG_DUMB_CLIENT = 1,
 		DEBUG_FLAG_DUMB_CLIENT = 1,

+ 8 - 1
platform/android/export/export_plugin.cpp

@@ -379,7 +379,8 @@ void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) {
 							} else if (p.begins_with("ro.build.version.sdk=")) {
 							} else if (p.begins_with("ro.build.version.sdk=")) {
 								d.api_level = p.get_slice("=", 1).to_int();
 								d.api_level = p.get_slice("=", 1).to_int();
 							} else if (p.begins_with("ro.product.cpu.abi=")) {
 							} else if (p.begins_with("ro.product.cpu.abi=")) {
-								d.description += "CPU: " + p.get_slice("=", 1).strip_edges() + "\n";
+								d.architecture = p.get_slice("=", 1).strip_edges();
+								d.description += "CPU: " + d.architecture + "\n";
 							} else if (p.begins_with("ro.product.manufacturer=")) {
 							} else if (p.begins_with("ro.product.manufacturer=")) {
 								d.description += "Manufacturer: " + p.get_slice("=", 1).strip_edges() + "\n";
 								d.description += "Manufacturer: " + p.get_slice("=", 1).strip_edges() + "\n";
 							} else if (p.begins_with("ro.board.platform=")) {
 							} else if (p.begins_with("ro.board.platform=")) {
@@ -1992,6 +1993,12 @@ String EditorExportPlatformAndroid::get_option_tooltip(int p_index) const {
 	return s;
 	return s;
 }
 }
 
 
+String EditorExportPlatformAndroid::get_device_architecture(int p_index) const {
+	ERR_FAIL_INDEX_V(p_index, devices.size(), "");
+	MutexLock lock(device_lock);
+	return devices[p_index].architecture;
+}
+
 Error EditorExportPlatformAndroid::run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) {
 Error EditorExportPlatformAndroid::run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) {
 	ERR_FAIL_INDEX_V(p_device, devices.size(), ERR_INVALID_PARAMETER);
 	ERR_FAIL_INDEX_V(p_device, devices.size(), ERR_INVALID_PARAMETER);
 
 

+ 3 - 0
platform/android/export/export_plugin.h

@@ -76,6 +76,7 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
 		String name;
 		String name;
 		String description;
 		String description;
 		int api_level = 0;
 		int api_level = 0;
+		String architecture;
 	};
 	};
 
 
 	struct APKExportData {
 	struct APKExportData {
@@ -221,6 +222,8 @@ public:
 
 
 	virtual String get_option_tooltip(int p_index) const override;
 	virtual String get_option_tooltip(int p_index) const override;
 
 
+	virtual String get_device_architecture(int p_index) const override;
+
 	virtual Error run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) override;
 	virtual Error run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) override;
 
 
 	virtual Ref<Texture2D> get_run_icon() const override;
 	virtual Ref<Texture2D> get_run_icon() const override;