You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
[Export] Use project settings overrides with the target preset features instead of current platform features.
This commit is contained in:
committed by
Pāvels Nadtočajevs
parent
4248411baf
commit
c6739f64df
@@ -33,7 +33,6 @@
|
||||
#include "logo_svg.gen.h"
|
||||
#include "run_icon_svg.gen.h"
|
||||
|
||||
#include "core/config/project_settings.h"
|
||||
#include "core/io/dir_access.h"
|
||||
#include "core/io/file_access.h"
|
||||
#include "core/io/image_loader.h"
|
||||
@@ -478,12 +477,12 @@ void EditorExportPlatformAndroid::_update_preset_status() {
|
||||
}
|
||||
#endif
|
||||
|
||||
String EditorExportPlatformAndroid::get_project_name(const String &p_name) const {
|
||||
String EditorExportPlatformAndroid::get_project_name(const Ref<EditorExportPreset> &p_preset, const String &p_name) const {
|
||||
String aname;
|
||||
if (!p_name.is_empty()) {
|
||||
aname = p_name;
|
||||
} else {
|
||||
aname = GLOBAL_GET("application/config/name");
|
||||
aname = get_project_setting(p_preset, "application/config/name");
|
||||
}
|
||||
|
||||
if (aname.is_empty()) {
|
||||
@@ -493,17 +492,17 @@ String EditorExportPlatformAndroid::get_project_name(const String &p_name) const
|
||||
return aname;
|
||||
}
|
||||
|
||||
String EditorExportPlatformAndroid::get_package_name(const String &p_package) const {
|
||||
String EditorExportPlatformAndroid::get_package_name(const Ref<EditorExportPreset> &p_preset, const String &p_package) const {
|
||||
String pname = p_package;
|
||||
String name = get_valid_basename();
|
||||
String name = get_valid_basename(p_preset);
|
||||
pname = pname.replace("$genname", name);
|
||||
return pname;
|
||||
}
|
||||
|
||||
// Returns the project name without invalid characters
|
||||
// or the "noname" string if all characters are invalid.
|
||||
String EditorExportPlatformAndroid::get_valid_basename() const {
|
||||
String basename = GLOBAL_GET("application/config/name");
|
||||
String EditorExportPlatformAndroid::get_valid_basename(const Ref<EditorExportPreset> &p_preset) const {
|
||||
String basename = get_project_setting(p_preset, "application/config/name");
|
||||
basename = basename.to_lower();
|
||||
|
||||
String name;
|
||||
@@ -531,8 +530,8 @@ String EditorExportPlatformAndroid::get_assets_directory(const Ref<EditorExportP
|
||||
return gradle_build_directory.path_join(p_export_format == EXPORT_FORMAT_AAB ? AAB_ASSETS_DIRECTORY : APK_ASSETS_DIRECTORY);
|
||||
}
|
||||
|
||||
bool EditorExportPlatformAndroid::is_package_name_valid(const String &p_package, String *r_error) const {
|
||||
String pname = get_package_name(p_package);
|
||||
bool EditorExportPlatformAndroid::is_package_name_valid(const Ref<EditorExportPreset> &p_preset, const String &p_package, String *r_error) const {
|
||||
String pname = get_package_name(p_preset, p_package);
|
||||
|
||||
if (pname.length() == 0) {
|
||||
if (r_error) {
|
||||
@@ -594,12 +593,12 @@ bool EditorExportPlatformAndroid::is_package_name_valid(const String &p_package,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EditorExportPlatformAndroid::is_project_name_valid() const {
|
||||
bool EditorExportPlatformAndroid::is_project_name_valid(const Ref<EditorExportPreset> &p_preset) const {
|
||||
// Get the original project name and convert to lowercase.
|
||||
String basename = GLOBAL_GET("application/config/name");
|
||||
String basename = get_project_setting(p_preset, "application/config/name");
|
||||
basename = basename.to_lower();
|
||||
// Check if there are invalid characters.
|
||||
if (basename != get_valid_basename()) {
|
||||
if (basename != get_valid_basename(p_preset)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -858,9 +857,9 @@ bool EditorExportPlatformAndroid::_has_manage_external_storage_permission(const
|
||||
return p_permissions.has("android.permission.MANAGE_EXTERNAL_STORAGE");
|
||||
}
|
||||
|
||||
bool EditorExportPlatformAndroid::_uses_vulkan() {
|
||||
String rendering_method = GLOBAL_GET("rendering/renderer/rendering_method.mobile");
|
||||
String rendering_driver = GLOBAL_GET("rendering/rendering_device/driver.android");
|
||||
bool EditorExportPlatformAndroid::_uses_vulkan(const Ref<EditorExportPreset> &p_preset) const {
|
||||
String rendering_method = get_project_setting(p_preset, "rendering/renderer/rendering_method.mobile");
|
||||
String rendering_driver = get_project_setting(p_preset, "rendering/rendering_device/driver.android");
|
||||
return (rendering_method == "forward_plus" || rendering_method == "mobile") && rendering_driver == "vulkan";
|
||||
}
|
||||
|
||||
@@ -964,7 +963,7 @@ void EditorExportPlatformAndroid::_get_manifest_info(const Ref<EditorExportPrese
|
||||
}
|
||||
}
|
||||
|
||||
if (_uses_vulkan()) {
|
||||
if (_uses_vulkan(p_preset)) {
|
||||
// Require vulkan hardware level 1 support
|
||||
FeatureInfo vulkan_level = {
|
||||
"android.hardware.vulkan.level", // name
|
||||
@@ -984,7 +983,7 @@ void EditorExportPlatformAndroid::_get_manifest_info(const Ref<EditorExportPrese
|
||||
|
||||
MetadataInfo rendering_method_metadata = {
|
||||
"org.godotengine.rendering.method",
|
||||
GLOBAL_GET("rendering/renderer/rendering_method.mobile")
|
||||
p_preset->get_project_setting("rendering/renderer/rendering_method.mobile")
|
||||
};
|
||||
r_metadata.append(rendering_method_metadata);
|
||||
|
||||
@@ -1121,7 +1120,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||
String package_name = p_preset->get("package/unique_name");
|
||||
|
||||
const int screen_orientation =
|
||||
_get_android_orientation_value(DisplayServer::ScreenOrientation(int(GLOBAL_GET("display/window/handheld/orientation"))));
|
||||
_get_android_orientation_value(DisplayServer::ScreenOrientation(int(get_project_setting(p_preset, "display/window/handheld/orientation"))));
|
||||
|
||||
bool screen_support_small = p_preset->get("screen/support_small");
|
||||
bool screen_support_normal = p_preset->get("screen/support_normal");
|
||||
@@ -1132,7 +1131,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||
int app_category = p_preset->get("package/app_category");
|
||||
bool retain_data_on_uninstall = p_preset->get("package/retain_data_on_uninstall");
|
||||
bool exclude_from_recents = p_preset->get("package/exclude_from_recents");
|
||||
bool is_resizeable = bool(GLOBAL_GET("display/window/size/resizable"));
|
||||
bool is_resizeable = bool(get_project_setting(p_preset, "display/window/size/resizable"));
|
||||
|
||||
Vector<String> perms;
|
||||
Vector<FeatureInfo> features;
|
||||
@@ -1206,7 +1205,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||
|
||||
//replace project information
|
||||
if (tname == "manifest" && attrname == "package") {
|
||||
string_table.write[attr_value] = get_package_name(package_name);
|
||||
string_table.write[attr_value] = get_package_name(p_preset, package_name);
|
||||
}
|
||||
|
||||
if (tname == "manifest" && attrname == "versionCode") {
|
||||
@@ -1254,7 +1253,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
|
||||
}
|
||||
|
||||
if (tname == "provider" && attrname == "authorities") {
|
||||
string_table.write[attr_value] = get_package_name(package_name) + String(".fileprovider");
|
||||
string_table.write[attr_value] = get_package_name(p_preset, package_name) + String(".fileprovider");
|
||||
}
|
||||
|
||||
if (tname == "supports-screens") {
|
||||
@@ -1701,7 +1700,7 @@ void EditorExportPlatformAndroid::_fix_resources(const Ref<EditorExportPreset> &
|
||||
Vector<String> string_table;
|
||||
|
||||
String package_name = p_preset->get("package/name");
|
||||
Dictionary appnames = GLOBAL_GET("application/config/name_localized");
|
||||
Dictionary appnames = get_project_setting(p_preset, "application/config/name_localized");
|
||||
|
||||
for (uint32_t i = 0; i < string_count; i++) {
|
||||
uint32_t offset = decode_uint32(&r_manifest[string_table_begins + i * 4]);
|
||||
@@ -1712,14 +1711,14 @@ void EditorExportPlatformAndroid::_fix_resources(const Ref<EditorExportPreset> &
|
||||
if (str.begins_with("godot-project-name")) {
|
||||
if (str == "godot-project-name") {
|
||||
//project name
|
||||
str = get_project_name(package_name);
|
||||
str = get_project_name(p_preset, package_name);
|
||||
|
||||
} else {
|
||||
String lang = str.substr(str.rfind_char('-') + 1).replace("-", "_");
|
||||
if (appnames.has(lang)) {
|
||||
str = appnames[lang];
|
||||
} else {
|
||||
str = get_project_name(package_name);
|
||||
str = get_project_name(p_preset, package_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1811,7 +1810,7 @@ void EditorExportPlatformAndroid::_process_launcher_icons(const String &p_file_n
|
||||
}
|
||||
|
||||
void EditorExportPlatformAndroid::load_icon_refs(const Ref<EditorExportPreset> &p_preset, Ref<Image> &icon, Ref<Image> &foreground, Ref<Image> &background, Ref<Image> &monochrome) {
|
||||
String project_icon_path = GLOBAL_GET("application/config/icon");
|
||||
String project_icon_path = get_project_setting(p_preset, "application/config/icon");
|
||||
|
||||
Error err = OK;
|
||||
|
||||
@@ -1940,7 +1939,7 @@ String EditorExportPlatformAndroid::get_export_option_warning(const EditorExport
|
||||
String pn = p_preset->get("package/unique_name");
|
||||
String pn_err;
|
||||
|
||||
if (!is_package_name_valid(pn, &pn_err)) {
|
||||
if (!is_package_name_valid(Ref<EditorExportPreset>(p_preset), pn, &pn_err)) {
|
||||
return TTR("Invalid package name:") + " " + pn_err;
|
||||
}
|
||||
} else if (p_name == "gesture/swipe_to_dismiss") {
|
||||
@@ -2289,7 +2288,7 @@ Error EditorExportPlatformAndroid::run(const Ref<EditorExportPreset> &p_preset,
|
||||
args.push_back("--user");
|
||||
args.push_back("0");
|
||||
}
|
||||
args.push_back(get_package_name(package_name));
|
||||
args.push_back(get_package_name(p_preset, package_name));
|
||||
|
||||
output.clear();
|
||||
err = OS::get_singleton()->execute(adb, args, &output, &rv, true);
|
||||
@@ -2394,16 +2393,16 @@ Error EditorExportPlatformAndroid::run(const Ref<EditorExportPreset> &p_preset,
|
||||
// Going with implicit launch first based on the LAUNCHER category and the app's package.
|
||||
args.push_back("-c");
|
||||
args.push_back("android.intent.category.LAUNCHER");
|
||||
args.push_back(get_package_name(package_name));
|
||||
args.push_back(get_package_name(p_preset, package_name));
|
||||
|
||||
output.clear();
|
||||
err = OS::get_singleton()->execute(adb, args, &output, &rv, true);
|
||||
print_verbose(output);
|
||||
if (err || rv != 0 || output.contains("Error: Activity not started")) {
|
||||
// The implicit launch failed, let's try an explicit launch by specifying the component name before giving up.
|
||||
const String component_name = get_package_name(package_name) + "/com.godot.game.GodotApp";
|
||||
const String component_name = get_package_name(p_preset, package_name) + "/com.godot.game.GodotApp";
|
||||
print_line("Implicit launch failed.. Trying explicit launch using", component_name);
|
||||
args.erase(get_package_name(package_name));
|
||||
args.erase(get_package_name(p_preset, package_name));
|
||||
args.push_back("-n");
|
||||
args.push_back(component_name);
|
||||
|
||||
@@ -2920,23 +2919,23 @@ bool EditorExportPlatformAndroid::has_valid_project_configuration(const Ref<Edit
|
||||
}
|
||||
}
|
||||
|
||||
String current_renderer = GLOBAL_GET("rendering/renderer/rendering_method.mobile");
|
||||
String current_renderer = get_project_setting(p_preset, "rendering/renderer/rendering_method.mobile");
|
||||
if (current_renderer == "forward_plus") {
|
||||
// Warning only, so don't override `valid`.
|
||||
err += vformat(TTR("The \"%s\" renderer is designed for Desktop devices, and is not suitable for Android devices."), current_renderer);
|
||||
err += "\n";
|
||||
}
|
||||
|
||||
if (_uses_vulkan() && min_sdk_int < VULKAN_MIN_SDK_VERSION) {
|
||||
if (_uses_vulkan(p_preset) && min_sdk_int < VULKAN_MIN_SDK_VERSION) {
|
||||
// Warning only, so don't override `valid`.
|
||||
err += vformat(TTR("\"Min SDK\" should be greater or equal to %d for the \"%s\" renderer."), VULKAN_MIN_SDK_VERSION, current_renderer);
|
||||
err += "\n";
|
||||
}
|
||||
|
||||
String package_name = p_preset->get("package/unique_name");
|
||||
if (package_name.contains("$genname") && !is_project_name_valid()) {
|
||||
if (package_name.contains("$genname") && !is_project_name_valid(p_preset)) {
|
||||
// Warning only, so don't override `valid`.
|
||||
err += vformat(TTR("The project name does not meet the requirement for the package name format and will be updated to \"%s\". Please explicitly specify the package name if needed."), get_valid_basename());
|
||||
err += vformat(TTR("The project name does not meet the requirement for the package name format and will be updated to \"%s\". Please explicitly specify the package name if needed."), get_valid_basename(p_preset));
|
||||
err += "\n";
|
||||
}
|
||||
|
||||
@@ -2954,7 +2953,7 @@ List<String> EditorExportPlatformAndroid::get_binary_extensions(const Ref<Editor
|
||||
String EditorExportPlatformAndroid::get_apk_expansion_fullpath(const Ref<EditorExportPreset> &p_preset, const String &p_path) {
|
||||
int version_code = p_preset->get("version/code");
|
||||
String package_name = p_preset->get("package/unique_name");
|
||||
String apk_file_name = "main." + itos(version_code) + "." + get_package_name(package_name) + ".obb";
|
||||
String apk_file_name = "main." + itos(version_code) + "." + get_package_name(p_preset, package_name) + ".obb";
|
||||
String fullpath = p_path.get_base_dir().path_join(apk_file_name);
|
||||
return fullpath;
|
||||
}
|
||||
@@ -3436,8 +3435,8 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
|
||||
print_verbose("Android sdk path: " + sdk_path);
|
||||
|
||||
// TODO: should we use "package/name" or "application/config/name"?
|
||||
String project_name = get_project_name(p_preset->get("package/name"));
|
||||
err = _create_project_name_strings_files(p_preset, project_name, gradle_build_directory); //project name localization.
|
||||
String project_name = get_project_name(p_preset, p_preset->get("package/name"));
|
||||
err = _create_project_name_strings_files(p_preset, project_name, gradle_build_directory, get_project_setting(p_preset, "application/config/name_localized")); //project name localization.
|
||||
if (err != OK) {
|
||||
add_message(EXPORT_MESSAGE_ERROR, TTR("Export"), TTR("Unable to overwrite res/*.xml files with project name."));
|
||||
}
|
||||
@@ -3498,7 +3497,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
|
||||
String build_path = ProjectSettings::get_singleton()->globalize_path(gradle_build_directory);
|
||||
build_command = build_path.path_join(build_command);
|
||||
|
||||
String package_name = get_package_name(p_preset->get("package/unique_name"));
|
||||
String package_name = get_package_name(p_preset, p_preset->get("package/unique_name"));
|
||||
String version_code = itos(p_preset->get("version/code"));
|
||||
String version_name = p_preset->get_version("version/name");
|
||||
String min_sdk_version = p_preset->get("gradle_build/min_sdk");
|
||||
|
||||
Reference in New Issue
Block a user