文档开发者中心
我的
HarmonyOS 3/4

HarmonyOS 3、HarmonyOS 4系统应用开发中,API与组件、DevEco Studio、测试、原子化服务和应用上架分发等交流区。

关注
订阅
推荐
最热
最新
其他
已解决
未解决
手机nova12青春版harmonyOS4.2.0,type-c转RJ45(RTL8153)转接线,我想用手机有线连接本地网络设备,转接线插上手机没有任何反应,该手机能够这样用吗,如何设置手机IP地址和设备地址在同一网段?

评论3

浏览 14

发布于5小时前
华为安卓(非鸿蒙)如何介入离线唤醒voip功能,请提供下开发文档

评论4

浏览 47

发布于昨天03:28
因测试期间,怕被通过分享APK安装包直接安装,所以增加了一个校验,必须从华为应用市场的安装来源,应用包名:com.huawei.appmarket和签名指纹才能正常使用,目前测试旧荣耀鸿蒙4.2和新荣耀安卓16都能正常安装使用,但是魅族的安卓15无法识别到是从华为应用市场安装的,会出现检验的提示,即使加了contentprovider接口查应用市场的本地记录也没有用,可能是品牌方的系统过滤掉了?如何有更好的方案呢?

评论18

浏览 197

发布于2026-10-31 15:40
筹划所有设备应用通用密码控制器

评论2

浏览 1.1k

发布于2022-06-04 12:39
定制设备,禁用了网络,点击安装的时候,一直反复提示如图,可是这台设备无法联网,禁用纯净模式也不行

评论10

浏览 111

发布于2026-10-22 15:38
4.2版本更新7.0版本原始数据会不会被删除,求指教。

评论17

浏览 186

发布于2026-10-22 10:22
情况如上,有没有遇到过的帮我解答一下

评论8

浏览 134

发布于2026-10-17 11:13
服务卡片是HarmonyOS FA(Feature Ability)的一种新的界面形式,能够通过服务搜索到卡片后让用户直接使用服务(后台安装hap)。由于原有应用适配到鸿蒙系统存在大量的时间、人力成本,所以先采用服务卡片的形式,将一部分不区分终端的H5功能先做迁移。具体形式就是通过卡片服务拉起H5页面再做业务。【搭建环境】1、安装DevEco Stuido,详见:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-00000010535824152、配置环境,详见:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/environment_config-0000001052902427【卡片开发】1、新建卡片相关文件,选样式并命名,工程目录(右键) -> New -> Service Widget2、创建好后,目录中会新增卡片的模版代码(widget目录),需要个性化实现的在WidgetImpl中,由于项目需要,我们更多的是需要服务卡为一个入口。后面只要能够拉起H5页面就好,所以无需复杂实现。3、与此同时,IDE会自动在config.json文件的abilitie中配置form相关数据"forms": [ { "landscapeLayouts": [ "$layout:form_image_with_information_test_widget_2_2" ], "isDefault": true, "scheduledUpdateTime": "10:30", "defaultDimension": "2*2", "name": "Test_Widget", "description": "This is a service widget", "colorMode": "auto", "type": "Java", "supportDimensions": [ "2*2" ], "portraitLayouts": [ "$layout:form_image_with_information_test_widget_2_2" ], "updateEnabled": true, "updateDuration": 1 }]4、修改卡片样式在forms配置中可以看到landscapeLayouts关键字,该字段对应的value就是服务卡片的layout。如本例中卡片layout为form_image_with_information_test_widget_2_2,打开文件进行设置。layout的开发有过前端开发经验的小伙伴们都可以很轻松搞定。5、如何使用卡片1)使用服务中心搜索应用名,可以看到对应的卡片2)长按icon上滑能够触发显示卡片【H5加载】1、增加WebView组件<ohos.agp.components.webengine.WebView ohos:id="$+id:webView" ohos:width="match_parent" ohos:height="match_parent"/>2、加载H5页面WebView webView = (WebView) findComponentById(ResourceTable.Id_webView);webview.load("https://www.baidu.com");3、应用给H5提供接口// 是否支持Javascript,默认值falsewebview.getWebConfig().setJavaScriptPermit(true);// 注册H5接口webview.addJsCallback("JsCallJava", str -> { // 处理接收到的Js发送来的消息 new ToastDialog(this).setText(str).setAlignment(LayoutAlignment.CENTER).show(); // 返回给Js return "Js Call Java Success";});4、应用调用H5接口,前提H5中提供一个名为callJs的方法webview.executeJs("javascript:callJS('应用调用Js方法')", msg -> { // 在这里处理Java调用Js的方法的返回值});【有坑注意】1、如何进入服务中心?长按屏幕左下角向右上角滑动可以触发。2、config.json中配置 installationFree为false才能显示icon,否则应用关闭后只能通过服务中心的搜索才能找到应用,反复启动调试不方便。3、有icon的hap应用支持上滑显示卡片功能。

