应用开发实战

ArkUI框架

ArkUI是HarmonyOS的声明式UI开发框架,提供TS/JS和eTS两种开发范式。基于声明式语法、组件化设计,支持高性能渲染与跨设备适配,适用于手机、平板、智慧屏等HarmonyOS设备。

环境准备

安装DevEco Studio

下载最新版DevEco Studio,支持Windows/Mac。配置Node.js(>=14.19.1)和HarmonyOS SDK。

创建ArkUI项目

选择Application > Empty Ability模板,语言选eTS或JS。项目结构包括pagesresourcesets/js

语法

基础组件
@Component
struct MyComponent {
  build() {
    Column() {
      Text('Hello ArkUI')  
        .fontSize(20)  
        .fontColor('#FF0000')  
      Button('Click')  
        .onClick(() => {  
          console.log('Button clicked');  
        })  
    }  
  }  
}  
 
数据绑定

使用@State@Link实现双向绑定:

@Entry  
@Component  
struct ParentComponent {  
  @State count: number = 0  

  build() {  
    Column() {  
      ChildComponent({ count: $count })  
      Button('Increment').onClick(() => { this.count++ })  
    }  
  }  
}  

@Component  
struct ChildComponent {  
  @Link count: number  

  build() {  
    Text(`Count: ${this.count}`)  
  }  
}  
 
布局与样式

Flex布局

Column() {  
  Row() {  
    Text('Item1').flexGrow(1)  
    Text('Item2').flexGrow(2)  
  }  
  .justifyContent(FlexAlign.SpaceBetween)  
}  
 
网格布局
Grid() {  
  GridItem() { Text('A') }  
  GridItem() { Text('B') }  
}  
.columnsTemplate('1fr 1fr')  
 
动画实现

通过animateTo和属性动画API:

@State scale: number = 1  

