Part of #10788
Problem
TrimmableTypeMapTypeManager does not override GetStaticMethodFallbackTypesCore(). The legacy ManagedTypeManager overrides this to support Java 8+ default interface methods that are desugared by D8/R8:
// ManagedTypeManager.cs:155-166
protected override IReadOnlyList<string>? GetStaticMethodFallbackTypesCore(string jniSimpleReference)
{
int slash = jniSimpleReference.LastIndexOf('/');
var desugarType = slash > 0
? $"{jniSimpleReference.Substring(0, slash + 1)}Desugar{jniSimpleReference.Substring(slash + 1)}"
: $"Desugar{jniSimpleReference}";
return new[] {
$"{desugarType}$_CC",
$"{jniSimpleReference}$-CC",
};
}
Without this, calls to desugared default interface methods will fail with NoSuchMethodError at runtime when using the trimmable type map.
Fix
Add the same override to TrimmableTypeMapTypeManager. This is a 1-line method copy.
Impact
Any app using Java libraries with default interface methods (Java 8+ feature, very common in modern Android libraries like AndroidX) could be affected.
Part of #10788
Problem
TrimmableTypeMapTypeManagerdoes not overrideGetStaticMethodFallbackTypesCore(). The legacyManagedTypeManageroverrides this to support Java 8+ default interface methods that are desugared by D8/R8:Without this, calls to desugared default interface methods will fail with
NoSuchMethodErrorat runtime when using the trimmable type map.Fix
Add the same override to
TrimmableTypeMapTypeManager. This is a 1-line method copy.Impact
Any app using Java libraries with default interface methods (Java 8+ feature, very common in modern Android libraries like AndroidX) could be affected.