Răsfoiți Sursa

[.NET] Require `net9.0` for Android exports

To ensure Android exports are compatible with the new Play Store
requirement that all `.so` libraries included are aligned to 16k,
we now require C# projects to target `net9.0` which uses the
correct alignment (as opposed to the current one of 4k).

The thirdparty jar library has also been updated to the one from
the 9.0.4 runtime package so it's compatible with non-gradle
builds targeting `net9.0`.

Non-android projects are not affect, the minimum TFM is still
`net8.0`.
Raul Santos 5 zile în urmă
părinte
comite
f0c9253bec

+ 4 - 0
modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs

@@ -26,6 +26,10 @@ namespace GodotTools.ProjectEditor
             var mainGroup = root.AddPropertyGroup();
             var mainGroup = root.AddPropertyGroup();
             mainGroup.AddProperty("TargetFramework", GodotMinimumRequiredTfm);
             mainGroup.AddProperty("TargetFramework", GodotMinimumRequiredTfm);
 
 
+            // Non-gradle builds require .NET 9 to match the jar libraries included in the export template.
+            var net9 = mainGroup.AddProperty("TargetFramework", "net9.0");
+            net9.Condition = " '$(GodotTargetPlatform)' == 'android' ";
+
             mainGroup.AddProperty("EnableDynamicLoading", "true");
             mainGroup.AddProperty("EnableDynamicLoading", "true");
 
 
             string sanitizedName = IdentifierUtils.SanitizeQualifiedIdentifier(name, allowEmptyIdentifiers: true);
             string sanitizedName = IdentifierUtils.SanitizeQualifiedIdentifier(name, allowEmptyIdentifiers: true);

BIN
modules/mono/thirdparty/libSystem.Security.Cryptography.Native.Android.jar


+ 1 - 0
modules/mono/thirdparty/libSystem.Security.Cryptography.Native.Android.jar.source.txt

@@ -0,0 +1 @@
+https://www.nuget.org/packages/Microsoft.NETCore.App.Runtime.Mono.android-arm64/9.0.4

+ 4 - 3
platform/android/export/export_plugin.cpp

@@ -2739,6 +2739,7 @@ bool _validate_dotnet_tfm(const String &required_tfm, String &r_error) {
 		List<String> args;
 		List<String> args;
 		args.push_back("build");
 		args.push_back("build");
 		args.push_back(project_path);
 		args.push_back(project_path);
+		args.push_back("/p:GodotTargetPlatform=android");
 		args.push_back("--getProperty:TargetFramework");
 		args.push_back("--getProperty:TargetFramework");
 
 
 		int exitcode;
 		int exitcode;
@@ -2778,9 +2779,9 @@ bool EditorExportPlatformAndroid::has_valid_export_configuration(const Ref<Edito
 	err += TTR("Exporting to Android when using C#/.NET is experimental.") + "\n";
 	err += TTR("Exporting to Android when using C#/.NET is experimental.") + "\n";
 
 
 	if (!gradle_build_enabled) {
 	if (!gradle_build_enabled) {
-		// For template exports we only support .NET 8 because the template
-		// includes .jar dependencies that may only be compatible with .NET 8.
-		if (!_validate_dotnet_tfm("net8.0", err)) {
+		// For template exports we only support .NET 9 because the template
+		// includes .jar dependencies that may only be compatible with .NET 9.
+		if (!_validate_dotnet_tfm("net9.0", err)) {
 			r_error = err;
 			r_error = err;
 			return false;
 			return false;
 		}
 		}