{"record":{"id":"a26793d8a4bd3704","repo":"microg/GmsCore","slug":"service-not-supported","errorCode":null,"errorMessage":"Service not supported: ","messagePattern":"Service not supported: ","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"play-services-base/core/src/main/java/org/microg/gms/AbstractGmsServiceBroker.java","lineNumber":259,"sourceCode":"        getService(callback, request);\n    }\n\n    private Scope[] scopesFromStringArray(String[] arr) {\n        Scope[] scopes = new Scope[arr.length];\n        for (int i = 0; i < arr.length; i++) {\n            scopes[i] = new Scope(arr[i]);\n        }\n        return scopes;\n    }\n\n    @Override\n    public void getService(IGmsCallbacks callback, GetServiceRequest request) throws RemoteException {\n        GmsService gmsService = GmsService.byServiceId(request.serviceId);\n        if ((supportedServices.contains(gmsService)) || supportedServices.contains(GmsService.ANY)) {\n            handleServiceRequest(callback, request, gmsService);\n        } else {\n            Log.d(TAG, \"Service not supported: \" + request);\n            throw new IllegalArgumentException(\"Service not supported: \" + request.serviceId);\n        }\n    }\n\n    public abstract void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException;\n\n    @Override\n    public void validateAccount(IGmsCallbacks callback, ValidateAccountRequest request) throws RemoteException {\n        throw new IllegalArgumentException(\"ValidateAccountRequest not supported\");\n    }\n\n    @Override\n    public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {\n        if (super.onTransact(code, data, reply, flags)) return true;\n        Log.d(TAG, \"onTransact [unknown]: \" + code + \", \" + data + \", \" + flags);\n        return false;\n    }\n}\n","sourceCodeStart":241,"sourceCodeEnd":277,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/play-services-base/core/src/main/java/org/microg/gms/AbstractGmsServiceBroker.java#L241-L277","documentation":"AbstractGmsServiceBroker.getService() looks up the requested service by ID and throws IllegalArgumentException 'Service not supported: <id>' when the concrete broker's supportedServices set contains neither the requested GmsService nor ANY. This is microG's way of rejecting binding requests for GMS services a broker implementation does not provide.","triggerScenarios":"A client binds and calls getService with a serviceId (e.g. from play-services version X) that the broker subclass was not constructed with; broker instance created with a narrow GmsServices set while the app requests a broader service.","commonSituations":"App updated to a newer Google Play services client library requesting a service the installed microG build/broker doesn't expose; misconfigured microG where a signature/spoofed-package broker lacks the service mapping; custom broker subclass missing the service in its constructor's supported set.","solutions":["Check which serviceId is rejected and ensure the broker subclass includes that GmsService in its supportedServices set (or GmsService.ANY).","Update microG/GmsCore to a version that supports the requested service.","On the client side, catch the exception / handle the null or failure binding and degrade gracefully or verify the service exists before binding."],"exampleFix":"// before (custom broker)\npublic MyBroker() { super(Arrays.asList(GmsService.GAMES)); }\n// after\npublic MyBroker() { super(Arrays.asList(GmsService.GAMES, GmsService.PLUS, GmsService.ACCOUNT)); }","handlingStrategy":"try-catch","validationCode":"GmsService svc = GmsService.byServiceId(request.serviceId);\nif (!supportedServices.contains(svc) && !supportedServices.contains(GmsService.ANY)) { log.warn(\"Service unsupported: \" + svc); }","typeGuard":null,"tryCatchPattern":"try { broker.getService(callback, request); } catch (IllegalArgumentException e) { handleUnsupportedService(request.serviceId, e); }","preventionTips":["Verify the broker's supportedServices set covers every service the client app binds to.","Keep microG/GmsCore updated alongside the app's play-services client versions.","Log the rejected serviceId to map client expectations to broker capabilities."],"tags":["microg","gms","ipc","service-binding"],"backgroundTag":"unsupported-operation","analyzedSha":"157c9d86ac46c195a86c2f15ab55c84036223f95","analyzedAt":"2026-09-06T17:27:33.892Z","contentChangedAt":"2026-09-06T17:27:33.892Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}