Button('Animate')  
  .scale({ x: this.scale, y: this.scale })  
  .onClick(() => {  
    animateTo({ duration: 1000 }, () => {  
      this.scale = this.scale === 1 ? 2 : 1  
    })  
  })  
 

    数据存储与管理

    轻量级偏好数据库

    轻量级偏好数据库是HarmonyOS提供的一种简单键值对存储方案,适用于存储少量、非敏感数据。

    特点

    基于键值对存储,支持基本数据类型。

    数据存储在本地,不支持跨设备同步。

    适合高频读写的小规模数据场景。

    使用方法

    导入依赖模块:

    import dataPreferences from '@ohos.data.preferences';
    

    获取Preferences实例:

    let preferences = await dataPreferences.getPreferences(context, 'mydata');
    

    写入数据:

    await preferences.put('key', 'value');
    await preferences.flush(); // 提交更改
    

    读取数据:

    let value = await preferences.get('key', 'defaultValue');
    

    删除数据:

    await preferences.delete('key');
    

    分布式数据服务

    分布式数据服务允许设备间数据共享与同步,适用于多设备协同场景。

    特点

    基于分布式数据库(KVStore),支持跨设备数据同步。

    提供数据加密和权限控制,保障安全性。

    自动处理网络状态变化,实现数据一致性。

    核心组件

    分布式数据库:轻量级NoSQL数据库,支持多设备同步。

    分布式数据对象:实时共享的数据对象,变更自动同步。

    使用方法(KVStore示例)

    导入模块:

    import distributedKVStore from '@ohos.data.distributedKVStore';
    

    创建KVStore实例:

    let kvManager;
    let kvStore;
    const options = {
      bundleName: 'com.example.myapp',
      userInfo: {
        userId: 'user1'
      }
    };
    distributedKVStore.createKVManager(options).then((manager) => {
      kvManager = manager;
      return kvManager.getKVStore('mystore', { autoSync: true });
    }).then((store) => {
      kvStore = store;
    });
    

    写入数据:

    await kvStore.put('key', 'value');
    

    读取数据:

    let value = await kvStore.get('key');
    

    同步数据到其他设备:

    let deviceList = ['device1', 'device2']; // 目标设备ID列表
    await kvStore.sync(deviceList, distributedKVStore.SyncMode.PUSH_ONLY);
    

    选择建议

    轻量级偏好数据库:适用于单设备、小规模配置存储(如主题设置、用户偏好)。

    分布式数据服务:适用于多设备数据共享(如跨设备任务接力、统一剪贴板)。

    两者可结合使用,例如将用户偏好存储在本地Preferences中,而需要共享的数据通过KVStore同步。

    网络通信与安全

    HTTP/HTTPS请求实现

    在HarmonyOS中,HTTP/HTTPS请求主要通过@ohos.net.http模块实现。该模块提供了创建连接、发送请求、处理响应等核心功能。开发者需在config.json中声明网络权限:

    {
      "module": {
        "reqPermissions": [
          {
            "name": "ohos.permission.INTERNET"
          }
        ]
      }
    }
    
    创建HTTP请求的典型代码示例:
    import http from '@ohos.net.http';
    
    let httpRequest = http.createHttp();
    let url = 'https://example.com/api';
    let promise = httpRequest.request(
      url,
      {
        method: 'POST',
        header: {
          'Content-Type': 'application/json'
        },
        extraData: JSON.stringify({key: 'value'})
      }
    );
    promise.then((response) => {
      console.log('Result:' + JSON.stringify(response.result));
    }).catch((err) => {
      console.error('Error:' + JSON.stringify(err));
    });
    
    HTTPS证书校验机制

    HarmonyOS提供严格的HTTPS安全校验机制,默认启用证书链验证和域名校验。如需自定义证书校验,可通过http.RequestOptionssslCa字段指定CA证书:

    {
      sslCa: getContext(this).resourceManager.getRawFileContentSync('ca.crt')
    }
    

    开发阶段可临时禁用校验(仅限调试):

    {
      usingProtocol: http.HttpProtocol.HTTP1_1,
      usingProxy: false,
      extraOptions: {
        trustAll: true  // 禁用证书验证
      }
    }
    

    数据加密

    传输层加密:HTTPS自动启用TLS 1.2/1.3协议,采用AES-GCM或ChaCha20-Poly1305等加密算法。

    应用层加密:可使用@ohos.security.cryptoFramework进行端到端加密:

    import cryptoFramework from '@ohos.security.cryptoFramework';
    
    // AES加密示例
    async function aesEncrypt(plainText: string) {
      let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256');
      let cipher = cryptoFramework.createCipher('AES256|GCM|PKCS7');
      await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKeyGenerator);
      return await cipher.doFinal(new TextEncoder().encode(plainText));
    }
    

    敏感数据存储:使用@ohos.data.preferences加密存储:

    import preferences from '@ohos.data.preferences';
    
    let context = getContext(this);
    let promise = preferences.getPreferences(context, 'secret_data');
    promise.then((pref) => {
      pref.put('token', 'encrypted_value').flush();
    });
    

    分布式场景开发

    多设备协同的场景设计与实现

    场景设计

    HarmonyOS通过分布式技术实现多设备协同,主要场景包括跨设备文件共享、多屏协同、任务流转、智能家居联动等。其核心设计理念为“一次开发,多端部署”,借助分布式软总线、分布式数据管理和分布式任务调度三大技术实现设备间的无缝连接。

    跨设备文件共享允许用户在手机、平板、PC等设备间拖拽传输文件,基于统一的分布式文件系统实现。多屏协同支持将手机界面投射到平板或电视,并可通过外设操控。任务流转使应用可在不同设备间无缝切换,如导航从手机转到车载屏幕。智能家居联动场景中,手机可自动发现并控制附近的IoT设备。

    开发实现方式

    开发者可通过Ability框架实现跨设备应用调用。使用Want对象描述跨设备启动意图,系统自动匹配目标设备。示例代码:

    let want = {
      deviceId: "", // 自动发现目标设备
      action: "ohos.want.action.editData",
      entities: ["entity.system.default"]
    };
    await context.startAbility(want);
     
    

    分布式数据管理API示例:

    KvManagerConfig config = new KvManagerConfig(context);
    KvManager manager = KvManagerFactory.getInstance().createKvManager(config);
    Options options = new Options();
    options.createIfMissing(true).encrypt(false).backup(false);
    DistributedKVStore store = manager.getKVStore("appStore", options);
     
    

    设备发现与连接管理

    设备发现

    HarmonyOS 使用 软总线(SoftBus) 作为底层通信框架,支持多种协议(Wi-Fi、蓝牙、NFC等)自动适配。

    零配置网络(Zero-Config Networking):设备通过广播或组播主动声明自身能力,无需手动配置。

    分布式设备虚拟化:将物理设备抽象为虚拟终端,通过唯一标识(如UDID)实现精准识别。

    多模态发现:根据场景自动选择最优协议(如近场用NFC,远场用Wi-Fi)。

    示例代码(设备声明能力):

    // 发布设备服务
    DeviceInfo deviceInfo = new DeviceInfo.Builder()
        .setDeviceName("MyHarmonyDevice")
        .setDeviceType(DeviceType.SMART_PHONE)
        .addCapability("video_playback")
        .build();
    DiscoveryManager.publish(deviceInfo);
     
    

    连接管理

    统一安全认证:基于双向证书校验和动态密钥分发,确保设备间可信连接。

    自适应传输优化:根据网络质量动态切换传输策略(如TCP/UDP/TCP-MUX)。

    负载均衡:多设备协同任务时,自动分配计算资源。

    关键API示例(建立连接):

    // 订阅设备状态
    ConnectionObserver observer = new ConnectionObserver() {
        @Override
        public void onConnected(DeviceInfo device) {
            // 处理连接成功逻辑
        }
    };
    ConnectionManager.subscribe(observer);
    
    // 发起连接请求
    ConnectionPolicy policy = new ConnectionPolicy.Builder()
        .setPriority(ConnectionPriority.HIGH)
        .setPreferredProtocol(ProtocolType.WIFI_P2P)
        .build();
    ConnectionManager.connect(deviceId, policy);
     
    

    跨设备数据共享与任务迁移

    数据共享

    HarmonyOS的分布式数据管理技术允许设备间无缝共享数据。通过分布式文件系统,用户可以在不同设备上访问同一文件,修改实时同步。分布式数据库支持多设备数据一致性,确保数据更新在所有设备上可见。

    超级终端功能简化了设备连接过程。用户只需在控制中心拖拽设备图标即可完成组网,共享剪贴板、照片、文件等内容。例如手机复制文本可直接在平板上粘贴,或通过拖拽将文件从手机发送到电脑。

    任务迁移

    任务迁移基于HarmonyOS的分布式软总线技术。当用户将应用从一台设备迁移到另一台时,系统会自动打包应用状态和数据,通过低延迟传输到目标设备。迁移过程中应用保持运行状态,实现无缝切换。

    开发者可通过分布式任务调度接口实现迁移功能。调用continueAbility()方法触发迁移,系统自动处理设备发现、安全验证和数据传输。迁移后的应用保留原有界面状态和后台任务,用户感知不到中断。

    Logo

    讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

    更多推荐