关于Android properties 中ro开头无法修改的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 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而是继续走下面代码的流程。

猜你喜欢

转载自blog.csdn.net/LEAD_SOLO/article/details/59481447