Просмотр исходного кода

Merge pull request #52526 from m4gr3d/add_pad_support_3x

Rémi Verschelde 4 лет назад
Родитель
Сommit
1cbb1f2796

+ 25 - 5
platform/android/export/export_plugin.cpp

@@ -221,6 +221,9 @@ static const LauncherIcon launcher_adaptive_icon_backgrounds[icon_densities_coun
 static const int EXPORT_FORMAT_APK = 0;
 static const int EXPORT_FORMAT_AAB = 1;
 
+static const char *APK_ASSETS_DIRECTORY = "res://android/build/assets";
+static const char *AAB_ASSETS_DIRECTORY = "res://android/build/assetPacks/installTime/src/main/assets";
+
 void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) {
 	EditorExportPlatformAndroid *ea = (EditorExportPlatformAndroid *)ud;
 
@@ -430,6 +433,11 @@ String EditorExportPlatformAndroid::get_package_name(const String &p_package) co
 	return pname;
 }
 
+String EditorExportPlatformAndroid::get_assets_directory(const Ref<EditorExportPreset> &p_preset) const {
+	int export_format = int(p_preset->get("custom_template/export_format"));
+	return 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 = p_package;
 
@@ -2659,11 +2667,21 @@ Error EditorExportPlatformAndroid::sign_apk(const Ref<EditorExportPreset> &p_pre
 
 void EditorExportPlatformAndroid::_clear_assets_directory() {
 	DirAccessRef da_res = DirAccess::create(DirAccess::ACCESS_RESOURCES);
-	if (da_res->dir_exists("res://android/build/assets")) {
-		print_verbose("Clearing assets directory..");
-		DirAccessRef da_assets = DirAccess::open("res://android/build/assets");
+
+	// Clear the APK assets directory
+	if (da_res->dir_exists(APK_ASSETS_DIRECTORY)) {
+		print_verbose("Clearing APK assets directory..");
+		DirAccessRef da_assets = DirAccess::open(APK_ASSETS_DIRECTORY);
+		da_assets->erase_contents_recursive();
+		da_res->remove(APK_ASSETS_DIRECTORY);
+	}
+
+	// Clear the AAB assets directory
+	if (da_res->dir_exists(AAB_ASSETS_DIRECTORY)) {
+		print_verbose("Clearing AAB assets directory..");
+		DirAccessRef da_assets = DirAccess::open(AAB_ASSETS_DIRECTORY);
 		da_assets->erase_contents_recursive();
-		da_res->remove("res://android/build/assets");
+		da_res->remove(AAB_ASSETS_DIRECTORY);
 	}
 }
 
@@ -2785,6 +2803,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
 				return ERR_UNCONFIGURED;
 			}
 		}
+		const String assets_directory = get_assets_directory(p_preset);
 		String sdk_path = EDITOR_GET("export/android/android_sdk_path");
 		ERR_FAIL_COND_V_MSG(sdk_path.empty(), ERR_UNCONFIGURED, "Android SDK path must be configured in Editor Settings at 'export/android/android_sdk_path'.");
 		print_verbose("Android sdk path: " + sdk_path);
@@ -2806,6 +2825,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
 		if (!apk_expansion) {
 			print_verbose("Exporting project files..");
 			CustomExportData user_data;
+			user_data.assets_directory = assets_directory;
 			user_data.debug = p_debug;
 			err = export_project_files(p_preset, rename_and_store_file_in_gradle_project, &user_data, copy_gradle_so);
 			if (err != OK) {
@@ -2826,7 +2846,7 @@ Error EditorExportPlatformAndroid::export_project_helper(const Ref<EditorExportP
 			}
 		}
 		print_verbose("Storing command line flags..");
-		store_file_at_path("res://android/build/assets/_cl_", command_line_flags);
+		store_file_at_path(assets_directory + "/_cl_", command_line_flags);
 
 		print_verbose("Updating ANDROID_HOME environment to " + sdk_path);
 		OS::get_singleton()->set_environment("ANDROID_HOME", sdk_path); //set and overwrite if required

+ 2 - 5
platform/android/export/export_plugin.h

@@ -87,11 +87,6 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
 		EditorProgress *ep;
 	};
 
-	struct CustomExportData {
-		bool debug;
-		Vector<String> libs;
-	};
-
 	Vector<PluginConfigAndroid> plugins;
 	String last_plugin_names;
 	uint64_t last_custom_build_time = 0;
@@ -109,6 +104,8 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
 
 	String get_package_name(const String &p_package) const;
 
+	String get_assets_directory(const Ref<EditorExportPreset> &p_preset) const;
+
 	bool is_package_name_valid(const String &p_package, String *r_error = nullptr) const;
 
 	static bool _should_compress_asset(const String &p_path, const Vector<uint8_t> &p_data);

+ 2 - 1
platform/android/export/gradle_export_util.cpp

@@ -121,7 +121,8 @@ Error store_string_at_path(const String &p_path, const String &p_data) {
 // It's functionality mirrors that of the method save_apk_file.
 // This method will be called ONLY when custom build is enabled.
 Error rename_and_store_file_in_gradle_project(void *p_userdata, const String &p_path, const Vector<uint8_t> &p_data, int p_file, int p_total) {
-	String dst_path = p_path.replace_first("res://", "res://android/build/assets/");
+	CustomExportData *export_data = (CustomExportData *)p_userdata;
+	String dst_path = p_path.replace_first("res://", export_data->assets_directory + "/");
 	print_verbose("Saving project files from " + p_path + " into " + dst_path);
 	Error err = store_file_at_path(dst_path, p_data);
 	return err;

+ 6 - 0
platform/android/export/gradle_export_util.h

@@ -44,6 +44,12 @@ const String godot_project_name_xml_string = R"(<?xml version="1.0" encoding="ut
 </resources>
 )";
 
+struct CustomExportData {
+	String assets_directory;
+	bool debug;
+	Vector<String> libs;
+};
+
 int _get_android_orientation_value(OS::ScreenOrientation screen_orientation);
 
 String _get_android_orientation_label(OS::ScreenOrientation screen_orientation);

+ 8 - 0
platform/android/java/app/assetPacks/installTime/build.gradle

@@ -0,0 +1,8 @@
+apply plugin: 'com.android.asset-pack'
+
+assetPack {
+    packName = "installTime" // Directory name for the asset pack
+    dynamicDelivery {
+        deliveryType = "install-time" // Delivery mode
+    }
+}

+ 2 - 0
platform/android/java/app/build.gradle

@@ -85,6 +85,8 @@ android {
         targetCompatibility versions.javaVersion
     }
 
+    assetPacks = [":assetPacks:installTime"]
+
     defaultConfig {
         // The default ignore pattern for the 'assets' directory includes hidden files and directories which are used by Godot projects.
         aaptOptions {

+ 2 - 2
platform/android/java/app/settings.gradle

@@ -1,2 +1,2 @@
-// Empty settings.gradle file to denote this directory as being the root project
-// of the Godot custom build.
+// This is the root directory of the Godot custom build.
+include ':assetPacks:installTime'

+ 3 - 0
platform/android/java/settings.gradle

@@ -4,3 +4,6 @@ rootProject.name = "Godot"
 include ':app'
 include ':lib'
 include ':nativeSrcsConfigs'
+
+include ':assetPacks:installTime'
+project(':assetPacks:installTime').projectDir = file("app/assetPacks/installTime")