diff --git a/init/interface_utils.cpp b/init/interface_utils.cpp index a54860fa4..ddbacd763 100644 --- a/init/interface_utils.cpp +++ b/init/interface_utils.cpp @@ -77,6 +77,12 @@ Result CheckInterfaceInheritanceHierarchy(const std::set& ins const InterfaceInheritanceHierarchyMap& hierarchy) { std::set interface_fqnames; for (const std::string& instance : instances) { + // There is insufficient build-time information on AIDL interfaces to check them here + // TODO(b/139307527): Rework how services store interfaces to avoid excess string parsing + if (base::Split(instance, "/")[0] == "aidl") { + continue; + } + FqInstance fqinstance; if (!fqinstance.setTo(instance)) { return Error() << "Unable to parse interface instance '" << instance << "'"; diff --git a/init/service_parser.cpp b/init/service_parser.cpp index dd552fb9f..543be2329 100644 --- a/init/service_parser.cpp +++ b/init/service_parser.cpp @@ -145,17 +145,21 @@ Result ServiceParser::ParseInterface(std::vector&& args) { const std::string& interface_name = args[1]; const std::string& instance_name = args[2]; - FQName fq_name; - if (!FQName::parse(interface_name, &fq_name)) { - return Error() << "Invalid fully-qualified name for interface '" << interface_name << "'"; - } + // AIDL services don't use fully qualified names and instead just use "interface aidl " + if (interface_name != "aidl") { + FQName fq_name; + if (!FQName::parse(interface_name, &fq_name)) { + return Error() << "Invalid fully-qualified name for interface '" << interface_name + << "'"; + } - if (!fq_name.isFullyQualified()) { - return Error() << "Interface name not fully-qualified '" << interface_name << "'"; - } + if (!fq_name.isFullyQualified()) { + return Error() << "Interface name not fully-qualified '" << interface_name << "'"; + } - if (fq_name.isValidValueName()) { - return Error() << "Interface name must not be a value name '" << interface_name << "'"; + if (fq_name.isValidValueName()) { + return Error() << "Interface name must not be a value name '" << interface_name << "'"; + } } const std::string fullname = interface_name + "/" + instance_name;