microg/GmsCore · error · RuntimeException
CREATOR in is not accessible
Error message
CREATOR in is not accessible
What it means
Reflection guard in SafeParcelReflectionUtil.getCreator(Class): the CREATOR field exists but accessing it threw (e.g. setAccessible(true) blocked by hidden-API restrictions or module boundaries). The class name is embedded in the message.
Source
Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:127
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) {
return safeParcelableField.subClass();
} else {View on GitHub (pinned to 157c9d86ac)
Solutions
- Make the CREATOR field public and statically accessible
- Bypass the reflective SafeParcel path and implement an explicit CREATOR-based writer/reader for that class
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:127 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/d949f65c7db37138.
Report an issue: GitHub.