如上图与AI Camera初次相遇时设备名称等显示为“****”,这引起了我的好奇应该在哪里修改这些信息?于是查阅了下源码关于“设备名称”是在哪里显示的,这边我是搭建了一个harmony 的opengrok(如果有人感兴趣怎么搭建可以留言,我会再开一篇帖子写下如何搭建opengrok),查找了下有以下三个地方。
- /openharmony/vendor/hisi/hi3861/hi3861/include/
- H A D hi_btcoex_api.h 42 * [url=home.php?mod=space&uid=3142012]@param[/url] ifname [IN] Type #const char *, device name, e.g. wlan0.CNcomment:设备名称,如 wl…
- /openharmony/applications/sample/camera/setting/setting/src/main/cpp/
- H A D setting_about_ability_slice.cpp 56 itemInfo_[0][0] = (char*) "设备名称"; // 0 in SetItemInfo()
- H A D main_ability_slice.cpp 245 err = sprintf_s(buff, sizeof(buff), "设备名称: %s", gPT); in SetAboutButtonView()
复制代码 第一处是3861的直接pass掉。
我们接下来看剩下的两个地方
先看下
/openharmony/applications/sample/camera/setting/setting/src/main/cpp/setting_about_ability_slice.cpp
这边的代码如下
- 54 void SettingAboutAbilitySlice::SetItemInfo()
- 55 {
- 56 itemInfo_[0][0] = (char*) "设备名称"; // 0
- 57 itemInfo_[0][1] = GetProductType(); // 0
- 58 itemInfo_[1][0] = (char*) "厂家信息"; // 1
- 59 itemInfo_[1][1] = GetManufacture(); // 1
- 60 itemInfo_[2][0] = (char*) "品牌信息"; // 2
- 61 itemInfo_[2][1] = GetBrand(); // 2
- 62 itemInfo_[3][0] = (char*) "硬件版本号"; // 3
- 63 itemInfo_[3][1] = GetHardwareModel(); // 3
- 64 itemInfo_[4][0] = (char*) "设备序列号"; // 4
- 65 itemInfo_[4][1] = GetSerial(); // 4
- 66 itemInfo_[5][0] = (char*) "操作系统名"; // 5
- 67 itemInfo_[5][1] = GetOsName(); // 5
- 68 itemInfo_[6][0] = (char*) "软件版本号"; // 6
- 69 itemInfo_[6][1] = GetDisplayVersion(); // 6
- 70 itemInfo_[7][0] = (char*) "BootLoader版本号"; // 7
- 71 itemInfo_[7][1] = GetBootloaderVersion(); // 7
- 72 itemInfo_[8][0] = (char*) "构建时间"; // 8
- 73 itemInfo_[8][1] = GetBuildTime(); // 8
- 74 }
复制代码从这边我们就能知道“关于”中的信息分别是调用哪支API 来拿到这些信息的了,等下我们在往下看。
这里再看下另一处是哪里的代码呢?
第二处是以下
/openharmony/applications/sample/camera/setting/setting/src/main/cpp/main_ability_slice.cpp
- void MainAbilitySlice::SetAboutButtonView(void)
- 213 {
- 214 UIViewGroup* buttonView = new UIViewGroup();
- 215 buttonView->SetPosition(ABOUT_BUTTON_X, ABOUT_BUTTON_Y, DE_BUTTON_WIDTH, ABOUT_BUTTON_HEIGHT);
- 216 buttonView->SetStyle(STYLE_BORDER_RADIUS, DE_BUTTON_RADIUS);
- 217 buttonView->SetStyle(STYLE_BACKGROUND_COLOR, DE_BUTTON_BACKGROUND_COLOR);
- 218 buttonView->SetTouchable(true);
- 219 buttonView->SetOnClickListener(buttonAboutListener_);
- 220 scrollView_->Add(buttonView);
- 221
- 222 UILabel* lablelFontAbout = new UILabel();
- 223 lablelFontAbout->SetPosition(DE_TITLE_TEXT_X, ABOUT_BUTTON_TEXT_ABOUT_Y, DE_TITLE_TEXT_WIDTH, DE_TITLE_TEXT_HEIGHT);
- 224 lablelFontAbout->SetText("关于");
- 225 lablelFontAbout->SetFont(DE_FONT_OTF, DE_TITLE_TEXT_SIZE);
- 226 lablelFontAbout->SetStyle(STYLE_TEXT_COLOR, DE_TITLE_TEXT_COLOR);
- 227 buttonView->Add(lablelFontAbout);
- 228
- 229 char buff[62];
- 230 char* gDV = GetDisplayVersion();
- 231 int err = sprintf_s(buff, sizeof(buff), "系统版本: %s", gDV);
- 232 if (err < 0) {
- 233 printf("[ERROR]sprintf_s failed, err = %d
- ", err);
- 234 return;
- 235 }
- 236 free(gDV);
- 237 setAboutTest(buttonView, ABOUT_BUTTON_TEXT_SYSTEM_X, ABOUT_BUTTON_TEXT_SYSTEM_Y, buff);
- 238
- 239 err = memset_s(buff, sizeof(buff), 0, sizeof(buff));
- 240 if (err < EOK) {
- 241 printf("[ERROR]memset_s failed, err = %d
- ", err);
- 242 return;
- 243 }
- 244 char* gPT = GetProductType();
- 245 err = sprintf_s(buff, sizeof(buff), "设备名称: %s", gPT);
- 246 if (err < 0) {
- 247 printf("[ERROR]sprintf_s failed, err = %d
- ", err);
- 248 return;
- 249 }
- 250 free(gPT);
- 251 setAboutTest(buttonView, ABOUT_BUTTON_TEXT_DEVICE_X, ABOUT_BUTTON_TEXT_DEVICE_Y, buff);
- 252
- 253 UIImageView* imageView = new UIImageView();
- 254 imageView->SetPosition(DE_FORWARD_IMG_X, ABOUT_BUTTON_IMAGE_Y, DE_FORWARD_IMG_WIDTH, DE_FORWARD_IMG_HEIGHT);
- 255 imageView->SetSrc(DE_IMAGE_FORWORD);
- 256 buttonView->Add(imageView);
- 257 }
复制代码阅读代码可知,这一段是在进入设置界面上显示的信息,如下图所示
这两个地方的“设备名称”均是通过GetProductType();这只API 来获取的
“系统版本”和“软件版本号”用的是同一只API,GetDisplayVersion();
接下来我们找一下GetProductType();和GetDisplayVersion();在哪里
查找一下
可以发现这两只API 多在以下这个档案,只是实现方法略有不同
/openharmony/base/startup/frameworks/syspara_lite/parameter/src/parameter_common.c
GetDisplayVersion();-> GetSysProperty();
- 158 char* GetDisplayVersion(void)
- 159 {
- 160 return GetSysProperty(g_roBuildVerShow, strlen(g_roBuildVerShow) + 1);
- 161 }
复制代码GetSysProperty如下
- static char* GetSysProperty(const char* propertyInfo, const size_t propertySize)
- 140 {
- 141 char* prop = (char*)malloc(propertySize);
- 142 if (prop == NULL) {
- 143 return NULL;
- 144 }
- 145 if (strcpy_s(prop, propertySize, propertyInfo) != 0) {
- 146 free(prop);
- 147 prop = NULL;
- 148 return NULL;
- 149 }
- 150 return prop;
- 151 }
复制代码也就是说这里会拿到同个档案中的g_roBuildVerShow这个字符串
- static char g_roBuildVerShow[] = {"OpenHarmony 1.0"};
复制代码
而GetProductType();
- char* GetProductType(void)
- 75 {
- 76 return HalGetProductType();
- 77 }
复制代码
会继续call到HalGetProductType();这只
查阅
/openharmony/vendor/huawei/camera/hals/utils/sys_param/hal_sys_param.c
- char* HalGetProductType(void)
- 34 {
- 35 char* value = (char*)malloc(strlen(OHOS_PRODUCT_TYPE) + 1);
- 36 if (value == NULL) {
- 37 return NULL;
- 38 }
- 39 if (strcpy_s(value, strlen(OHOS_PRODUCT_TYPE) + 1, OHOS_PRODUCT_TYPE) != 0) {
- 40 free(value);
- 41 return NULL;
- 42 }
- 43 return value;
- 44 }
复制代码也就是设备名称显示的是OHOS_PRODUCT_TYPE,
在hal_sys_param.c 中还有定义如下,就是“关于”中的其他信息
- 19 static const char OHOS_PRODUCT_TYPE[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">设备名称</span>
- 20 static const char OHOS_MANUFACTURE[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">厂家信息</span>
- 21 static const char OHOS_BRAND[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">品牌信息系</span>
- 22 static const char OHOS_MARKET_NAME[] = {"****"};
- 23 static const char OHOS_PRODUCT_SERIES[] = {"****"};
- 24 static const char OHOS_PRODUCT_MODEL[] = {"****"};
- 25 static const char OHOS_SOFTWARE_MODEL[] = {"****"};
- 26 static const char OHOS_HARDWARE_MODEL[] = {"****"};<span lang="en-US">//</span><span lang="zh-CN">硬件版本号</span>
- 27 static const char OHOS_HARDWARE_PROFILE[] = {"aout:true,display:true"};
- 28 static const char OHOS_BOOTLOADER_VERSION[] = {"bootloader"};<span lang="en-US">//BootLoader</span><span lang="zh-CN">版本号</span>
- 29 static const char OHOS_SECURITY_PATCH_TAG[] = {"2020-09-01"};
- 30 static const char OHOS_ABI_LIST[] = {"****"};
- 31 static const char OHOS_SERIAL[] = {"1234567890"}; <span lang="x-none">// </span><span lang="zh-CN">设备序列号</span>
复制代码所以想要修改OEM信息,只要在hal_sys_param.c 修改以上信息即可。
还有一部分是直接在parameter_common.c,如果感兴趣的朋友就去研究下这两个档案吧。
`