鸿蒙金融理财全栈项目:生态合作、用户运营与数据变现
档详解鸿蒙金融理财全栈项目的关键实现模块,涵盖生态合作(金融机构、支付渠道、数据分析)、用户运营(增长、留存、转化)及数据变现(服务、产品、变现)。通过 ArkTS 语言编写工具类与页面组件,展示单例模式、异步调用及 UI 交互逻辑。内容包含代码示例与部署流程,旨在帮助开发者构建具备商业闭环能力的金融级应用。

档详解鸿蒙金融理财全栈项目的关键实现模块,涵盖生态合作(金融机构、支付渠道、数据分析)、用户运营(增长、留存、转化)及数据变现(服务、产品、变现)。通过 ArkTS 语言编写工具类与页面组件,展示单例模式、异步调用及 UI 交互逻辑。内容包含代码示例与部署流程,旨在帮助开发者构建具备商业闭环能力的金融级应用。

本文档基于金融场景的生态合作、用户运营、数据变现要求,设计并实现鸿蒙金融理财全栈项目的核心功能。
生态合作是指金融理财项目与其他金融机构、支付渠道、数据分析平台等进行合作,共同推动业务发展,主要包括以下方面:
生态合作采用分层架构,由以下部分组成:
基于金融场景的生态合作要求,实现以下功能:
File: entry/src/main/ets/utils/FinancialInstitutionCooperationUtil.ets
import cooperation from '@ohos.cooperation';
// 金融机构合作工具类
export class FinancialInstitutionCooperationUtil {
private static instance: FinancialInstitutionCooperationUtil | null = null;
private cooperationHelper: cooperation.CooperationHelper | null = null;
// 单例模式
static getInstance(): FinancialInstitutionCooperationUtil {
if (!FinancialInstitutionCooperationUtil.instance) {
FinancialInstitutionCooperationUtil.instance = new FinancialInstitutionCooperationUtil();
}
return FinancialInstitutionCooperationUtil.instance;
}
// 初始化金融机构合作工具
async init(): Promise<void> {
if (!this.cooperationHelper) {
this.cooperationHelper = cooperation.createCooperationHelper();
}
}
// 获取金融机构列表
async getFinancialInstitutionList(): Promise<Array<cooperation.FinancialInstitution>> {
if (!this.cooperationHelper) {
return [];
}
const result = await this.cooperationHelper.getFinancialInstitutionList();
return result;
}
// 与金融机构合作
async cooperateWithFinancialInstitution(institutionId: number): Promise<cooperation.CooperationResult> {
if (!this.cooperationHelper) {
return null;
}
const result = await this.cooperationHelper.cooperateWithFinancialInstitution(institutionId);
return result;
}
}
File: entry/src/main/ets/pages/FinancialInstitutionCooperationPage.ets
import { FinancialInstitutionCooperationUtil } from '../utils/FinancialInstitutionCooperationUtil';
@Entry
@Component
struct FinancialInstitutionCooperationPage {
@State financialInstitutionList: Array<cooperation.FinancialInstitution> = [];
build() {
Column({ space: 16 }) {
Text('金融机构合作').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ListComponent({ data: this.financialInstitutionList, renderItem: (item: cooperation.FinancialInstitution, index: number) => {
Row({ space: 16 }) {
Image(item.logoUrl).width(80).height(80).objectFit(ImageFit.Cover).borderRadius(8);
Column({ space: 8 }) {
Text(item.name).fontSize(16).fontWeight(FontWeight.Bold).textColor('#000000');
Text(item.description).fontSize(14).textColor('#666666').maxLines(2).textOverflow({ overflow: TextOverflow.Ellipsis });
}.layoutWeight(1);
ButtonComponent({ text: '合作', onClick: async () => {
await this.cooperateWithFinancialInstitution(item.institutionId);
}, disabled: false });
}.width('100%').height('auto').padding(16).backgroundColor('#FFFFFF').borderRadius(8).margin({ bottom: 8 });
}, onItemClick: (item: cooperation.FinancialInstitution, index: number) => {
// 点击事件处理
}});
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
// 初始化金融机构合作
FinancialInstitutionCooperationUtil.getInstance().init();
// 获取金融机构列表
this.getFinancialInstitutionList();
}
async getFinancialInstitutionList(): Promise<void> {
this.financialInstitutionList = await FinancialInstitutionCooperationUtil.getInstance().getFinancialInstitutionList();
}
async cooperateWithFinancialInstitution(institutionId: number): Promise<void> {
const result = await FinancialInstitutionCooperationUtil.getInstance().cooperateWithFinancialInstitution(institutionId);
if (result.success) {
promptAction.showToast({ message: '与金融机构合作成功' });
} else {
promptAction.showToast({ message: '与金融机构合作失败' });
}
}
}
File: entry/src/main/ets/utils/PaymentChannelCooperationUtil.ets
import payment from '@ohos/payment';
// 支付渠道合作工具类
export class PaymentChannelCooperationUtil {
private static instance: PaymentChannelCooperationUtil | null = null;
private paymentHelper: payment.PaymentHelper | null = null;
// 单例模式
static getInstance(): PaymentChannelCooperationUtil {
if (!PaymentChannelCooperationUtil.instance) {
PaymentChannelCooperationUtil.instance = new PaymentChannelCooperationUtil();
}
return PaymentChannelCooperationUtil.instance;
}
// 初始化支付渠道合作工具
async init(): Promise<void> {
if (!this.paymentHelper) {
this.paymentHelper = payment.createPaymentHelper();
}
}
// 获取支付渠道列表
async getPaymentChannelList(): Promise<Array<payment.PaymentChannel>> {
if (!this.paymentHelper) {
return [];
}
const result = await this.paymentHelper.getPaymentChannelList();
return result;
}
// 与支付渠道合作
async cooperateWithPaymentChannel(channelId: number): Promise<payment.CooperationResult> {
if (!this.paymentHelper) {
return null;
}
const result = await this.paymentHelper.cooperateWithPaymentChannel(channelId);
return result;
}
}
File: entry/src/main/ets/pages/PaymentChannelCooperationPage.ets
import { PaymentChannelCooperationUtil } from '../utils/PaymentChannelCooperationUtil';
@Entry
@Component
struct PaymentChannelCooperationPage {
@State paymentChannelList: Array<payment.PaymentChannel> = [];
build() {
Column({ space: 16 }) {
Text('支付渠道合作').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ListComponent({ data: this.paymentChannelList, renderItem: (item: payment.PaymentChannel, index: number) => {
Row({ space: 16 }) {
Image(item.logoUrl).width(80).height(80).objectFit(ImageFit.Cover).borderRadius(8);
Column({ space: 8 }) {
Text(item.name).fontSize(16).fontWeight(FontWeight.Bold).textColor('#000000');
Text(item.description).fontSize(14).textColor('#666666').maxLines(2).textOverflow({ overflow: TextOverflow.Ellipsis });
}.layoutWeight(1);
ButtonComponent({ text: '合作', onClick: async () => {
await this.cooperateWithPaymentChannel(item.channelId);
}, disabled: false });
}.width('100%').height('auto').padding(16).backgroundColor('#FFFFFF').borderRadius(8).margin({ bottom: 8 });
}, onItemClick: (item: payment.PaymentChannel, index: number) => {
// 点击事件处理
}});
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
// 初始化支付渠道合作
PaymentChannelCooperationUtil.getInstance().init();
// 获取支付渠道列表
this.getPaymentChannelList();
}
async getPaymentChannelList(): Promise<void> {
this.paymentChannelList = await PaymentChannelCooperationUtil.getInstance().getPaymentChannelList();
}
async cooperateWithPaymentChannel(channelId: number): Promise<void> {
const result = await PaymentChannelCooperationUtil.getInstance().cooperateWithPaymentChannel(channelId);
if (result.success) {
promptAction.showToast({ message: '与支付渠道合作成功' });
} else {
promptAction.showToast({ message: '与支付渠道合作失败' });
}
}
}
File: entry/src/main/ets/utils/DataAnalysisCooperationUtil.ets
import analysis from '@ohos.analysis';
// 数据分析合作工具类
export class DataAnalysisCooperationUtil {
private static instance: DataAnalysisCooperationUtil | null = null;
private analysisHelper: analysis.AnalysisHelper | null = null;
// 单例模式
static getInstance(): DataAnalysisCooperationUtil {
if (!DataAnalysisCooperationUtil.instance) {
DataAnalysisCooperationUtil.instance = new DataAnalysisCooperationUtil();
}
return DataAnalysisCooperationUtil.instance;
}
// 初始化数据分析合作工具
async init(): Promise<void> {
if (!this.analysisHelper) {
this.analysisHelper = analysis.createAnalysisHelper();
}
}
// 获取数据分析平台列表
async getDataAnalysisPlatformList(): Promise<Array<analysis.DataAnalysisPlatform>> {
if (!this.analysisHelper) {
return [];
}
const result = await this.analysisHelper.getDataAnalysisPlatformList();
return result;
}
// 与数据分析平台合作
async cooperateWithDataAnalysisPlatform(platformId: number): Promise<analysis.CooperationResult> {
if (!this.analysisHelper) {
return null;
}
const result = await this.analysisHelper.cooperateWithDataAnalysisPlatform(platformId);
return result;
}
}
File: entry/src/main/ets/pages/DataAnalysisCooperationPage.ets
import { DataAnalysisCooperationUtil } from '../utils/DataAnalysisCooperationUtil';
@Entry
@Component
struct DataAnalysisCooperationPage {
@State dataAnalysisPlatformList: Array<analysis.DataAnalysisPlatform> = [];
build() {
Column({ space: 16 }) {
Text('数据分析合作').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ListComponent({ data: this.dataAnalysisPlatformList, renderItem: (item: analysis.DataAnalysisPlatform, index: number) => {
Row({ space: 16 }) {
Image(item.logoUrl).width(80).height(80).objectFit(ImageFit.Cover).borderRadius(8);
Column({ space: 8 }) {
Text(item.name).fontSize(16).fontWeight(FontWeight.Bold).textColor('#000000');
Text(item.description).fontSize(14).textColor('#666666').maxLines(2).textOverflow({ overflow: TextOverflow.Ellipsis });
}.layoutWeight(1);
ButtonComponent({ text: '合作', onClick: async () => {
await this.cooperateWithDataAnalysisPlatform(item.platformId);
}, disabled: false });
}.width('100%').height('auto').padding(16).backgroundColor('#FFFFFF').borderRadius(8).margin({ bottom: 8 });
}, onItemClick: (item: analysis.DataAnalysisPlatform, index: number) => {
// 点击事件处理
}});
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
// 初始化数据分析合作
DataAnalysisCooperationUtil.getInstance().init();
// 获取数据分析平台列表
this.getDataAnalysisPlatformList();
}
async getDataAnalysisPlatformList(): Promise<void> {
this.dataAnalysisPlatformList = await DataAnalysisCooperationUtil.getInstance().getDataAnalysisPlatformList();
}
async cooperateWithDataAnalysisPlatform(platformId: number): Promise<void> {
const result = await DataAnalysisCooperationUtil.getInstance().cooperateWithDataAnalysisPlatform(platformId);
if (result.success) {
promptAction.showToast({ message: '与数据分析平台合作成功' });
} else {
promptAction.showToast({ message: '与数据分析平台合作失败' });
}
}
}
基于金融场景的用户运营要求,实现以下功能:
File: entry/src/main/ets/utils/UserGrowthUtil.ets
import growth from '@ohos.growth';
// 用户增长工具类
export class UserGrowthUtil {
private static instance: UserGrowthUtil | null = null;
private growthHelper: growth.GrowthHelper | null = null;
// 单例模式
static getInstance(): UserGrowthUtil {
if (!UserGrowthUtil.instance) {
UserGrowthUtil.instance = new UserGrowthUtil();
}
return UserGrowthUtil.instance;
}
// 初始化用户增长工具
async init(): Promise<void> {
if (!this.growthHelper) {
this.growthHelper = growth.createGrowthHelper();
}
}
// 获取新用户
async getNewUsers(): Promise<Array<growth.NewUser>> {
if (!this.growthHelper) {
return [];
}
const result = await this.growthHelper.getNewUsers();
return result;
}
// 促进用户增长
async promoteUserGrowth(): Promise<growth.UserGrowthResult> {
if (!this.growthHelper) {
return null;
}
const result = await this.growthHelper.promoteUserGrowth();
return result;
}
}
File: entry/src/main/ets/pages/UserGrowthPage.ets
import { UserGrowthUtil } from '../utils/UserGrowthUtil';
@Entry
@Component
struct UserGrowthPage {
@State newUsers: Array<growth.NewUser> = [];
build() {
Column({ space: 16 }) {
Text('用户增长').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ListComponent({ data: this.newUsers, renderItem: (item: growth.NewUser, index: number) => {
Row({ space: 16 }) {
Image(item.avatarUrl).width(80).height(80).objectFit(ImageFit.Cover).borderRadius(8);
Column({ space: 8 }) {
Text(item.name).fontSize(16).fontWeight(FontWeight.Bold).textColor('#000000');
Text(`注册时间:${item.registrationTime}`).fontSize(14).textColor('#666666');
Text(`注册渠道:${item.registrationChannel}`).fontSize(14).textColor('#666666');
}.layoutWeight(1);
}.width('100%').height('auto').padding(16).backgroundColor('#FFFFFF').borderRadius(8).margin({ bottom: 8 });
}, onItemClick: (item: growth.NewUser, index: number) => {
// 点击事件处理
}});
ButtonComponent({ text: '促进用户增长', onClick: async () => {
await this.promoteUserGrowth();
}, disabled: false });
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
// 初始化用户增长
UserGrowthUtil.getInstance().init();
// 获取新用户
this.getNewUsers();
}
async getNewUsers(): Promise<void> {
this.newUsers = await UserGrowthUtil.getInstance().getNewUsers();
}
async promoteUserGrowth(): Promise<void> {
const result = await UserGrowthUtil.getInstance().promoteUserGrowth();
if (result.success) {
promptAction.showToast({ message: '促进用户增长成功' });
} else {
promptAction.showToast({ message: '促进用户增长失败' });
}
}
}
File: entry/src/main/ets/utils/UserRetentionUtil.ets
import retention from '@ohos.retention';
// 用户留存工具类
export class UserRetentionUtil {
private static instance: UserRetentionUtil | null = null;
private retentionHelper: retention.RetentionHelper | null = null;
// 单例模式
static getInstance(): UserRetentionUtil {
if (!UserRetentionUtil.instance) {
UserRetentionUtil.instance = new UserRetentionUtil();
}
return UserRetentionUtil.instance;
}
// 初始化用户留存工具
async init(): Promise<void> {
if (!this.retentionHelper) {
this.retentionHelper = retention.createRetentionHelper();
}
}
// 获取用户留存数据
async getUserRetentionData(): Promise<retention.UserRetentionData> {
if (!this.retentionHelper) {
return null;
}
const result = await this.retentionHelper.getUserRetentionData();
return result;
}
// 提高用户留存率
async improveUserRetention(): Promise<retention.UserRetentionResult> {
if (!this.retentionHelper) {
return null;
}
const result = await this.retentionHelper.improveUserRetention();
return result;
}
}
File: entry/src/main/ets/pages/UserRetentionPage.ets
import { UserRetentionUtil } from '../utils/UserRetentionUtil';
@Entry
@Component
struct UserRetentionPage {
@State userRetentionData: retention.UserRetentionData | null = null;
build() {
Column({ space: 16 }) {
Text('用户留存').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
if (this.userRetentionData) {
Text(`次日留存率:${this.userRetentionData.nextDayRetentionRate}%`).fontSize(14).textColor('#000000');
Text(`7 日留存率:${this.userRetentionData.sevenDayRetentionRate}%`).fontSize(14).textColor('#666666');
Text(`30 日留存率:${this.userRetentionData.thirtyDayRetentionRate}%`).fontSize(14).textColor('#666666');
}
ButtonComponent({ text: '提高用户留存率', onClick: async () => {
await this.improveUserRetention();
}, disabled: false });
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
// 初始化用户留存
UserRetentionUtil.getInstance().init();
// 获取用户留存数据
this.getUserRetentionData();
}
async getUserRetentionData(): Promise<void> {
this.userRetentionData = await UserRetentionUtil.getInstance().getUserRetentionData();
}
async improveUserRetention(): Promise<void> {
const result = await UserRetentionUtil.getInstance().improveUserRetention();
if (result.success) {
promptAction.showToast({ message: '提高用户留存率成功' });
} else {
promptAction.showToast({ message: '提高用户留存率失败' });
}
}
}
File: entry/src/main/ets/utils/UserConversionUtil.ets
import conversion from '@ohos.conversion';
// 用户转化工具类
export class UserConversionUtil {
private static instance: UserConversionUtil | null = null;
private conversionHelper: conversion.ConversionHelper | null = null;
// 单例模式
static getInstance(): UserConversionUtil {
if (!UserConversionUtil.instance) {
UserConversionUtil.instance = new UserConversionUtil();
}
return UserConversionUtil.instance;
}
// 初始化用户转化工具
async init(): Promise<void> {
if (!this.conversionHelper) {
this.conversionHelper = conversion.createConversionHelper();
}
}
// 获取用户转化数据
async getUserConversionData(): Promise<conversion.UserConversionData> {
if (!this.conversionHelper) {
return null;
}
const result = await this.conversionHelper.getUserConversionData();
return result;
}
// 促进用户转化
async promoteUserConversion(): Promise<conversion.UserConversionResult> {
if (!this.conversionHelper) {
return null;
}
const result = await this.conversionHelper.promoteUserConversion();
return result;
}
}
File: entry/src/main/ets/pages/UserConversionPage.ets
import { UserConversionUtil } from '../utils/UserConversionUtil';
@Entry
@Component
struct UserConversionPage {
@State userConversionData: conversion.UserConversionData | null = null;
build() {
Column({ space: 16 }) {
Text('用户转化').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
if (this.userConversionData) {
Text(`注册转化率:${this.userConversionData.registrationConversionRate}%`).fontSize(14).textColor('#000000');
Text(`购买转化率:${this.userConversionData.purchaseConversionRate}%`).fontSize(14).textColor('#666666');
Text(`付费转化率:${this.userConversionData.paidConversionRate}%`).fontSize(14).textColor('#666666');
}
ButtonComponent({ text: '促进用户转化', onClick: async () => {
await this.promoteUserConversion();
}, disabled: false });
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
// 初始化用户转化
UserConversionUtil.getInstance().init();
// 获取用户转化数据
this.getUserConversionData();
}
async getUserConversionData(): Promise<void> {
this.userConversionData = await UserConversionUtil.getInstance().getUserConversionData();
}
async promoteUserConversion(): Promise<void> {
const result = await UserConversionUtil.getInstance().promoteUserConversion();
if (result.success) {
promptAction.showToast({ message: '促进用户转化成功' });
} else {
promptAction.showToast({ message: '促进用户转化失败' });
}
}
}
基于金融场景的数据变现要求,实现以下功能:
File: entry/src/main/ets/utils/DataServiceUtil.ets
import service from '@ohos.service';
// 数据服务工具类
export class DataServiceUtil {
private static instance: DataServiceUtil | null = null;
private serviceHelper: service.ServiceHelper | null = null;
// 单例模式
static getInstance(): DataServiceUtil {
if (!DataServiceUtil.instance) {
DataServiceUtil.instance = new DataServiceUtil();
}
return DataServiceUtil.instance;
}
// 初始化数据服务工具
async init(): Promise<void> {
if (!this.serviceHelper) {
this.serviceHelper = service.createServiceHelper();
}
}
// 获取数据服务列表
async getDataServiceList(): Promise<Array<service.DataService>> {
if (!this.serviceHelper) {
return [];
}
const result = await this.serviceHelper.getDataServiceList();
return result;
}
// 提供数据服务
async provideDataService(serviceId: number): Promise<service.DataServiceResult> {
if (!this.serviceHelper) {
return null;
}
const result = await this.serviceHelper.provideDataService(serviceId);
return result;
}
}
File: entry/src/main/ets/pages/DataServicePage.ets
import { DataServiceUtil } from '../utils/DataServiceUtil';
@Entry
@Component
struct DataServicePage {
@State dataServiceList: Array<service.DataService> = [];
build() {
Column({ space: 16 }) {
Text('数据服务').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');
ListComponent({ data: this.dataServiceList, renderItem: (item: service.DataService, index: number) => {
Row({ space: 16 }) {
Text(item.name).fontSize(16).fontWeight(FontWeight.Bold).textColor('#000000');
Text(item.description).fontSize(14).textColor('#666666').maxLines(2).textOverflow({ overflow: TextOverflow.Ellipsis });
Text(`价格:¥${item.price}`).fontSize(14).textColor('#FF0000');
}.width('100%').height('auto').padding(16).backgroundColor('#FFFFFF').borderRadius(8).margin({ bottom: 8 });
}, onItemClick: (item: service.DataService, index: number) => {
// 点击事件处理
}});
ButtonComponent({ text: '提供数据服务', onClick: async () => {
await this.provideDataService();
}, disabled: false });
}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');
}
aboutToAppear() {
// 初始化数据服务
DataServiceUtil.getInstance().init();
// 获取数据服务列表
this.getDataServiceList();
}
async getDataServiceList(): Promise<void> {
this.dataServiceList = await DataServiceUtil.getInstance().getDataServiceList();
}
async provideDataService(): Promise<void> {
const result = await DataServiceUtil.getInstance().provideDataService();
if (result.success) {
promptAction.showToast({ message: '提供数据服务成功' });
} else {
promptAction.showToast({ message: '提供数据服务失败' });
}
}
}
File: entry/src/main/ets/utils/DataProductUtil.ets
import product from '@ohos.product';
// 数据产品工具类
export class DataProductUtil {
private static instance: DataProductUtil | null = null;
private productHelper: product.ProductHelper | null = null;
// 单例模式
static getInstance(): DataProductUtil {
if (!DataProductUtil.instance) {
DataProductUtil.instance = new DataProductUtil();
}
return DataProductUtil.instance;
}
// 初始化数据产品工具
async init(): Promise<void> {
if (!this.productHelper) {
this.productHelper = product.createProductHelper();
}
}
// 获取数据产品列表
async getDataProductList(): Promise<Array<product.DataProduct>> {
if (!this.productHelper) {
return [];
}
const result = await this.productHelper.getDataProductList();
return result;
}
// 开发数据产品
async developDataProduct(productData: product.DataProductData): Promise<product.DataProductResult> {
if (!this.productHelper) {
return null;
}
const result = await this.productHelper.developDataProduct(productData);
return result;
}
}
File: entry/src/main/ets/utils/DataMonetizationUtil.ets
import monetization from '@ohos.monetization';
// 数据变现工具类
export class DataMonetizationUtil {
private static instance: DataMonetizationUtil | null = null;
private monetizationHelper: monetization.MonetizationHelper | null = null;
// 单例模式
static getInstance(): DataMonetizationUtil {
if (!DataMonetizationUtil.instance) {
DataMonetizationUtil.instance = new DataMonetizationUtil();
}
return DataMonetizationUtil.instance;
}
// 初始化数据变现工具
async init(): Promise<void> {
if (!this.monetizationHelper) {
this.monetizationHelper = monetization.createMonetizationHelper();
}
}
// 实现数据变现
async monetizeData(): Promise<monetization.DataMonetizationResult> {
if (!this.monetizationHelper) {
return null;
}
const result = await this.monetizationHelper.monetizeData();
return result;
}
}
在「entry/src/main/module.json5」中添加生态合作、用户运营、数据变现配置:
{
"module": {
"requestPermissions": [ /* ... */ ],
"abilities": [ /* ... */ ],
"widgets": [ /* ... */ ],
"pages": [ /* ... */ ]
}
}
在 DevEco Studio 中点击「Build」→「Build HAP」,编译项目。
将编译后的 HAP 文件部署到鸿蒙设备上。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online