原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验

news2024/11/5 9:56:29

文章目录

  • 引言
  • 一、鸿蒙原生应用的高效开发
  • 二、用户隐私保护:安全访问管理
  • 三、开发者实用工具:应用分析与A/B测试
  • 四、应用审核与分发:快速上线
    • 4.1 应用加密:保护代码安全
    • 4.2 自动化测试与检测前移:提升应用质量
  • 五、结语

引言

在移动应用市场日益激烈的竞争环境中,构建一个多设备、全场景的智能生态,为用户带来更加流畅、安全的体验,正逐渐成为行业趋势。基于这一理念,华为原生鸿蒙操作系统为开发者打造了一个开放、创新的原生应用生态,让应用能够适配多种设备并实现跨场景的无缝交互。借助鸿蒙生态的强大支持,开发者不仅能在移动设备上构建卓越的应用,还能扩展到智能穿戴、车载系统、智能家居等场景,为用户提供真正的一体化体验。

在此基础上,原生鸿蒙应用市场(AppGallery)不仅提供了广泛的分发渠道,更推出了多种开发者工具和API,从接入、优化、到用户安全保护等,为应用开发提供全面支持。

在本文中,我们将深入探讨原生鸿蒙应用市场的开发者服务,并展示如何通过技术手段实现高效的应用集成和发布。
在这里插入图片描述

一、鸿蒙原生应用的高效开发

开发者在实际的开发过程中往往会遇到许多痛点。例如,应用适配不同设备的耗时、功能模块的重复开发、用户隐私和数据安全的保障等问题,都是需要耗费大量精力去解决的。特别是在移动应用市场竞争激烈的背景下,开发者们更希望能以较短的开发周期完成应用的发布,并确保应用在多个设备和场景中的一致体验和高性能表现。

在鸿蒙生态下,AppGallery Connect(AGC)覆盖了开发、测试、分发、运营的完整流程,为开发者带来了多方面的实际价值:

1、快速适配多设备,降低开发成本:鸿蒙生态的开放性和统一性让开发者能够在多个设备上实现无缝适配。利用AppGallery Connect SDK,只需少量的代码修改,就能将应用扩展到手机、平板、智能穿戴等设备中。

// 引入AppGallery Connect SDK依赖
dependencies {
    implementation 'com.huawei.agconnect:agconnect-core:1.4.2.300'
    implementation 'com.huawei.hms:base:4.0.1.300'
}

// 初始化AppGallery服务
AGConnectApp.initialize(this);

// 示例:调用AppGallery的授权服务
AGCAuth auth = AGCAuth.getInstance();
auth.signInAnonymously().addOnSuccessListener(signInResult -> {
    Log.i("AGCAuth", "Sign in success!");
}).addOnFailureListener(e -> {
    Log.e("AGCAuth", "Sign in failed", e);
});

这种便捷的集成方式极大地缩短了开发周期,使得开发者能够专注于应用的核心功能开发,而不必花费过多时间在适配问题上。像京东、12306等大流量应用,通过AGC能够在短短1-3周内完成适配和优化,从而快速上线,为用户带来更优质的体验。

2、丰富的功能服务,减少重复开发:开发者可以通过集成多样化的SDK,如登录、推送通知、支付、分析等,轻松实现常见的应用功能,而不需要从头开发。例如,在用户登录环节,通过AGC的授权服务,开发者可以轻松实现多种登录方式,包括匿名登录、社交账号登录等,这不仅节省了开发时间,也提高了用户体验的便捷性。

3、增强的用户数据安全与隐私保护:数据安全和用户隐私是应用开发中的重中之重。原生鸿蒙操作系统和AppGallery Connect提供了内置的隐私保护功能,确保应用在多场景下的安全性。例如,AppGallery Connect的认证服务通过多重安全协议,确保用户数据在传输和存储过程中的安全性。此外,鸿蒙生态严格管理应用权限,限制不必要的权限调用,从根源上减少了隐私泄露的风险。

4、自动化测试与持续优化,提升应用质量:AppGallery Connect还提供了自动化测试和性能监控工具,让开发者可以在应用发布前、发布后实时监控应用的运行情况和用户反馈。这种持续优化的机制确保了应用在上线后也能不断改进,提供更流畅的用户体验。例如,AGC提供的远程调试和云端测试服务,可以帮助开发者识别出不同设备和场景中的潜在问题,从而进行精准的优化调整。

在这里插入图片描述

二、用户隐私保护:安全访问管理

