在init.rc文件中时常可以看到如下信息。
on property:init.svc.vendor.per_mgr=running
start vendor.per_proxy
这里表明property的属性init.svc.vendor.per_mgr值等于running时。则启动vendor.per_proxy。
可以看到设置对应的属性可以启动对应的服务。
这里的实现主要由init文件的parser解析实现。
system/core/init/action_parser.cpp
bool IsActionableProperty(Subcontext* subcontext, const std::string& prop_name) {
static bool enabled = GetBoolProperty("ro.actionable_compatible_property.enabled", false);
if (subcontext == nullptr || !enabled) {
return true;
}
if (kExportedActionableProperties.count(prop_name) == 1) {
return true;
}
for (const auto& prefix : kPartnerPrefixes) {
if (android::base::StartsWith(prop_name, prefix)) {
return true;
}
}
return false;
}
其中kPartnerPrefixes数组文件定义了可以识别的触发前缀
static constexpr const char* kPartnerPrefixes[] = {
"init.svc.vendor.", "ro.vendor.", "persist.vendor.", "vendor.", "init.svc.odm.", "ro.odm.",
"persist.odm.", "odm.", "ro.boot.",
};
如果自定义了一个属性开头需要在这里添加对应的属性。