microg/GmsCore · error · RuntimeException
Field has broken interface:
Error message
Field has broken interface:
What it means
Wraps a reflection failure in SafeParcelReflectionUtil.readField while reading a typed field (e.g. an interface-typed field whose Stub.asInterface lookup failed). The field details prefix the message and the cause identifies the broken reflective operation — the field's declared type does not match the parcelled representation.
Source
Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:287
switch (descriptor.type) {
case Parcelable:
descriptor.field.set(object, SafeParcelReader.readParcelable(parcel, header, descriptor.creator));
break;
case Binder:
descriptor.field.set(object, SafeParcelReader.readBinder(parcel, header));
break;
case Interface: {
boolean hasStub = false;
for (Class<?> aClass : descriptor.field.getType().getDeclaredClasses()) {
try {
descriptor.field.set(object, aClass.getDeclaredMethod("asInterface", IBinder.class)
.invoke(null, SafeParcelReader.readBinder(parcel, header)));
hasStub = true;
break;
} catch (Exception ignored) {
}
}
if (!hasStub) throw new RuntimeException("Field has broken interface: " + descriptor.field);
break;
}
case StringList:
descriptor.field.set(object, SafeParcelReader.readStringList(parcel, header));
break;
case IntegerList:
descriptor.field.set(object, SafeParcelReader.readIntegerList(parcel, header));
break;
case BooleanList:
descriptor.field.set(object, SafeParcelReader.readBooleanList(parcel, header));
break;
case LongList:
descriptor.field.set(object, SafeParcelReader.readLongList(parcel, header));
break;
case FloatList:
descriptor.field.set(object, SafeParcelReader.readFloatList(parcel, header));
break;
case DoubleList:View on GitHub (pinned to 157c9d86ac)
Solutions
- Fix the field's declared type to match the parcelled data (IBinder, Parcelable, or concrete class)
- Ensure nested Stub classes exist for interface-typed fields
- Catch the RuntimeException and treat the parcel as unreadable
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:287 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of microg/GmsCore@157c9d86ac (2026-09-06).
Data as JSON: /api/errors/fc307ed37e7a3b51.
Report an issue: GitHub.