浏览代码

Add support for prompting the user to retain app data on uninstall.

Supported on Android 10 and higher.
Fredia Huya-Kouadio 4 年之前
父节点
当前提交
e73e336e3b

+ 6 - 0
platform/android/export/export_plugin.cpp

@@ -819,6 +819,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
 
 
 	bool backup_allowed = p_preset->get("user_data_backup/allow");
 	bool backup_allowed = p_preset->get("user_data_backup/allow");
 	bool classify_as_game = p_preset->get("package/classify_as_game");
 	bool classify_as_game = p_preset->get("package/classify_as_game");
+	bool retain_data_on_uninstall = p_preset->get("package/retain_data_on_uninstall");
 
 
 	Vector<String> perms;
 	Vector<String> perms;
 	// Write permissions into the perms variable.
 	// Write permissions into the perms variable.
@@ -920,6 +921,10 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
 						encode_uint32(classify_as_game, &p_manifest.write[iofs + 16]);
 						encode_uint32(classify_as_game, &p_manifest.write[iofs + 16]);
 					}
 					}
 
 
+					if (tname == "application" && attrname == "hasFragileUserData") {
+						encode_uint32(retain_data_on_uninstall, &p_manifest.write[iofs + 16]);
+					}
+
 					if (tname == "instrumentation" && attrname == "targetPackage") {
 					if (tname == "instrumentation" && attrname == "targetPackage") {
 						string_table.write[attr_value] = get_package_name(package_name);
 						string_table.write[attr_value] = get_package_name(package_name);
 					}
 					}
@@ -1635,6 +1640,7 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio
 	r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/name", PROPERTY_HINT_PLACEHOLDER_TEXT, "Game Name [default if blank]"), ""));
 	r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "package/name", PROPERTY_HINT_PLACEHOLDER_TEXT, "Game Name [default if blank]"), ""));
 	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, "package/classify_as_game"), true));
 	r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "package/classify_as_game"), true));
+	r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "package/retain_data_on_uninstall"), false));
 
 
 	r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icon_option, PROPERTY_HINT_FILE, "*.png"), ""));
 	r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icon_option, PROPERTY_HINT_FILE, "*.png"), ""));
 	r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_foreground_option, PROPERTY_HINT_FILE, "*.png"), ""));
 	r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_foreground_option, PROPERTY_HINT_FILE, "*.png"), ""));

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

@@ -241,10 +241,12 @@ String _get_application_tag(const Ref<EditorExportPreset> &p_preset) {
 			"        android:allowBackup=\"%s\"\n"
 			"        android:allowBackup=\"%s\"\n"
 			"        android:icon=\"@mipmap/icon\"\n"
 			"        android:icon=\"@mipmap/icon\"\n"
 			"        android:isGame=\"%s\"\n"
 			"        android:isGame=\"%s\"\n"
-			"        tools:replace=\"android:allowBackup,android:isGame\"\n"
+			"        android:hasFragileUserData=\"%s\"\n"
+			"        tools:replace=\"android:allowBackup,android:isGame,android:hasFragileUserData\"\n"
 			"        tools:ignore=\"GoogleAppIndexingWarning\">\n\n",
 			"        tools:ignore=\"GoogleAppIndexingWarning\">\n\n",
 			bool_to_string(p_preset->get("user_data_backup/allow")),
 			bool_to_string(p_preset->get("user_data_backup/allow")),
-			bool_to_string(p_preset->get("package/classify_as_game")));
+			bool_to_string(p_preset->get("package/classify_as_game")),
+			bool_to_string(p_preset->get("package/retain_data_on_uninstall")));
 
 
 	manifest_application_text += _get_activity_tag(p_preset);
 	manifest_application_text += _get_activity_tag(p_preset);
 	manifest_application_text += "    </application>\n";
 	manifest_application_text += "    </application>\n";

+ 1 - 0
platform/android/java/app/AndroidManifest.xml

@@ -21,6 +21,7 @@
         android:allowBackup="false"
         android:allowBackup="false"
         android:icon="@mipmap/icon"
         android:icon="@mipmap/icon"
         android:isGame="true"
         android:isGame="true"
+        android:hasFragileUserData="false"
         tools:ignore="GoogleAppIndexingWarning" >
         tools:ignore="GoogleAppIndexingWarning" >
 
 
         <!-- Records the version of the Godot editor used for building -->
         <!-- Records the version of the Godot editor used for building -->