评论3

浏览 2.6k

发布于2021-07-06 14:46
GLL-AL30手表,系统是鸿蒙4.0.0.409,打开开发者选项,HDC调试,WLAN调试,在PC端使用命令 hdc tconn ip:port 显示[Fail]Connect failed 如果换用adb命令则可以成功连接,但是不可推包,求助如何解决。

评论4

浏览 95

发布于2026-10-15 01:10
仙银
|
采纳答复
adb能连说明网络是通的,问题出在hdc侧。adb连上也不能推包是正常的——鸿蒙设备的包安装走的是hdc协议,adb只负责底层TCP通道,装包指令hdc不认adb连接。逐条说:1. hdc tconn 连接失败,最常见三个原因一是hdc版本和设备固件不匹配。你的手表跑的是HarmonyOS 4.0.0.409,这是4.x版本不是NEXT,hdc工具版本必须跟它配套。先查你本机hdc版本:hdc -v再查设备端和客户端是否匹配:hdc checkserver如果报"Daemon Session Handshake failed"或版本对不上,去DevEco Studio的SDK目录拿对应版本的hdc替换,或者参考hdc版本配套表升级。二是adb和hdc端口冲突。两者共用8710端口,adb先占上了hdc就连不上。先杀掉adb再启动hdc:adb kill-server hdc kill hdc start hdc tconn ip:port三是网络不通或防火墙拦截。确认手表和PC在同一WLAN子网,PC防火墙没有拦8710端口。可以先从PC端ping手表IP确认可达。2. 手表无线调试的前提条件官方文档明确说了:Wearable设备无线调试需要登录华为开发者账号,开发者选项里才会有"无线调试"或"通过WLAN调试"的开关。确认你已经登录了开发者账号,且开关确实处于开启状态。连接后如果hdc list targets返回unauthorized,说明手表上没点信任授权弹窗,完成配对后重新连接即可。具体步骤参考:Wearable和Lite Wearable穿戴设备真机调试和调测3. adb能连但不能推包这不是bug,是设计如此。adb的install/file send走的是Android协议栈,HarmonyOS 4手表的包管理只认hdc通道。用adb连上等于只建了个TCP隧道,装包得走hdc。所以核心还是要把hdc tconn调通。排查顺序建议:adb kill-server → hdc kill → hdc start → hdc tconn ip:port如果还不行,hdc -v 和 hdc checkserver 查版本是否匹配,不匹配就升级hdc确认PC能ping通手表IP,防火墙放行8710确认手表上开发者账号已登录,WLAN调试开关开启,配对授权已点击
点赞
回复于2026-10-15 01:18
HUAWEI WATCH GT3 属于轻量级智能穿戴(Lite Wearable),对应 API 6,需要使用 [Lite] Empty Ability 模板创建 JS 工程,技术栈为 JS + FA 模型 + API 6。遇到的问题当前华为开发者官网下载中心可获取的 DevEco Studio 最低版本为 5.0.0 Release,其 compatibleSdkVersion 最低仅支持 API 10(4.0.0(10)),无法降级至 API 6。构建工具 Hvigor 明确标注"适用于 API 10 及以上的工程",在当前版本中手动将 compatibleSdkVersion 改为 "3.1.0(6)" 会导致编译报错。此前有资料提到可使用 DevEco Studio 3.1.1 Release 或 4.0 Release 等旧版本开发,但在当前官网下载中心已无法找到这些旧版本。想请教的问题是否有途径获取支持 API 6 的 DevEco Studio 旧版本? 如果官网已不再提供下载,是否有其他官方渠道可以获取?DevEco CLI 命令行工具是否支持创建 API 6 的 Lite Wearable 工程? CLI 支持 --api-level 参数,但不确定是否能指定 API 6。HUAWEI WATCH GT3 当前是否仍支持第三方应用开发? 如果工具链已停止维护,是否有官方说明或后续替代方案?如果 GT3 的工具链确实已不可用,是否有其他华为手表设备推荐? 比如 WATCH 3/4/5 系列使用当前 DevEco Studio 支持的 ArkTS + Stage 模型,工具链完整可用,是否更适合个人开发者入手?

