Gradle 3.5:提升构建速度与功能优化的完整指南

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Gradle是一个高效、灵活的构建自动化工具,广泛应用于Java生态中。3.5版本是其重要里程碑,引入了性能优化、API升级、配置与依赖管理提升、版本控制集成改进、命令行界面强化和多项目构建管理优化等特性,极大地提升了构建速度和开发者体验。 gradle-3.5-bin.zip

1. Gradle简介与优势

简介

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言来声明项目设置,比传统基于XML的方法更加灵活、强大。Gradle被设计用来自动化编译、测试、发布和部署你的代码。它支持多种语言,如Java、Groovy和Scala,并且可以无缝地融入现有的Maven或Ivy仓库。

优势

易用性

Gradle的优势之一是其简洁的配置语法,使得构建脚本易于编写和理解。Groovy语言的动态特性允许构建脚本比传统的XML配置更加灵活。

可扩展性

对于复杂项目,Gradle提供了强大的插件系统,这使得开发者可以扩展其功能以支持新的语言或框架,如Android和Spring Boot。

性能优化

Gradle提供了多种性能优化机制,如任务依赖分析、任务执行缓存以及增量构建等,可以显著提高构建的速度和效率。

通过这些优势,Gradle在软件开发和构建领域中脱颖而出,成为了许多开发者构建多模块项目的首选工具。随着版本的不断迭代更新,Gradle也在不断地引入新的特性和改进,以应对不断变化的构建需求。

2. Gradle 3.5性能优化细节

2.1 Gradle的构建性能分析

2.1.1 构建性能分析的重要性

在软件开发过程中,构建速度直接影响开发效率和团队协作体验。在大型项目中,构建时间可能会长达几分钟甚至十几分钟,这会严重拖慢开发流程。Gradle作为一种现代构建工具,其性能优化对于提升开发效率有着至关重要的作用。

性能分析可以帮助开发者识别构建过程中的瓶颈,定位效率低下的环节,从而针对性地进行优化。通过性能分析,我们可以获取构建过程的详细报告,了解哪些任务耗时最多,哪些配置需要调整。这样,我们可以将时间资源和开发精力更有效地分配到关键点上。

2.1.2 常用的性能分析工具介绍

Gradle自带了多个工具来帮助分析构建性能,例如:

  • Gradle Profiler : 提供了构建性能分析的功能,能够运行多次构建,生成报告,并且可以分析不同配置下的构建性能。
  • Android Studio Profiler : 对于Android应用开发者来说,Android Studio提供的Profiler工具也可以用来分析Gradle构建的性能。
  • 命令行工具 : 如 --profile --scan ,可以用来生成构建报告,帮助开发者理解构建过程中的性能特征。

通过这些工具,我们可以捕获构建过程中的详细信息,并且作出精准的调优决策。

2.2 Gradle 3.5性能改进点

2.2.1 新增性能优化特性

Gradle 3.5引入了一些性能改进的特性,其中包括:

  • 任务配置缓存 : 任务配置代码只会执行一次,并将配置结果缓存起来,避免在多次构建中重复配置。
  • 增量构建优化 : 仅对有变更的文件进行构建,显著减少了构建时间。
  • 并行任务执行 : 通过合理配置,让多个任务可以并行执行,充分利用多核CPU的优势。

这些特性的引入,使得Gradle 3.5在性能上有显著的提升,尤其对大型项目效果更为明显。

2.2.2 实际性能改进案例分析

假设我们有一个包含多个模块的Java Web项目,使用Gradle 3.4时构建整个项目需要花费10分钟。在升级到Gradle 3.5后,我们开启任务配置缓存,并启用增量构建,构建时间降低到了6分钟。再经过针对项目的进一步优化配置后,最终将构建时间压缩到了3分钟。通过实际案例分析,我们可以看到,Gradle 3.5的优化特性对于提升构建性能有着巨大的潜力。

2.3 性能优化的实践策略

2.3.1 针对Gradle的调优技巧

