版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LEAD_SOLO/article/details/59481447
熟悉Android开发的小伙伴都知道,build.prop里存在很多选项,其中ro开头的选项无法通过SystemProperties.set方法进行修改。这里除了Selinux的原因还有本身propertyservice里的限制,我们看看代码
system/core/init/property_service.c
298 int property_set(const char *name, const char *value)
299 {
300 prop_info *pi;
301 int ret;
302
303 size_t namelen = strlen(name);
304 size_t valuelen = strlen(value);
305
306 if (!is_legal_property_name(name, namelen)) return -1;//判断一下是否符合格式
307 if (valuelen >= PROP_VALUE_MAX) return -1;//判断一下是否超过长度
308
309 pi = (prop_info*) __system_property_find(name);
310
311 if(pi != 0) {
312 /* ro.* properties may NEVER be modified once set */
313 if(!strncmp(name, "ro.", 3)) {
314 return -1;//这个if就是关键所在了。判断一下是否是ro.开头,如果是就返回。
315 }
因此,如果需要指定某个ro.选项可以修改的可以再多判断ro.xxx是否符合如果符合,这里可以不用返回-1而是继续走下面代码的流程。