diff --git a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/MonoDroidMarkStep.cs b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/MonoDroidMarkStep.cs index b194bf8618d..3bbcf2bbe7f 100644 --- a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/MonoDroidMarkStep.cs +++ b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/MonoDroidMarkStep.cs @@ -11,6 +11,7 @@ namespace MonoDroid.Tuner class MonoDroidMarkStep : MarkStep { const string RegisterAttribute = "Android.Runtime.RegisterAttribute"; + const string ICustomMarshalerName = "System.Runtime.InteropServices.ICustomMarshaler"; // If this is one of our infrastructure methods that has [Register], like: // [Register ("hasWindowFocus", "()Z", "GetHasWindowFocusHandler")], @@ -142,6 +143,15 @@ protected override TypeDefinition MarkType (TypeReference reference) if (type.Module.Assembly.Name.Name == "System.Core") ProcessSystemCore (type); + if (type.HasMethods && type.HasInterfaces && type.Implements (ICustomMarshalerName)) { + foreach (MethodDefinition method in type.Methods) { + if (method.Name == "GetInstance" && method.IsStatic && method.HasParameters && method.Parameters.Count == 1 && method.ReturnType.FullName == ICustomMarshalerName && method.Parameters.First ().ParameterType.FullName == "System.String") { + MarkMethod (method); + break; + } + } + } + return type; }