对于Gradle的调优,我们可以采取以下策略:

  • 自定义任务依赖关系 : 手动调整任务的执行顺序,确保相互依赖的任务尽可能连续执行。
  • 优化任务配置 : 避免在任务配置代码中执行耗时操作,如数据库访问或复杂的业务逻辑。
  • 合理使用缓存 : 使用Gradle提供的缓存机制,减少不必要的重复计算。

2.3.2 持续集成环境中的性能监控

在持续集成环境中,我们需要持续监控构建性能,一旦发现性能退化,就需要及时进行优化。我们可以设置监控报警机制,当构建时间超过阈值时自动通知团队成员,并提供详细的构建报告供分析。这样可以确保我们的构建性能始终保持在一个最优的状态。

以上就是关于Gradle 3.5性能优化的细节介绍,通过理解并应用这些性能优化策略,我们可以显著提升Gradle构建的效率,为开发团队提供更顺畅的工作体验。

3. ```

第三章:新任务API与插件兼容性升级

随着Gradle在构建自动化领域日益增长的影响力,持续的API创新和插件生态的强化是推动其发展的两个重要方面。在本章节中,我们将深入探讨新任务API的改进、插件兼容性调整,以及如何通过升级实践案例分析来应对这些变化。

3.1 新任务API的改进

新任务API的推出是Gradle 3.5乃至更高版本的一个显著特性。它不仅仅是一个简单的语法变更,而是设计理念上的重大进步,目的是为了提升开发者的构建脚本编写效率和可维护性。

3.1.1 API设计理念和用法

新API的设计理念着重于简化构建脚本的结构,提供更清晰、更直观的语法。以下是一些关键的设计原则:

  • 声明式语法 :新任务API鼓励开发者使用声明式语法来定义任务,这使得构建脚本更接近于配置而非编程。
  • 任务依赖的简化 :在新API中,任务依赖的表达方式更加简洁直观,降低了理解和维护的复杂度。

让我们看一个简单的代码示例:

task build(type: Copy) {
    from 'src'
    into 'dest'
}

在上述代码中,定义了一个 build 任务,其类型是 Copy ,并且指定了源目录和目标目录。这种声明式语法显著简化了任务定义的过程。

3.1.2 新旧API的对比与迁移指南

迁移至新API意味着将现有的基于旧API编写的构建脚本进行改造。这个过程可以分为几个步骤:

  1. 识别现有API :首先识别出构建脚本中使用的所有旧API。
  2. 迁移策略规划 :制定迁移计划,优先迁移频繁修改或维护的部分。
  3. 使用Gradle提供的迁移工具 :利用Gradle提供的工具或插件,如 gradle migrationGuide 命令,来自动化迁移过程中的部分工作。

迁移工具会生成一份报告,指出哪些API需要更新,并提供更新建议。虽然自动化工具可以处理很多工作,但开发者仍需手动检查和调整构建脚本以确保一切正常工作。

3.2 插件兼容性调整

兼容性问题是每个版本升级过程中必须面对的挑战,尤其是在API发生变化时。为了平滑过渡,Gradle提供了多项策略来识别和解决插件兼容性问题。

3.2.1 兼容性问题的识别与处理

识别兼容性问题通常涉及以下步骤:

  1. 运行Gradle检查命令 :执行 gradle --scan 命令可以生成一个构建扫描报告,该报告会突出显示不兼容的插件和任务。
  2. 查看构建失败的详细信息 :构建失败时,详细堆栈跟踪信息会指出是哪个插件或任务导致的问题。

处理这些问题,开发者可能需要:

  • 升级插件 :检查插件开发者是否提供了针对新版本Gradle的兼容性补丁或升级版插件。
  • 编写自定义适配器 :如果插件不兼容且没有提供修复,开发者可能需要编写自定义适配器代码来桥接兼容性差距。

3.2.2 插件更新与维护的最佳实践

当插件升级后,维护工作不仅仅是应用更新那么简单。最佳实践包括:

  • 定期审查插件依赖 :确保项目中使用的插件版本是最新的,并且与当前Gradle版本兼容。
  • 编写集成测试 :为关键任务编写集成测试,确保插件更新不会破坏现有构建逻辑。

3.3 升级实践案例分析

在本小节中,我们将通过一个实际案例来说明上述兼容性升级的整个过程,以及在此过程中遇到的具体问题和解决方案。

3.3.1 案例背景与问题陈述

某项目原使用Gradle 3.4并依赖多个插件。在升级至Gradle 3.5之后,项目构建失败,失败信息显示有多个任务由于API变更无法执行。

3.3.2 升级步骤和解决方案

升级步骤可概括为:

  1. 执行构建扫描 :运行 gradle --scan 并分析报告,确定受影响的任务和插件。
  2. 升级插件 :查找并升级至与Gradle 3.5兼容的最新版本插件。
  3. 应用修复 :对于无法立即获得更新的插件,寻找替代方案或编写临时适配代码。
  4. 测试与验证 :确保升级后所有功能正常,构建无误。

通过这些步骤,我们确保了项目能够平稳过渡到Gradle新版本,并且在过程中提升了解决问题的能力,增强了对构建系统生态的理解。


# 4. 依赖管理和缓存策略改进

依赖管理和缓存策略是构建工具优化的重要组成部分,它们直接影响到构建的速度和项目的可维护性。在本章节中,我们将深入探讨依赖管理机制的优化以及缓存策略的革新,并提供实践应用中的具体指导。

## 4.1 依赖管理机制优化

依赖管理是构建过程中不可或缺的环节。随着项目的不断演进,依赖库的数量和版本会持续增长,这无疑增加了依赖解析的复杂度。为了提高构建效率并减少潜在的依赖冲突,依赖管理机制必须不断优化。

### 4.1.1 依赖解析过程的优化

在Gradle中,依赖解析过程包括解析依赖库的版本、计算依赖树、处理传递性依赖等步骤。优化依赖解析过程可以显著提高构建性能。

#### 增量依赖解析

依赖解析过程中,Gradle 3.5引入了增量解析特性。通过记录和比较依赖状态,Gradle能够只解析发生变化的依赖项,而跳过未变更的部分。这大大减少了不必要的重复解析工作。

```groovy
// 示例:启用增量构建的配置
android {
    ...
    buildTypes {
        release {
            isMinifyEnabled = true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

在上述代码中, isMinifyEnabled 属性被设置为 true ,启用代码混淆,这将触发增量构建特性,因为Gradle知道只有在代码库发生变化时才需要重新计算依赖树。

并行依赖解析

为了进一步提升解析效率,Gradle实现了并行解析依赖。通过并行处理依赖项,Gradle可以在多核处理器上充分利用计算资源。

4.1.2 依赖冲突解决策略升级

依赖冲突是每个构建工具都会面临的问题。Gradle 3.5对依赖冲突提供了更加智能的解决方案,主要通过引入了更高级的冲突解决策略。

更灵活的冲突解决

在早期版本中,如果存在多个依赖项声明了同一库的不同版本,Gradle可能无法决定使用哪一个版本。在Gradle 3.5中,我们可以通过配置选择性地解决冲突。

configurations {
    all*.exclude group: 'com.google.guava', module: 'guava-jdk5'
}

在上述配置中, exclude 方法被用来排除不希望使用的模块版本。这在处理传递性依赖时尤其有用。

4.2 缓存机制的革新

缓存是提高构建效率的关键技术之一。Gradle 3.5对缓存机制进行了革新,不仅改进了缓存策略,还提升了缓存的实用性。

4.2.1 缓存策略的原理

Gradle使用构建缓存来存储在构建过程中生成的文件,以便在后续构建中重用。这种机制可以显著减少构建时间,特别是在多模块项目中。

构建缓存的工作原理

构建缓存通常包含编译的Java类、生成的资源文件以及构建配置信息。当Gradle检测到构建配置和项目状态未发生变化时,会直接使用缓存中的文件。

// 示例:配置Gradle使用构建缓存
tasks.withType(JavaCompile) {
    options.incremental = true
    options.fork = true
    options.forkOptions.executable = "javac"
}

allprojects {
    buildCache {
        local {
            enabled = true
            directory = file("$rootDir/.build-cache")
        }
    }
}

在上述代码中,我们启用并配置了本地构建缓存,指定了缓存目录。

4.2.2 如何有效利用缓存提升构建速度

为了充分利用缓存带来的优势,开发者需要了解和掌握如何有效配置和使用缓存。

缓存的有效配置

有效的缓存配置包括合理地设置缓存大小、清理策略以及使用远程缓存。在大项目中,合理地组织模块和任务,减少不必要的重复任务,也是提高缓存利用率的关键。

buildCache {
    local {
        enabled = true
        directory = file("$rootDir/.build-cache")
        removeUnusedEntriesAfterDays = 30
    }
}

4.3 依赖和缓存的实践应用

依赖和缓存优化策略在实践应用中需要与项目的具体需求相结合,以确保最佳效果。

4.3.1 常见问题诊断与解决

在依赖管理过程中,可能遇到的问题包括依赖缺失、版本不匹配、循环依赖等。通过分析构建日志和错误信息,我们可以诊断出这些问题并采取相应措施。

4.3.2 提升构建效率的实际操作指南

为了提升构建效率,应遵循以下最佳实践:

  • 定期更新项目依赖到最新版本。
  • 使用依赖锁定机制,如Gradle中的 dependencies.lock 文件。
  • 积极利用缓存,确保缓存目录的可用性和存储空间。
  • 对于大模块或任务,考虑启用增量编译和并行任务执行。

通过以上实践,我们可以显著提升构建速度,减少开发者等待时间,从而提高整体开发效率。

5. 版本控制集成支持增强

5.1 支持的版本控制系统扩展

在现代软件开发过程中,版本控制系统(VCS)扮演着至关重要的角色。它不仅帮助团队管理代码变更,还支持协作开发和历史版本的回顾。Gradle 作为一款成熟的构建自动化工具,不断扩展对版本控制系统的支持,使用户可以更加方便地集成和使用不同的VCS。

5.1.1 常见版本控制系统的集成

在讨论Gradle支持的版本控制系统之前,先列举一些在行业中广泛使用的系统:

  • Git : 当前最流行的版本控制系统,支持分布式操作,拥有强大的分支管理能力。
  • Subversion (SVN) : 传统的集中式版本控制系统,具有良好的历史记录和成熟的社区支持。
  • Mercurial : 类似于Git的分布式版本控制系统,强调简单和灵活性。

接下来,我们将分析如何在Gradle中集成这些流行的VCS。

5.1.2 集成新系统的步骤和要点

以Git为例,Gradle通过其内置的 gradle-git-plugin 插件支持Git集成。在Gradle项目中,可以通过以下步骤实现对Git的集成:

  1. 添加插件依赖 : 在 build.gradle 文件中添加插件依赖: groovy plugins { id "com.github.gmazzo.gradle-git" version "3.0.0" }

  2. 配置Git信息 : 在同一文件中配置需要的Git信息,例如: groovy git { branch = 'master' }

  3. 使用Git任务 : Gradle 提供了多个 Git 任务,如 gitBranch gitCommitId gitCommitCount ,可以在构建脚本中直接使用。

  4. 执行集成操作 : 运行Gradle任务后,相关的Git信息会被集成到构建过程中。

要点在于确保插件版本与Gradle版本兼容,并且正确配置插件所需参数。

5.2 版本控制集成的优化策略

为了提高集成效率和解决在集成过程中可能遇到的问题,开发者和IT运营团队需要采取一些优化策略。

5.2.1 提高集成效率的方法

  • 使用CI/CD工具集成 : 自动化集成流程,减少人工干预。
  • 配置钩子(Hooks) : 在VCS服务器端配置钩子,实现自动触发构建。
  • 优化网络配置 : 对于远程仓库,优化网络连接和仓库镜像,减少延迟。

5.2.2 解决集成过程中遇到的问题

  • 处理认证问题 : 确保所有使用的VCS仓库都有适当的认证配置。
  • 解决权限问题 : 适当的权限设置能避免构建过程中权限不足的问题。
  • 网络和安全问题 : 防止恶意代码注入,确保传输过程加密。

5.3 实际应用场景分析

在多样的项目需求下,版本控制集成需要根据实际情况来调整策略。

5.3.1 不同项目需求下的集成策略

对于小型项目,可能只需要简单的Git集成。而对于大型、多分支的项目,可能需要更复杂的集成策略,比如集成SVN和Git作为不同代码线的管理工具。

5.3.2 集成后的效果评估与改进

集成后的效果需要通过以下方式评估:

  • 构建时间和稳定性 : 评估集成后构建的效率和稳定性。
  • 开发人员体验 : 通过调查开发人员对集成流程的反馈,了解是否满意。
  • 安全性审查 : 审查集成流程是否满足公司的安全政策。

根据评估结果,持续优化集成策略,改进工具配置,确保版本控制集成能够高效支持软件开发的持续性和安全性。

6. 命令行界面强化与用户体验提升

6.1 命令行界面的改进

命令行界面(CLI)是与Gradle交互的主要方式之一。随着版本的迭代更新,Gradle不仅提供了新的命令以适应更多的构建需求,同时也改善了用户与CLI之间的交互体验。让我们深入探讨这些改进。

6.1.1 新增的命令和功能

随着Gradle 3.5的发布,命令行界面增加了许多有用的命令和功能,以便用户更好地控制构建过程。例如:

  • --stacktrace :提供更详细的错误堆栈跟踪信息,帮助开发者快速定位问题源头。
  • --info --debug :这些日志级别选项允许用户根据需要获取不同详细程度的日志信息。
  • --scan :生成构建扫描报告,用于深入分析构建性能瓶颈。

此外,一些旧的命令已经经过优化或重命名以提供更直观的使用体验,如 gradle build 依然执行构建任务,而 gradle test 专注于测试任务。

6.1.2 命令行界面的交互改进

在用户体验方面,CLI的改进同样重要。新版本对一些常见操作的提示和帮助信息进行了增强,例如当用户输入错误的命令时,CLI会提供更具体的错误信息和建议的操作。为了提升用户效率,还增加了命令自动完成功能和更直观的使用提示。

gradle -? # 显示帮助信息

执行上述命令将展示Gradle CLI的使用帮助信息,包括可选参数、任务列表等。这对新手用户和经常使用Gradle的高级用户都是十分友好的。

6.2 用户体验的提升措施

用户体验的提升是贯穿整个Gradle升级过程的关键点,改进措施不仅涉及命令行界面,还扩展到了其他与用户交互的方面。

6.2.1 用户反馈的收集与分析

为了更好地了解用户的需求和痛点,Gradle团队通过多种方式收集用户反馈:

  • 社区论坛:用户可以在这里报告问题和建议新特性。
  • 调查问卷:定期向用户发放问卷,获取他们对Gradle各方面的评价。
  • GitHub上的Issue追踪系统:直接记录用户遇到的问题和需求。

收集到的数据会被分析,用以指导改进方向。

6.2.2 用户体验改进的实施案例

随着用户反馈的积累,Gradle团队在多个版本中实施了针对性的改进措施。例如:

  • 增加了对多种操作系统支持的改善,尤其是对Linux的无缝支持。
  • 对老旧API的弃用和替换,以清理代码库和减少维护负担。
  • 提供更加直观的任务依赖图,帮助用户理解复杂的构建流程。

6.3 命令行界面的实践应用

实践应用是理论知识转化为实际操作能力的重要环节。接下来,我们将通过几个小节来探讨如何更好地应用命令行界面,提高工作效率。

6.3.1 命令行界面的最佳实践指南

要高效地使用Gradle命令行界面,有几个最佳实践值得遵循:

  • 使用配置文件定义项目环境,减少重复输入。
  • 利用Gradle的特性,如任务依赖和任务分组,来构建清晰的任务结构。
  • 定制化构建脚本,自动化日常任务,例如清理、测试和部署。
// 示例:构建脚本中的自动化任务定义
task deploy(type: Copy) {
    from 'build/libs/'
    into '/var/www/mysite'
}

deploy.dependsOn build

上述代码定义了一个名为 deploy 的任务,它将构建产物自动复制到服务器上。这样的任务配置可以帮助用户减少重复劳动。

6.3.2 提升用户效率的技巧和工具

除了直接使用Gradle提供的命令外,还有许多外部工具和技巧可以用来提升效率:

  • 使用集成开发环境(IDE)的Gradle插件,它允许通过图形界面来执行Gradle任务。
  • 利用脚本库和构建脚本模板,快速复制粘贴或重用通用构建逻辑。
  • 配置环境变量或构建脚本中自定义属性,以简化命令行输入。
// 示例:构建脚本中的属性定义和使用
ext {
    // 定义一个属性
    version = '1.0.0'
}

// 在任务中使用属性
task printVersion {
    doLast {
        println "Current project version is $version"
    }
}

通过在构建脚本中定义属性,然后在任务中引用这些属性,可以让构建脚本更具有可读性和灵活性。

在本章节中,我们深入讨论了Gradle命令行界面的改进和用户体验的提升措施。我们从新增命令和功能讲起,逐步探讨了用户反馈的收集与分析,并提供了最佳实践指南以及提升效率的技巧和工具。通过这种方式,我们可以确保用户在使用Gradle时,能够更加便捷和高效地完成构建任务。

7. 多项目构建功能优化

7.1 多项目构建的新特性

7.1.1 多项目构建的重要性

多项目构建是大型项目开发中不可或缺的功能,它允许多个相关的项目在单一的构建过程中进行协同工作。这样的构建方式不仅有助于统一构建脚本的管理,还能够确保依赖关系的正确解析和构建任务的依赖顺序。尤其在持续集成和持续部署(CI/CD)的环境下,多项目构建能够大幅度简化构建和部署流程。

7.1.2 新版本中的增强点

Gradle在新版本中对多项目构建功能进行了多方面的增强,例如:

  • 更高效的项目依赖解析 :新版本通过改进的算法提升了项目依赖解析的效率。
  • 增量构建的改进 :在多项目构建场景中,优化了增量构建逻辑,减少了不必要的任务执行。
  • 跨项目配置复用 :允许在多个子项目中共享相同的配置,简化了构建配置管理。

7.2 构建过程的优化

7.2.1 提升构建速度的策略

为了提升构建速度,可以采取以下策略:

  • 利用缓存 :确保Gradle的缓存被正确配置和启用,这样在构建时可以复用之前的构建结果。
  • 增量构建 :使用 --rerun-tasks --continue 参数来精确控制任务的执行。
  • 优化依赖 :定期清理不必要的依赖,避免构建过程中的干扰。

7.2.2 构建过程中的常见问题解决

构建过程中可能会遇到的问题以及解决方法包括:

  • 依赖冲突 :使用Gradle的依赖管理功能来解决依赖冲突。
  • 任务执行顺序 :通过编写更清晰的构建脚本确保任务的正确执行顺序。
  • 资源瓶颈 :监控并优化资源使用,比如CPU和内存的使用情况。

7.3 多项目构建的实战应用

7.3.1 多项目构建的实际操作案例

在实际操作中,配置多项目构建通常包括以下几个步骤:

  1. 创建一个父项目,并为其创建一个 settings.gradle 文件。
  2. 在父项目中,包含子项目,每个子项目都有自己的 build.gradle 文件。
  3. 在父项目的 build.gradle 文件中配置通用的依赖和构建逻辑。
  4. 使用命令 ./gradlew build 来执行多项目构建。

7.3.2 构建流程的优化和维护技巧

为了维护构建流程的高效性和稳定性,以下是一些优化技巧:

  • 持续监控构建性能 :定期运行性能分析工具,监测构建速度和性能瓶颈。
  • 自动化测试 :在构建过程中集成自动化测试,确保每次提交都符合质量标准。
  • 代码审查和重构 :定期进行代码审查和重构,保持构建脚本的可读性和效率。

通过这些优化,多项目构建将变得更加高效和易于维护,从而支撑起复杂的项目结构和频繁的代码迭代。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Gradle是一个高效、灵活的构建自动化工具,广泛应用于Java生态中。3.5版本是其重要里程碑,引入了性能优化、API升级、配置与依赖管理提升、版本控制集成改进、命令行界面强化和多项目构建管理优化等特性,极大地提升了构建速度和开发者体验。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值