microg/GmsCore · error · RuntimeException
is an Parcelable without CREATOR
Error message
is an Parcelable without CREATOR
What it means
Thrown in SafeParcelReflectionUtil.getCreator(Class) when the Parcelable class declares no CREATOR field (getDeclaredField threw NoSuchFieldException). The class name is appended; the type violates the Parcelable contract.
Source
Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:125
private static Parcelable.Creator<Parcelable> getCreator(Field field) {
Class<?> clazz = field.getType();
if (clazz.isArray()) {
clazz = clazz.getComponentType();
}
if (clazz != null && Parcelable.class.isAssignableFrom(clazz)) {
return getCreator((Class<? extends Parcelable>) clazz);
}
throw new RuntimeException(clazz + " is not an Parcelable");
}
@SuppressWarnings("unchecked")
public static Parcelable.Creator<Parcelable> getCreator(Class<? extends Parcelable> clazz) {
try {
Field creatorField = clazz.getDeclaredField("CREATOR");
creatorField.setAccessible(true);
return (Parcelable.Creator<Parcelable>) creatorField.get(null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(clazz + " is an Parcelable without CREATOR");
} catch (IllegalAccessException e) {
throw new RuntimeException("CREATOR in " + clazz + " is not accessible");
}
}
@SuppressWarnings("deprecation")
private static Class<?> getSubClass(Field field) {
SafeParceled safeParceled = field.getAnnotation(SafeParceled.class);
SafeParcelable.Field safeParcelableField = field.getAnnotation(SafeParcelable.Field.class);
if (safeParceled != null && safeParceled.subClass() != SafeParceled.class) {
return safeParceled.subClass();
} else if (safeParceled != null && !"undefined".equals(safeParceled.subType())) {
try {
return Class.forName(safeParceled.subType());
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(e);
}
} else if (safeParcelableField != null && safeParcelableField.subClass() != SafeParcelable.class) {View on GitHub (pinned to 157c9d86ac)
Solutions
- Add a public static Parcelable.Creator CREATOR field to the class
- Use a field type that already exposes a CREATOR
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:125 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/a3bf9989aa4f9fec.
Report an issue: GitHub.