You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-02 16:48:55 +00:00
Merge pull request #13232 from endragor/android-multiple-icons
Allow to specify multiple resolution Android icons
This commit is contained in:
@@ -192,6 +192,19 @@ static const char *android_perms[] = {
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct LauncherIcon {
|
||||||
|
char *option_id;
|
||||||
|
char *export_path;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const LauncherIcon launcher_icons[] = {
|
||||||
|
{ "launcher_icons/xxxhdpi_192x192", "res/drawable-xxxhdpi-v4/icon.png" },
|
||||||
|
{ "launcher_icons/xxhdpi_144x144", "res/drawable-xxhdpi-v4/icon.png" },
|
||||||
|
{ "launcher_icons/xhdpi_96x96", "res/drawable-xhdpi-v4/icon.png" },
|
||||||
|
{ "launcher_icons/hdpi_72x72", "res/drawable-hdpi-v4/icon.png" },
|
||||||
|
{ "launcher_icons/mdpi_48x48", "res/drawable-mdpi-v4/icon.png" }
|
||||||
|
};
|
||||||
|
|
||||||
class EditorExportAndroid : public EditorExportPlatform {
|
class EditorExportAndroid : public EditorExportPlatform {
|
||||||
|
|
||||||
GDCLASS(EditorExportAndroid, EditorExportPlatform)
|
GDCLASS(EditorExportAndroid, EditorExportPlatform)
|
||||||
@@ -1002,7 +1015,6 @@ public:
|
|||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "version/name"), "1.0"));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "version/name"), "1.0"));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/unique_name"), "org.godotengine.$genname"));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/unique_name"), "org.godotengine.$genname"));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/name"), ""));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/name"), ""));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/icon", PROPERTY_HINT_FILE, "png"), ""));
|
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "package/signed"), true));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "package/signed"), true));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "screen/orientation", PROPERTY_HINT_ENUM, "Landscape,Portrait"), 0));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "screen/orientation", PROPERTY_HINT_ENUM, "Landscape,Portrait"), 0));
|
||||||
@@ -1010,6 +1022,11 @@ public:
|
|||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_normal"), true));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_normal"), true));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_large"), true));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_large"), true));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_xlarge"), true));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_xlarge"), true));
|
||||||
|
|
||||||
|
for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
|
||||||
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icons[i].option_id, PROPERTY_HINT_FILE, "png"), ""));
|
||||||
|
}
|
||||||
|
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release", PROPERTY_HINT_GLOBAL_FILE, "keystore"), ""));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release", PROPERTY_HINT_GLOBAL_FILE, "keystore"), ""));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_user"), ""));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_user"), ""));
|
||||||
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_password"), ""));
|
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/release_password"), ""));
|
||||||
@@ -1390,23 +1407,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (file == "res/drawable/icon.png") {
|
if (file == "res/drawable/icon.png") {
|
||||||
|
|
||||||
String icon = p_preset->get("package/icon");
|
|
||||||
icon = icon.strip_edges();
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
|
||||||
if (icon != "" && icon.ends_with(".png")) {
|
String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
|
||||||
|
if (icon_path != "" && icon_path.ends_with(".png")) {
|
||||||
FileAccess *f = FileAccess::open(icon, FileAccess::READ);
|
FileAccess *f = FileAccess::open(icon_path, FileAccess::READ);
|
||||||
if (f) {
|
if (f) {
|
||||||
|
data.resize(f->get_len());
|
||||||
data.resize(f->get_len());
|
f->get_buffer(data.ptr(), data.size());
|
||||||
f->get_buffer(data.ptr(), data.size());
|
memdelete(f);
|
||||||
memdelete(f);
|
found = true;
|
||||||
found = true;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found) {
|
if (!found) {
|
||||||
|
|
||||||
String appicon = ProjectSettings::get_singleton()->get("application/config/icon");
|
String appicon = ProjectSettings::get_singleton()->get("application/config/icon");
|
||||||
@@ -1515,6 +1529,19 @@ public:
|
|||||||
|
|
||||||
err = export_project_files(p_preset, save_apk_file, &ed, save_apk_so);
|
err = export_project_files(p_preset, save_apk_file, &ed, save_apk_so);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!err) {
|
||||||
|
APKExportData ed;
|
||||||
|
ed.ep = &ep;
|
||||||
|
ed.apk = unaligned_apk;
|
||||||
|
for (int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
|
||||||
|
String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
|
||||||
|
if (icon_path != "" && icon_path.ends_with(".png") && FileAccess::exists(icon_path)) {
|
||||||
|
Vector<uint8_t> data = FileAccess::get_file_as_array(icon_path);
|
||||||
|
store_in_apk(&ed, launcher_icons[i].export_path, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (use_32_fb)
|
if (use_32_fb)
|
||||||
|
|||||||
Reference in New Issue
Block a user