赞
踩
1.目前的现象:蓝牙名称=设备名称(ro.product.model)
2.需求蓝牙名称 = (SN第一位)+型号(ro.product.model)4位+SN后三位//SN序列号是变化的,由写号工具烧写
例如:ro.product.model = TEST
SN:123456789ABCD
那么蓝牙名称 = 1TESTBCD
3.分析:在网上查找默认蓝牙名称都是固定的ro.product.model,应该是有调用的地方。经过网上搜索,确定是在system/bt/btif/src/btif_dm.cc调用
查看代码
- #define NUM_TIMEOUT_RETRIES 5
-
- #define PROPERTY_PRODUCT_MODEL "ro.product.model"
- #define DEFAULT_LOCAL_NAME_MAX 31
-
- ......
-
- static char* btif_get_default_local_name() {
- if (btif_default_local_name[0] == '\0') {
- int max_len = sizeof(btif_default_local_name) - 1;
- if (BTM_DEF_LOCAL_NAME[0] != '\0') {
- strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);
- } else {
- char prop_model[PROPERTY_VALUE_MAX];
- osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
- strncpy(btif_default_local_name, prop_model, max_len);
- }
- btif_default_local_name[max_len] = '\0';
- }
- return btif_default_local_name;
- }
-
在btif_get_default_local_name中,把ro.product.model中的值给btif_default_local_name,那么在这里就可以修改,客制化。
- +//add for bt name
- +#define PROPERTY_SERIALNO "ro.serialno"
-
- static char* btif_get_default_local_name() {
- if (btif_default_local_name[0] == '\0') {
- int max_len = sizeof(btif_default_local_name) - 1;
- #if 0 //remove
- if (BTM_DEF_LOCAL_NAME[0] != '\0') {
- strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);
- } else {
- char prop_model[PROPERTY_VALUE_MAX];
- osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
- strncpy(btif_default_local_name, prop_model, max_len);
- }
- #endif //remove
- //add for bt name
- char prop_model[PROPERTY_VALUE_MAX];
- char prop_serialno[PROPERTY_VALUE_MAX];
- osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");
- osi_property_get(PROPERTY_SERIALNO, prop_serialno, "");
- int len_model = strlen(prop_model);
- int len_serialno = strlen(prop_serialno);
- strncpy(btif_default_local_name, prop_model, max_len);
- if((len_serialno > 4) && (len_model > 3)){
- btif_default_local_name[0] = prop_serialno[0];
- for(int a = 1;a < 4; a = a + 1){
- btif_default_local_name[a] = prop_model[a - 1];
- btif_default_local_name[len_model + a] = prop_serialno[len_serialno - 4 + a];
- }
- }else{
- strncpy(btif_default_local_name, prop_model, max_len);
- }
- btif_default_local_name[max_len] = '\0';
- }
- return btif_default_local_name;
- }
修改编译,没有生效,查看开机log,提示蓝牙权限avc。不允许bluetooth去获取系统属性ro.serialno。
在网上搜索添加权限,由于不是很熟悉,所以基本在所有的bluetooth.te都添加了。
device/mediatek/sepolicy/basic/non_plat/bluetooth.te
system/sepolicy/prebuilts/api/26.0/private/bluetooth.te
system/sepolicy/private/bluetooth.te
+allow bluetooth serialno_prop:file { read open getattr};
编译报错,不允许添加,继续修改添加例外。
在system/sepolicy/prebuilts/api/26.0/public/domain.te
system/sepolicy/public/domain.te
- # Do not allow reading device's serial number from system properties except form
- # a few whitelisted domains.
- neverallow {
- domain
- -adbd
- -dumpstate
- -hal_drm
- -hal_cas
- -init
- -mediadrmserver
- -recovery
- -shell
- -system_server
- + -bluetooth
- } serialno_prop:file r_file_perms;
以上做个记录,如有更好的方式,欢迎交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。