对于开发者而言,如何既确保应用的功能性,又保证用户的数据安全,是一个巨大的挑战。特别是在涉及敏感数据(如联系人、位置等)时,不当的权限管理可能会导致数据泄露风险,进而影响用户体验和品牌声誉。

1. 开发者面临的痛点
开发者在实现权限管理时,通常会遇到以下几方面的痛点:

权限管理的复杂性:在应用中,访问用户数据往往需要申请多个权限,这些权限的申请、检查、动态授权流程会导致代码复杂性增加。
用户信任与体验平衡:频繁的权限申请会引起用户不满,甚至引发用户对隐私泄露的担忧。如果权限请求得不到合理的解释和控制,用户可能会选择卸载应用。
合规性与数据保护:开发者需要遵循多种数据隐私法律和政策(如GDPR),这些法律要求开发者必须严格控制数据的访问和使用,避免不必要的数据采集。

2. AppGallery Connect提供的解决方案

AppGallery Connect不仅帮助开发者简化了权限管理流程,还提供了细颗粒度的访问控制与隐私保护,帮助开发者更好地满足用户的隐私需求,同时提升用户的信任感。通过以下代码示例,可以看到如何利用权限管理API严格控制应用的访问权限,从而有效保护用户隐私:

<!-- 在AndroidManifest.xml中配置权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
`

// 在代码中动态请求权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 1);
}

// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == 1 && grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        Log.i("Permission", "Contact permission granted");
    } else {
        Log.e("Permission", "Contact permission denied");
    }
}

通过上述代码,开发者可以在必要时动态请求权限,并在用户同意后继续访问相关数据。这种动态权限管理方式能够有效减少不必要的权限调用,从根源上降低隐私泄露的风险。同时,AppGallery Connect还会对敏感权限进行严格审查,开发者只有在确保合理使用权限的情况下,才能顺利发布应用。

3. 对开发者的具体价值

提升开发效率:AppGallery Connect权限管理API让开发者可以更简单地实现权限请求、检查和管理,减少代码复杂性,让开发者可以专注于应用的核心功能。
增强用户信任:严格的权限管理和隐私保护机制让用户感到更安全,有助于提高用户的信任感,降低因隐私问题导致的卸载率。
确保合规:借助AppGallery Connect提供的权限管理工具,开发者可以轻松应对合规需求,确保应用符合数据隐私政策和法律要求。

4. 实际案例:开发者如何从中受益
例如,某款新闻应用需要访问用户的位置信息,以便为用户提供个性化的本地新闻推送。在开发过程中,开发者仅需集成AppGallery Connect提供的权限API,通过动态请求位置权限和隐私审查,即可在合规的前提下,获取所需的地理位置数据,而不会对用户造成任何隐私困扰。通过这样的细致权限控制,开发者不仅能够实现应用所需功能,还能在合规、保护隐私的基础上,赢得用户的信任,提升用户的使用体验。

在这里插入图片描述

三、开发者实用工具:应用分析与A/B测试

在应用开发的过程中,如何通过用户数据进行迭代优化,以提升用户体验,是每位开发者面临的重要挑战。为了做出科学的优化决策,开发者需要深入了解用户的行为模式和偏好,这往往需要大量的数据采集、分析和测试。然而,手动分析用户数据和实施A/B测试不仅耗时耗力,还容易出错,尤其是在没有成熟工具支持的情况下。AppGallery Connect通过提供应用分析和A/B测试工具,为开发者的优化工作提供了强有力的支持。

开发者的痛点与挑战
数据分析复杂且费时:开发者需要通过收集大量用户行为数据来发现应用中的问题,但手动分析这些数据不仅耗时费力,还容易产生误差。
难以进行数据驱动的决策:没有有效的分析工具,开发者在优化用户体验时往往只能依赖经验,缺乏科学依据,优化效果不稳定。
A/B测试的实现成本高:A/B测试涉及到不同版本的功能、UI对比,而在开发和测试环境中实施和追踪这些实验需要大量的技术和资源投入。

AppGallery Connect提供的解决方案
1. 应用分析工具:全面跟踪用户行为数据

AppGallery Connect的应用分析工具通过Analytics Kit帮助开发者实时跟踪用户行为数据。开发者可以了解用户的访问路径、页面停留时间、点击事件等行为,从而获得优化应用体验的参考数据。这种数据驱动的分析方式能帮助开发者更精准地发现用户的使用习惯和痛点,进而做出科学的决策。以下代码示例展示了如何通过Analytics Kit记录用户的自定义事件:

// 引入Analytics Kit SDK依赖
dependencies {
    implementation 'com.huawei.hms:hianalytics:5.0.0.300'
}

// 初始化Analytics Kit
HiAnalyticsInstance instance = HiAnalytics.getInstance(context);

// 记录用户事件
Bundle bundle = new Bundle();
bundle.putString("page_name", "home");
bundle.putString("event_name", "button_click");
instance.onEvent("custom_event", bundle);

通过以上代码,开发者可以捕获并分析用户在应用内的行为。例如,通过分析用户点击某个按钮的频率和位置,开发者可以确定功能按钮的设计是否合理,进一步优化用户的交互体验。通过这样的分析,开发者不仅可以改进用户体验,还能够提高应用的转化率和留存率。

2. A/B测试工具:精确测量不同版本效果

在实现优化方案之前,开发者需要验证优化是否能够真正提升用户体验。这时,A/B测试成为了一种重要手段。AppGallery Connect 提供的A/B测试工具让开发者能够轻松地对比不同用户群体的行为数据,选择最佳方案。

通过以下代码示例,可以快速配置应用A/B测试,从而测试不同的功能配置或UI设计:

// 配置实验参数
Map<String, Object> experimentParams = new HashMap<>();
experimentParams.put("feature_enabled", true);

// 启用A/B测试
HmsRemoteConfig remoteConfig = HmsRemoteConfig.getInstance();
remoteConfig.apply(experimentParams);

在此代码中,开发者可以配置某个功能的启用或禁用状态,并将实验发布给指定的用户群体。通过分析不同群体的使用反馈,开发者可以获得关于新功能或UI设计的直观数据。例如,开发者可以测试不同的应用界面布局,观察用户在不同布局下的停留时间、点击率等,从而选择效果最佳的设计方案。

3. 对开发者的具体价值
数据驱动的优化:借助AppGallery Connect的应用分析工具,开发者可以获取详尽的用户行为数据,帮助其科学地评估应用的优化效果,而不仅仅依赖于经验判断。
降低优化成本:A/B测试工具让开发者能够快速验证不同的功能和设计,不再需要耗费大量资源手动测试不同方案的效果。这种简化的流程使得应用的迭代速度显著提升。
提升用户体验与应用留存率:通过分析用户行为并实施A/B测试,开发者可以更精准地改进应用,增强用户的体验,进而提升应用的活跃度和留存率。
降低用户流失风险:通过数据监控和测试优化,开发者能够及时发现并解决潜在的问题,降低用户流失率。

4. 实际案例:数据驱动的应用优化
例如,某款电商应用希望优化其结算流程,以提升用户下单率。开发团队通过应用分析工具跟踪用户的结算行为数据,发现很多用户在付款页面停留较久但未完成支付。随后,他们在页面上添加了一个“快速支付”按钮,并利用A/B测试工具对不同用户群体进行测试。最终,他们发现“快速支付”按钮显著提高了订单转化率,从而决定在所有用户中推广该设计。

四、应用审核与分发:快速上线

在移动互联网的高速发展中,应用的高效发布和全球分发是每个开发者的重要需求。通过AppGallery Connect,不仅提供了自动化测试和智能审核,还在应用加密和检测前移等方面实现了创新,帮助开发者确保应用的安全性,同时大幅缩短上线周期。

4.1 应用加密:保护代码安全

在应用发布过程中,开发者常常担心应用被逆向工程或破解,导致核心代码泄露,损害自身利益。为了解决这一痛点,原生鸿蒙应用市场提供了端到端的应用加密机制,构建了内核级应用生命周期内的代码安全保护能力。
开发者在向应用市场提交上架申请、上传应用包后,可以选择是否启用应用加密功能。选择加密的应用在通过审核后,应用市场会对其进行代码加密。加密后的应用在设备安装时,安装文件仍然是加密状态,有效地防止了安装包被恶意获取和分析。

应用加密的特点:

端到端加密:应用启动后,通过内核按需解密执行,整个过程在内核级别进行,安全可靠。
系统级优化:相比传统的加壳或加固方式,系统级的解密优化对性能影响更小,保证了应用的运行效率。
安全存储:解密密钥经过安全传输后存储在系统的TEE(可信执行环境)中,进一步增强了安全性。

使用步骤:开发阶段:开发者在开发过程中无需进行任何额外的适配或修改,应用加密对开发者透明无感知。
上架阶段:在上传应用包并提交上架申请时,开发者可以选择启用应用加密功能。具体操作步骤如下:
登录AppGallery Connect,进入应用的发布页面。
在“选取待发布的软件包”步骤中,勾选“应用加密”选项。(注意:由于应用加密特性对应用冷启动时延有影响,目前通过白名单方式受限开放,需要先申请加入白名单。)
分发阶段:应用市场会对选择加密的应用进行代码加密处理,然后将加密后的应用分发给用户。
安装与运行阶段:用户安装应用时,安装包仍处于加密状态。应用启动时,内核会按需解密执行,密钥存储在TEE环境中,保障了运行时的安全性。

加密效果:

防逆向分析:加密对象为应用内的代码文件(如.abc文件),加密后的代码文件无法被反编译和分析,有效防止了应用被逆向工程。
安全可靠:由于密钥不会出现在应用包中,即使攻击者获取了加密后的应用包,也无法破解AES加密算法进行逆向分析。

注意事项

加密后的应用在启动和运行过程中可能会有轻微的性能开销,特别是对于代码文件较大的应用。
加密后的应用包体积会有所增加,可能会影响下载和安装时间。
当前ArkTS卡片服务对应的widgets.abc文件暂不支持加密服务。

4.2 自动化测试与检测前移:提升应用质量

自动化测试:

AppGallery Connect提供了强大的自动化测试工具,帮助开发者在提交审核前对应用进行全面的兼容性和功能性测试。通过使用CLI工具,开发者可以一键上传并测试应用,及时获取测试报告,发现并修复潜在问题。

# 使用AppGallery的CLI工具进行应用自动化测试
appgallery-cli upload \
    --appId <your_app_id> \
    --filePath <path_to_your_app_file>

此命令允许开发者快速上传和测试应用,并及时收到测试报告,以便进一步优化和修复。

检测前移:

传统的应用开发流程中,许多问题往往在上线后才被发现,导致后期维护成本增加。为了解决这一问题,原生鸿蒙应用市场构建检测前移服务,即将应用的安全检测、性能检测等工作前置到开发和测试阶段。

通过检测前移,开发者可以在应用上线前发现并解决问题,具体优势包括:
提高开发效率:提前发现问题,减少上线后频繁更新和修复的工作量。
提升应用质量:保证用户在应用上线后能够获得稳定、高质量的体验。
降低安全风险:在上线前排查安全漏洞,保护用户数据安全,提升用户信任度。

五、结语

原生鸿蒙应用市场的开发者服务不仅为开发者提供了多种功能丰富的SDK和API,还通过隐私保护、数据分析、A/B测试、应用加密等工具和技术帮助开发者打造安全、优化的应用体验。无论是新兴开发者还是经验丰富的团队,AppGallery Connect都能为应用的开发和优化提供有力的技术支持。

作为开发者,你是否已经准备好利用这些技术优势,快速构建并发布你的应用?立即加入鸿蒙生态,体验高效、安全的原生应用开发流程!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2232491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM+微信小程序的社团登录管理系统(社团1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…

虚拟化环境中的精简版 Android 操作系统 Microdroid

随着移动设备的普及和应用场景的多样化&#xff0c;安全性和隐私保护成为了移动操作系统的重要课题。Google推出的Microdroid&#xff0c;是一个专为虚拟化环境设计的精简版Android操作系统&#xff0c;旨在提供一个安全、隔离的执行环境。本文将详细介绍Microdroid的架构、功能…

手动搭建 Java Web 环境

操作场景 本文档介绍如何在 Linux 操作系统的腾讯云云服务器&#xff08;CVM&#xff09;上手动搭建 Java Web 环境。 进行手动搭建 Java Web 环境&#xff0c;您需要熟悉 Linux 命令&#xff0c;例如 CentOS 环境下通过 YUM 安装软件 等常用命令&#xff0c;并对所安装软件使…

WPF+MVVM案例实战与特效(二十四)- 粒子字体效果实现

文章目录 1、案例效果2、案例实现1、文件创建2.代码实现3、界面与功能代码3、总结1、案例效果 提示:这里可以添加本文要记录的大概内容: 2、案例实现 1、文件创建 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 ParticleWindow.xaml,在 Models 文件夹下创建粒子…

「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

高级动画可以显著提升用户体验&#xff0c;为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画&#xff0c;包括弹性动画、透明度渐变和旋转缩放组合动画等示例。 关键词 高级动画弹性缓动自动动画缓动曲线 一、Animation 组件的高级缓动曲线 缓动曲线&#…

Golang--数组、切片、映射

1、数组 1.1 数组类型 var 数组名 [数组大小]数据类型 package main import "fmt"func main(){//1、定义一个数组var arr1 [5]intarr1[0] 100arr1[1] 200fmt.Println(arr1) //[100 200 0 0 0] } 1.2 数组的初始化方式 package main import "fmt" func …

Android音频进阶之PCM设备创建(九十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

【已解决】C# NPOI如何设置单元格格式

前言 设置单元格格式我们做表格必须要的一步&#xff0c;那么如何对单元格进行设置呢&#xff1f;直接上图看看效果图先&#xff0c;我做的是一个居中然后字体变化的操作&#xff0c;其他的查他的手册即可。 解决方法 直接上代码 IWorkbook excelDoc new XSSFWorkbook();…

系统学习算法:专题一 双指针

题目一&#xff1a; 算法原理&#xff1a; 首先我们可以对这道题目进行题目分类&#xff0c;像这种对数组以某种标准而进行一定的划分的题目&#xff0c;我们统称为数组分块问题&#xff0c;其中使用到的算法就是双指针算法&#xff0c;这里的指针并非真正int*这种&#xff0c…

Python异常检测 - LSTM(长短期记忆网络)

系列文章目录 Python异常检测- Isolation Forest&#xff08;孤立森林&#xff09; python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS) python异常检测-局部异常因子&#xff08;LOF&#xff09;算法 Python异常检测- DBSCAN Python异常检测- 单类支持向量机(…

【双指针】【数之和】 LeetCode 633.平方数之和

算法思想&#xff1a; 双指针枚举i,j&#xff1b;类似三数之和 class Solution { public:bool judgeSquareSum(int c) {long long sum0;vector<int> dp;dp.push_back(0);long long start1;while(sum < c){sum start *start;if(sum>c) break;else dp.push_back(…

前端Nginx的安装与应用

目录 一、前端跨域方式 1.1、CORS(跨域资源共享) 1.2、JSONP(已过时) 1.3、WebSocket 1.4、PostMessage 1.5、Nginx 二、安装 三、应用 四、命令 4.1、基本操作命令 4.2、nginx.conf介绍 4.2.1、location模块 4.2.2、反向代理配置 4.2.3、负载均衡模块 4.2.4、通…

Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口

本示例的目的是介绍如何在vue+openlayers中使用extent,使用feature fit的方式来适配窗口。当加载到页面上几个图形要充分展示在窗口的时候,可以用这种方式来平铺到页面中。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文章,为小白群体提供基础知识及示…

每日OJ题_牛客_相差不超过k的最多数_滑动窗口_C++_Java

目录 牛客_相差不超过k的最多数_滑动窗口 题目解析 C代码 Java代码 牛客_相差不超过k的最多数_滑动窗口 相差不超过k的最多数_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 给定一个数组&#xff0c;选择一些数&#xff0c;要求选择的数中任意两数差的绝对值不超过 …

初始JavaEE篇——多线程(5):生产者-消费者模型、阻塞队列

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 文章目录 阻塞队列生产者—消费者模型生产者—消费者模型的优势&#xff1a;生产者—消费者模型的劣势&#xff1a; Java标准库中的阻…

后端eclipse——文字样式:UEditor富文本编辑器引入

目录 1.富文本编辑器的优点 2.文件的准备 3.文件的导入 导入到项目&#xff1a; 导入到html文件&#xff1a; ​编辑 4.富文本编辑器的使用 1.富文本编辑器的优点 我们从前端写入数据库时&#xff0c;文字的样式具有局限性&#xff0c;不能存在换行&#xff0c;更改字体…

Rust移动开发:Rust在Android端集成使用介绍

Andorid调用Rust 目前Rust在移动端上的应用&#xff0c;一般作为应用sdk的提供&#xff0c;供各端使用&#xff0c;目前飞书底层使用Rust编写通用组件。 该篇适合对Android、Rust了解&#xff0c;想看如何做整合&#xff0c;如果想要工程源码&#xff0c;可以评论或留言有解疑…

推荐一款高级的安装程序打包工具:Advanced Installer Architect

AdvanCEd Installer Architect是一款高级的安装程序打包工具&#xff0c;我们有时候可能用nsis用的多&#xff0c;Advanced Installer Architect也是一款打包工具&#xff0c;有兴趣的朋友也可以试试。有了Advanced Installer Architect你就可以创建MSI打包。 主要功能 *先进的…

关于Linux系统调试和性能优化技巧有哪些?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于Linux系统调试和性能优化技巧的相关内容…

MySQL中,GROUP BY 分组函数

文章目录 示例查询&#xff1a;按性别分组统计每组信息示例查询&#xff1a;按性别分组显示详细信息示例查询&#xff1a;按性别分组并计算平均年龄,如果你还想统计每个性别的平均年龄&#xff0c;可以结合AVG()函数&#xff1a;说明 示例查询&#xff1a;按性别分组统计每组信…