评论3

浏览 173

发布于2026-09-30 14:03
如何给华为Watch 4 开发软件,最新版的编译器DevEco studio 开发不了,有没有办法

评论6

浏览 154

发布于2026-09-28 05:33
石狮子
|
采纳答复
点赞1
回复于2026-09-28 05:40
p40pro+能不能更新到鸿蒙4.0呢

评论4

浏览 4k

发布于2023-06-29 19:24
我软件差不多写好了,但是又卡在服务器这一块,网上搜太难了,看不懂,有人可以带带我嘛

评论4

浏览 122

发布于2026-09-25 06:55
客户在AGC创建完项目然后添加应用环节已经点确认按钮了怎么没任何提示呀

评论8

浏览 108

发布于2026-09-24 08:55
客户需要把自己手机APP的签名回填到AppGallery Connect里请问入口在哪

评论5

浏览 128

发布于2026-09-24 07:47
​如何开发一个可以有高度用户自定义的精美卡片?为什么需要自定义?现在的手机大多数人都会使用主题,这导致背景可能会与卡片十分的不融合,影响美观,卡片自定义可以让用户自定义卡片使之与自己的主题背景相融合。如果可以,也可以使用卡片背景模糊来融合(不过我按着官方文档来弄没有实现过模糊的效果........希望有大佬可以出个详细教程)由于论坛插图片比较难搞,位置很难调,所以以下只会提供设计思路,没有图片展示,这是一个十分简单的例子,也不太需要图片的参考。首先,先简单的了解如何创建一个卡片,并且更新卡片上的数据,下面将以JS框架的纪念日卡片为例。 ①创建好一个JS工程后,在main->java->com.xxx.xxx文件夹上右键,选择New->Ability->Empty(JS) Ability,起名为 cardTest ,下面的JS Component Name同样起名cardTest。随后就可以在js的文件夹下看到一个新的文件夹 js->cardTest。在config.json文件中在“js”中找到 "name":“cardTest”的属性,在这里添加“type”:“form”属性,说明这个js页面是卡片。{"pages": ["pages/index/index"],"name": "cardTest","window": {"autoDesignWidth": true//选择true可以适应多种卡片尺寸},"type": "form"}并且在config.json的上端”Ability”属性内找到你要添加卡片的Ability,找到"name": "com.example.test.cardTest",在这个{}内添加卡片的一些配置参数:"forms": [{"name": "cardTest","isDefault": true,"description": "","colorMode": "auto","supportDimensions": ["1*2","2*2","2*4","4*4"],"defaultDimension": "2*4","updateEnabled": true,"scheduledUpdateTime": "00:00",//此处为定时刷新时间,设为0点"updateDuration": 1,"type": "JS","jsComponentName": "cardTest"//此处需要填写上面创建的js页面的名称}],"formsEnabled": true至此一个卡片的前期准备工作完成了。②为卡片设计界面打开js->cardTest->pages->index.hml,同时点开右侧的preview,供实时查看卡片设计情况,点开2*4作为参考同时打开index.css(可以在上方的文件名中右键选择Split Vertically将页面分为左右,方便设计噢)初步设计卡片外观:-----hml文件-------------------------------<div class="container"><text class="title">{{days}}</text></div>------------------------------------------------css文件-------------------------------.container {flex-direction: column;border-radius: 16px;padding: 20px;}.title{width: 100%;height: 100%;text-align: center;font-size: 50px;border-radius: 16px;background-color: #f0f0f0;}-----------------------------------------------------js文件-----------------------------export default {data: {days: "360天"},}---------------------------------------------注:如果卡片想要在外圈有描边效果,border-radius要开16px噢,因为卡片默认有16px的圆角这样子就可以得到一个不错的初步效果。​ ③更新卡片信息打开main->java->com.xxx.xxx->cardTest.java文件在class内部重写以下函数protected ProviderFormInfo onCreateForm(Intent intent) {//通过这个函数可以设置卡片在被用户拉起创建的时候显示什么信息ZSONObject data = new ZSONObject();data.put("days","100天");FormBindingData formBindingData = new FormBindingData(data);ProviderFormInfo formInfo = new ProviderFormInfo();formInfo.setJsBindingData(formBindingData);return formInfo;}@Overrideprotected void onDeleteForm(long formId) {// 删除卡片实例数据super.onDeleteForm(formId);}@Overrideprotected void onUpdateForm(long formId) {// 若卡片支持定时更新/定点更新/卡片使用方主动请求更新功能,则提供方需要覆写该方法以支持数据更新super.onUpdateForm(formId);}@Overrideprotected void onTriggerFormEvent(long formId, String message) {// 若卡片支持触发事件,则需要覆写该方法并实现对事件的触发super.onTriggerFormEvent(formId, message);}完成此步,即可让卡片在拉起时显示100天的信息,但是作为一个记录纪念日的卡片,我们必须知道起始日期是什么时候,因此必须添加设置页面,供用户设置起始时间。④添加设置页面和第一步通过同样的操作新建一个Ability,命名为cardSetting,js component name同名。同时需要将这个ability关联到该卡片的设置页面上,我们需要在config.json刚才添加的ability内的卡片属性增加"formConfigAbility": "ability://cardSetting"这时在页面的卡片上长按,便会出现编辑的按钮,点击编辑以后如何打开我们想要的设置页面呢打开java->com.xxx.xxx->cardSetting.java文件在onStart的函数内在super.onStart(intent);前添加代码formID = intent.getLongParam(AbilitySlice.PARAM_FORM_IDENTITY_KEY,-1);if(formID != -1){IntentParams intentParams = new IntentParams();intentParams.setParam("formID",formID);// …从数据库读取卡片的起始日期Preferences store = (new DatabaseHelper(getApplicationContext())).getPreferences(“cardInfo”);String startDate = Store.getString(String.valueOf(formID),””);intentParams.setParam(“startDate”,startDate);setInstanceName("cardSetting");setPageParams("pages/index/index",intentParams);}这里当js的设置页面打开后,页面便能在data获取到formID和startDate两个量。可以在该页面添加picker组件来修改起始日期,修改完成需要保存日期,这个日期不能使用js的API来进行保存,这样用java是读取不到的,故我们需要利用FA调用PA的能力来进行信息的存储,这一部分可以查看官方文档https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fa-calls-pa-examples-0000000000618000这里提供大致示例仅供参考:会的可以直接跳到后面噢public class StorageAbility extends Ability {public static final int GET = 0;public static final int SET = 1;public static final int DELETE = 2;public static final int CLEAR = 3;private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "--StorageInfo--");private static DatabaseHelper databaseHelper = null;private final StorageRemote remote = new StorageRemote();private static boolean prepared = false;@Overrideprotected void onStart(Intent intent) {reDatabase();HiLog.info(LABEL_LOG,"storage build success");prepared = true;super.onStart(intent);}private void reDatabase(){if(databaseHelper == null)databaseHelper = new DatabaseHelper(getApplicationContext());}@Overridepublic IRemoteObject onConnect(Intent intent) {super.onConnect(intent);return remote.asObject();}public Map<String, Object> StorageEvent(int code,ZSONObject data){Map<String, Object> result = new HashMap<String, Object>();reDatabase();try {Preferences store = databaseHelper.getPreferences("Storage");switch (code) {case GET: {if (prepared) {HiLog.info(LABEL_LOG, "-----code GET-----");HiLog.info(LABEL_LOG,"-----key:" + data.getString("key") + "-----");result.put("code", 0);String value = store.getString(data.getString("key"),data.getString("ifNone"));HiLog.info(LABEL_LOG,"-----value:" + value + "-----");result.put("data", value);} else {result.put("code", 1);result.put("data", "dataBase is not prepared");}break;}case SET: {if (prepared) {HiLog.info(LABEL_LOG, "-----code SET-----");HiLog.info(LABEL_LOG,"-----key:" + data.getString("key") + "-----");HiLog.info(LABEL_LOG,"-----value:" + data.getString("value") + "-----");result.put("code", 0);store.putString(data.getString("key"),data.getString("value"));if (store.flushSync()) {result.put("code", 0);} else {result.put("code", 1);result.put("data", "set error");HiLog.info(LABEL_LOG,"-----error:set fail" + "-----");}} else {result.put("code", 1);result.put("data", "dataBase is not prepared");}break;}case DELETE: {if (prepared) {HiLog.info(LABEL_LOG, "-----code DELETE-----");HiLog.info(LABEL_LOG,"-----key:" + data.getString("key") + "-----");store.delete(data.getString("key"));if (store.flushSync()) {result.put("code", 0);} else {result.put("code", 1);result.put("data", "delete error");}} else {result.put("code", 1);result.put("data", "dataBase is not prepared");}break;}case CLEAR: {if (prepared) {HiLog.info(LABEL_LOG, "-----code CLEAR-----");HiLog.info(LABEL_LOG,"-----key:" + data.getString("key") + "-----");store.clear();if (store.flushSync()) {result.put("code", 0);} else {result.put("code", 1);result.put("data", "clear error");}} else {result.put("code", 1);result.put("data", "dataBase is not prepared");}break;}default:result.put("code", 1);result.put("data", "wrong code");}}catch (Exception e){e.printStackTrace();HiLog.error(LABEL_LOG,e.toString());}return result;}class StorageRemote extends RemoteObject implements IRemoteBroker {StorageRemote(){super("Storage_Service");}@Overridepublic boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) {Map<String, Object> result;ZSONObject datas = ZSONObject.stringToZSON(data.readString());HiLog.info(LABEL_LOG,datas.toString());try {HiLog.info(LABEL_LOG, "-----Storage ing-----");result = StorageEvent(code,datas);HiLog.info(LABEL_LOG, "---writeBack-----");HiLog.info(LABEL_LOG, ZSONObject.toZSONString(result));reply.writeString(ZSONObject.toZSONString(result));}catch (Exception e){HiLog.error(LABEL_LOG,e.toString());return false;}return true;}@Overridepublic IRemoteObject asObject() {return this;}}@Overridepublic void onDisconnect(Intent intent) {}}在js方调用:callFunction: function(code,data){return FeatureAbility.callAbility({bundleName : 'com.example.course',abilityName : 'com.example.course.StorageAbility',messageCode : code,data : data,abilityType : 0,syncOption : 0})}setStorage: async function(key,value){let res = await this.callFunction(SET,{key: key,value: value})return JSON.parse(res)}调用setStorage函数即可进行存储。这样便完成了卡片起始日期的设置以及存储,那如何更新卡片的日期数据呢。⑤更新卡片数据我们需要重写cardTest.java文件里的onUpdateForm(long formID)函数@Overrideprotected void onUpdateForm(long formId) {// 若卡片支持定时更新/定点更新/卡片使用方主动请求更新功能,则提供方需要覆写该方法以支持数据更新super.onUpdateForm(formId);DatabaseHelper db = new DatabaseHelper(getApplicationContext());Preferences store = db.getPreferences(“cardInfo”);String startDate = store.get(String.valueOf(formID),””);ZSONObject data = new ZSONObject();if(startDate == “”){data.put(“days”:”请设置日期”);}else{LocalDate start = LocalDate.parse(startDate);LocalDate now = LocalDate.now();long days = now.toEpochDay() - start.toEpochDay();data.put(“days”,days + “天”);}FormBindingData bindingData = new FormBindingData(data);try {updateForm(formId,bindingData);} catch (FormException e) {e.printStackTrace();}}这样卡片就会在每天的零点执行更新程序,更新卡片上的日期天数了,到此,卡片的基本功能已经完成。2.如何自定义卡片外观呢?回到最初的问题,在创建完一个完整的卡片后,需要设计它的自定义功能了,自定义的大致思路是打开设置界面,可以设置卡片属性,当卡片更新时同时更新样式属性,这样就可以完成自定义的功能了。下面以自定义卡片底色为例:①修改卡片hml的设置,将hml文件修改为:<div class="container"><text class="title">{{days}} style="background-color:{{set['底色']}}"</text></div>同时将js文件中加入set属性data: {days: "360天",set:{'底色':'#f0f0f0'}},这样我们只需要将传入的set更改,就可以更改卡片的底色了。②修改设置页面以设置底色:仅需要添加相关组件修改颜色,同时在修改完后以同样的方式存储这个数据,在更新卡片时读取该数据并传入卡片中即可。但目前JS没有colorPicker的组件,想要实现颜色的选择还是有一定难度,需要自己手写一个颜色选择组件噢,要求不高的话可以直接用文本框如何颜色16进制值。3.为了可以让属性的设置更加轻松简便,添加属性快速,可以自己定义属性的类型,比如说有整数型、颜色型、布尔型等等,打开设置页面的时候可以直接根据这些类型进行页面的绘制。set:{‘底色’:{value: ‘#f0f0f0’,type: ‘color’},‘字体大小’:{value: 20,type: ‘number’,min: 5,max: 50}}在设置页面的js文件中,可以在onInit这样写:onInit(){this.keys = Object.keys(this.set)}在hml页面可以这样写:<div><div for=”{{key in keys}}”><div if=”{{set[key].type == ‘color’}}”>...</div><div if=”{{set[key].type == ‘number’}}”>...</div><div if=”{{set[key].type == ‘boolean’}}”>...</div></div></div>这样,就可以快速地为卡片添加更多的修改属性,让用户可以有更高的自由度。最后简单展示一下完整的成果

评论6

浏览 1.8k

发布于2021-07-14 09:04
dev eco studio5.0以下的版本在官网为什么找不到了,因为我手机系统是harmony os4.0,使用dev eco studio5.0以上识别不了

评论8

浏览 341

发布于2026-09-03 09:17
我的手机是nova 7 5g jef-an20 hmos4.2为什么hdc shell bm get --udid获取不到udid,也用华为助手链接电脑了,哪位大侠指点迷津

评论16

浏览 202

发布于2026-09-02 03:20
匿名用户
|
采纳答复
友友你好你原理:UDID(Unique Device Identifier)是设备的唯一标识符。hdc shell bm get --udid 命令是通过设备端的 bm(Bundle Manager)工具获取设备 UDID。该命令要求设备处于开发者模式且 hdc 连接正常,设备系统必须支持并暴露 UDID 参数。报错原因:nova 7 5G(JEF-AN20)运行的是 HarmonyOS 4.2,而非 HarmonyOS NEXT(5.0+)。bm get --udid 是 HarmonyOS NEXT / OpenHarmony 标准系统的 bm 工具命令。HarmonyOS 4.x 基于 AOSP 架构,其 bm 工具版本和命令参数与 NEXT 不同,不支持 --udid / -u 参数,因此返回空值而非报错。此外,即使命令格式正确,还需满足:1. 设备必须开启开发者模式(设置 > 关于本机 > 连续点击7次版本号)2. 必须开启USB调试(设置 > 系统 > 开发者选项 > USB调试)3. hdc 连接必须正常(hdc list targets 能看到设备)解决方案:使用 HarmonyOS 4.x 支持的替代命令获取设备唯一标识。详细步骤:1. 确认 hdc 连接正常:hdc list targets应能看到设备序列号。2. 方法一:通过 param 工具获取 UDID:hdc shell param get const.product.udid3. 方法二:通过设备序列号作为唯一标识(即 hdc list targets 显示的值)4. 方法三:进入 hdc shell 后查看系统属性:hdc shellparam get const.product.udid如果返回 errNum is:106,说明该设备系统版本不支持此参数。5. 方法四:通过华为手机助手连接后,在助手界面查看设备信息中的序列号。6. 若需要在 AGC 配置调试设备 UDID,而以上方法均无法获取,可尝试:hdc shell bm get -u(注意是 -u 而非 --udid,部分 HarmonyOS 4.x 版本支持短参数)其他解决方式:1. 通过 DevEco Studio 自动获取:连接设备后打开 DevEco Studio,在 Signing Configs 签名配置界面,点击"自动签名",工具会自动读取设备 UDID 并配置到调试 Profile 中,无需手动获取。2. 升级到 HarmonyOS NEXT:nova 7 5G(JEF-AN20)属麒麟985平台,部分机型已推送 HarmonyOS NEXT 升级。升级后 hdc shell bm get --udid 可正常使用。3. 通过 ADB 兼容命令:HarmonyOS 4.x 兼容 ADB 协议,可尝试:adb shell settings get secure device_udid或adb shell cat /sys/class/udid/udid4. 使用 deviceInfo API 获取:在应用代码中通过 @ohos.deviceInfo 模块的 udid 属性获取(需要 ohos.permission.sec.ACCESS_UDID 受限权限),适用于开发调试场景。若是有更好方案,欢迎大佬们一起参与讨论。
点赞2
回复于2026-09-02 06:25
板子底层是open harmony 4.1版本的  想问一下我用Dev Studio 5版本的可以识别到吗 顺便求一个DevEco Studio 4.1.0.400官方安装包 

评论5

浏览 266

发布于2026-09-01 02:44
第三期招募什么时候开始,这一期没赶上

评论1

浏览 843

发布于2021-05-20 08:05
个人开发的跨平台产品,对于安卓端应该是apk吧,这个鸿蒙4.3以前甚至是EMUI的应用市场入口是在哪啊,上架相关产品需要什么条件吗

评论4

浏览 152

发布于2026-08-31 06:37
我在网盘下载一个文件到/storage/emulated/0/xxx目录后,在网盘程序中计算该文件的md5,发现md5与预期不一致,排查时发现是因为在网盘程序中读取文件时由于FUSE机制,导致读到的内容中EXIF的GPS相关信息被置0了,所以最终计算得到的md5不符合预期,这是为什么呢,这个问题只在某几款可以安装apk的华为设备中出现,实测在mate50就有这个问题。

评论10

浏览 178

发布于2026-08-27 09:59
双框车机,api7开发的JS桌面卡片如何获取apk应用SharedPreferences缓存的登录信息

评论4

浏览 99

发布于2026-08-25 07:41
  目前鸿蒙尚未推出底部导航栏的标签,也有楼主基于现有的api来自定义底部导航栏。我在这里提出一个问题: 如何实现多Page Ability的一个底部导航栏?  为什么我会有这种想法:在实际开发中,我们可能想让tabbar中的页面进行跨设备迁移。因此会创建一个Page Ability模块,来编写功能。文档中,页面路由是在同page下,换句话说是同一个Page Ability模块下的页面,可以通过页面路由的方式,进行页面的跳转。那么,当我们tabbar中,一个或多个页面是来自不同的模块,这个tabbar我们应该如何去开发呢?  最近也在做相关代码的编写,因为比较喜欢全栈,前端选择了JsUI。  这里提出几个方案:先开发出tabbar组件代码,在对应的ability页面顶部引入该组件。组件代码需要实现在点击时,通过ability方式调用JAVA PA【https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-js-fa-call-pa-0000001050435961】,在java代码中实现跳转到另外一个ability页面【https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-fa-calls-pa-overview-0000000000617989】。我们将tabbar的所有页面都写在一个page下面,这样就可以使用页面路由功能进行页面的切换。此时是没有多模块的,因此我们需要新建几个Page Ability,将页面代码粘贴过去。这样可以让其他设备调用到相同【长相相同】的页面,从而让用户无感。  方案问题:由于InternalAbility不是继承的Ability类,因此不能使用相关代码。 Ability方式去调用,如果存在延迟,底部导航栏可能在页面跳转的过程中,无法显示。代码冗余,当然也可以提炼出组件,通过调用组件展示页面。  大家都来讨论一下,发表一下自己的观点。

评论2

浏览 1.5k

发布于2021-01-14 08:20

我要提问题

月度答复贡献榜
用户头像
橙动创意
回帖1.1k
粉丝64
关注
用户头像
Z
回帖804
粉丝14
关注
用户头像
蓝瘦的蜕变
回帖492
粉丝135
关注
用户头像
飞b6
回帖486
粉丝16
关注
用户头像
心系天下
回帖474
粉丝21
关注
邀您回答
bash build/prebuilts_download.sh 命令出错 电鸿PH2.0.0.0
热门标签
1

HarmonyOS 5

2

HarmonyOS 6

3

DevEco Studio

4

UI

5

HarmonyOS

6

ArkUI (方舟UI框架)

7

HarmonyOS 7

8

App开发

9

Ability框架

了解社区公约,与您携手共创和谐专业的开发者社区。
在 App 中查看