android定制之自定义build.prop

android定制之自定义build.prop在Android系统中有一个类似Windows系统注册表的文件build.prop。这个文件内定义了系统初始(或永久)的一些参数属性、功能的开放等。通过调整/增加参数可以达到较调系统性能偏重点和附加功能开启的作用。

android定制之自定义build.prop

在Android系统中有一个类似Windows系统注册表的文件build.prop。这个文件内定义了系统初始(或永久)的一些参数属性、功能的开放等。通过调整/增加参数可以达到较调系统性能偏重点和附加功能开启的作用。

一般情况下,很少需要自定义build.prop,因为其在编译过程中自动根据一些配置文件生成的。不过,今天所说的是一种特殊情况。我们开发平板项目中,由于市场需要,在结构上将平板分为防水和不防水版本,虽然在硬件上有些许差别,但为开发便捷性,底层使用一个IO口作为兼容区分即只需使用同一个kernel。但防水和不防水在机型上有所差别,一为K1,一为K1S。因此,在USB磁盘驱动器、机型、版本号等一些参数上需要做区分,而这些参数正是从build.prop文件中获取。所以,为使用同一system.img镜像烧录到两个机型不同的机器上而型号、版本号等显示对应,我想出自定义build_K1.prop和build_K1S.prop属性文件,然后修改.prop文件的加载代码,使系统在启动时选择性的加载自定义的两个属性文件,即可达到兼容的目的。

首先分析一下build.prop文件在android系统中如何使用。Android系统启动时,首先进入init进程,打开system/core/init/init.c文件,其中main函数中queue_builtin_action(property_service_init_action, “property_service_init”)语句启动了android中的属性初始化服务,在此服务中,会打开build.prop文件,并将其中的一些属性加载进内存,此动作过程由system/core/init/property_service.c文件中的start_property_service()函数完成。至此,就可以在程序中访问build.prop中的一些属性参数。

然后分析system/core/init/property_service.c文件中的start_property_service()函数。在此函数中,首先调用load_properties_from_file(PROP_PATH_SYSTEM_BUILD),加载了PROP_PATH_SYSTEM_BUILD(system/build.prop)文件。因此如果需要修改加载自己制定的其他命名的.prop文件,即在此修改加载文件路径即可。

因此,在分析过后,对加载属性文件load_properties_from_file(PROP_PATH_SYSTEM_BUILD)部分的代码修改为:

    char build_prop_name[64]=”build_”;
char prop_path[64]=”/system/”;
int flag = 1;
    fd = open(“sys/product_version/model_name”, O_RDONLY);
    if (fd >= 0) {

flag = 0;
        int n = read(fd, buf, sizeof(buf) – 1);
        if (n > 0) {

            if (buf[n-1] == ‘\n’)
                n–;
            buf[n] = 0;
        }
        close(fd);
strcat(build_prop_name, buf);
strcat(build_prop_name, “.prop”);
strcat(prop_path, build_prop_name);
ERROR(“——prop file: %s\n”,prop_path);
if ( 0 == access(prop_path, 0) )
load_properties_from_file(prop_path);// prop file exist
else
flag = 1;
    } 
if ( flag ){   
load_properties_from_file(PROP_PATH_SYSTEM_BUILD);  
}

代码中sys/product_version/model_name节点,是在底层添加的一个根据IO口电平状态判断机型,返回K1/K1S的一个接口。至此,系统即可根据机型进行兼容一些属性参数,避免了需要编译制作两套系统镜像,节约开发时间,提高开发便捷性。

而build_K1.prop和build_K1S.prop文件,可以使用shell脚本自动根据build.prop生成,即可以根据编译自动更新其中的内容(如版本号等一些属性的设置)。shell脚本程序如下:

if [ -d $OUT/system ]
then
cp $OUT/system/build.prop $OUT/system/build_K1.prop
cp $OUT/system/build.prop $OUT/system/build_K1S.prop

sed -i “s/OK1000/K1/g” $OUT/system/build_K1.prop
sed -i “s/OK1000/K1S/g” $OUT/system/build_K1S.prop
fi

$OUT路径即编译后生成镜像的路径。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34245.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注