apk图片资源优化,减小APK大小

APK体积优化(附Android Studio操作指引) 目录 1. 压缩APK体积的意义 2. APK的构成与打包 3. res资源的压缩和优化 3.1 删除没有被引用的资源 3.2 使用WebP压缩图片 3.3 使用TinyPNG压缩图片 4. 删除多余的代码(未被引用的类/方法/变量) 4.1 代码混淆 4.2 利用Lint查找无用代码 5. Zip格式优化 6. classes.dex优化 7. lib优化 8. 参考资... 阅读详情

png, svg转矢量图,webp到底用什么格式的图片呢?

在Android开发中选择图片资源格式(PNG、SVG、WebP)需综合考虑​​应用场景、性能需求、兼容性及维护成本​​。以下是综合判定逻辑及实践建议:


📊 ​​一、核心格式特性对比​​

​​格式​​​​优势​​​​劣势​​​​适用场景​​​​性能影响​​
​​PNG​​<br>(位图)无损压缩、支持透明度、显示质量高文件体积大、多分辨率需多套资源1. 带透明度的UI元素(按钮/图标)<br>2. 细节丰富的静态图(如插画)内存占用高(与分辨率正相关)

1

3

​​SVG​​<br>(矢量图)无限缩放不失真、单文件适配多分辨率、体积小复杂图形渲染耗CPU、不支持投影/模糊等特效1. 纯色图标/简单图形<br>2. Material Design图标<br>3. 需要动态修改颜色的元素CPU渲染开销大(尤其复杂SVG)<br>内存占用可能高于PNG

6

7

​​WebP​​<br>(位图)高压缩率(比PNG小26%↑,比JPEG小25%~34%)、支持有损/无损/透明度/动画低版本Android需兼容库(API<14)、转换工具少1. 网络传输图片(缩略图/背景)<br>2. 需平衡质量与体积的场景<br>3. 替代GIF的动画解码速度慢于JPEG 1.5倍,但加载更快(体积优势)

9

10


所以基本一些简单的icon,可以用svg

大图网图 webp

复杂或者不太大的图片png

由于历史遗留项目,用了很多PNG图片,导致APK包要一百多M。

优化思路,将部分PNG图片转换成webp

那是全部都要转换吗?

大概一个判断标准

推荐的图片大小判断标准(基于 Android 性能优化实践)

图片大小转换决策原因和说明
<2KB❌ 不要转换原始 PNG 头信息比 WebP 更小,转换后反而可能增大约 100-300 字节
2KB-10KB⚠️ 可选转换转换后能节省约 15-30% 空间,但对整体包大小影响有限
10KB-50KB✅ 强烈推荐转换转换后能节省 25-40% 空间,有明显收益
>50KB✅ 必须转换转换后节省可达 40-70%,对 APK 大小影响显著

基于上面的标准

我把阈值设置在30k

大致脚本文件如下 findlargepngs.ps1

param(
    [Parameter(Mandatory=$false, HelpMessage="Target directory path")]
    [string]$TargetPath = (Get-Location).Path,
    
    [Parameter(Mandatory=$false, HelpMessage="Minimum file size in KB")]
    [int]$MinSizeKB = 30
)

# Set encoding to UTF-8 to try to avoid any encoding issues
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8

# Check if directory exists
if (-not (Test-Path -Path $TargetPath -PathType Container)) {
    Write-Host "Error: Directory does not exist - $TargetPath" -ForegroundColor Red
    exit 1
}

# Check if cwebp is available
$cwebpPath = "cwebp.exe"
if (-not (Get-Command $cwebpPath -ErrorAction SilentlyContinue)) {
    Write-Host "Warning: cwebp.exe not found." -ForegroundColor Yellow
    Write-Host "Download from: https://developers.google.com/speed/webp/download and add to PATH" -ForegroundColor Cyan
    Write-Host "OR provide full path to cwebp.exe" -NoNewline
    $cwebpPath = Read-Host
    if (-not (Test-Path $cwebpPath)) {
        Write-Host "cwebp.exe not found at provided path. Exiting." -ForegroundColor Red
        exit 1
    }
}

# Create log file
$logPath = Join-Path -Path $TargetPath -ChildPath "PNG_WebP_Conversion_Log.txt"
"=== PNG to WebP Conversion Log ===" | Out-File $logPath
"Time: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-File $logPath -Append
"Directory: $TargetPath" | Out-File $logPath -Append
"Minimum Size: ${MinSizeKB}KB" | Out-File $logPath -Append
"" | Out-File $logPath -Append

Write-Host "`nScanning directory: $TargetPath"
Write-Host "Looking for PNG files larger than ${MinSizeKB}KB..." -ForegroundColor Cyan

# Find PNG files larger than the threshold
$minSizeBytes = $MinSizeKB * 1024
$largePngs = Get-ChildItem -Path $TargetPath -Recurse -Include "*.png" -ErrorAction SilentlyContinue | 
    Where-Object { $_.Length -gt $minSizeBytes } 

$totalCount = $largePngs.Count
if ($totalCount -eq 0) {
    Write-Host "No PNG files found larger than ${MinSizeKB}KB." -ForegroundColor Yellow
    "No eligible files found." | Out-File $logPath -Append
    exit
}

Write-Host "Found $totalCount files to convert."

# Conversion process
$successCount = 0
$skippedCount = 0
$failedCount = 0
$totalSpaceSaved = 0

foreach ($png in $largePngs) {
    $pngPath = $png.FullName
    $webpPath = [System.IO.Path]::ChangeExtension($pngPath, "webp")
    $originalSize = $png.Length / 1KB
    $originalSize = [math]::Round($originalSize, 2)
    
    Write-Host "`nProcessing: $($png.Name) [$originalSize KB]"
    "Processing file: $pngPath" | Out-File $logPath -Append
    "Original size: $originalSize KB" | Out-File $logPath -Append
    
    try {
        # Convert: Use lossless if transparent, otherwise lossy with quality 80
        $hasTransparency = $false
        try {
            # Check for transparency using ImageMagick (if available) or assume false
            $hasTransparency = & magick identify -format "%[opaque]" $pngPath 2>$null
            $hasTransparency = ($hasTransparency -eq "false")
        } catch {
            $hasTransparency = $false
        }

        if ($hasTransparency) {
            & $cwebpPath -lossless -mt "$pngPath" -o "$webpPath"
        } else {
            & $cwebpPath -q 80 -mt "$pngPath" -o "$webpPath"
        }
        
        if ($LASTEXITCODE -ne 0) {
            throw "Conversion failed with error code: $LASTEXITCODE"
        }
        
        # Check if WebP file was created
        if (-not (Test-Path $webpPath)) {
            throw "WebP file not created after conversion."
        }
        
        $webpSize = (Get-Item $webpPath).Length / 1KB
        $webpSize = [math]::Round($webpSize, 2)
        $spaceSaved = $originalSize - $webpSize
        
        # Check if the new file is actually smaller
        if ($webpSize -ge $originalSize) {
            "Warning: Converted file not smaller ($originalSize KB → $webpSize KB)" | Out-File $logPath -Append
            Write-Host "  Warning: Converted file not smaller ($originalSize KB → $webpSize KB)" -ForegroundColor Yellow
            
            # Remove the WebP file and skip
            Remove-Item -Path $webpPath -Force -ErrorAction SilentlyContinue
            $skippedCount++
        } else {
            # Calculate space saved
            $spaceSaved = [math]::Round($spaceSaved, 2)
            $savedPercent = [math]::Round(($spaceSaved / $originalSize) * 100, 1)
            $totalSpaceSaved += $spaceSaved
            
            # Backup the original PNG (optional)
            #$backupPath = $pngPath + ".orig"
            #Copy-Item -Path $pngPath -Destination $backupPath -Force -ErrorAction SilentlyContinue
            
            # Replace the original with WebP
            Remove-Item -Path $pngPath -Force
            "Converted successfully: $originalSize KB → $webpSize KB, Saved $spaceSaved KB ($savedPercent%)" | Out-File $logPath -Append
            Write-Host "  Converted successfully: Saved $spaceSaved KB ($savedPercent%)" -ForegroundColor Green
            $successCount++
        }
    } catch {
        $errorMsg = $_.Exception.Message
        "Error: $errorMsg" | Out-File $logPath -Append
        Write-Host "  Error: $errorMsg" -ForegroundColor Red
        $failedCount++
    }
}

# Generate report
$endTime = Get-Date
$elapsedTime = New-TimeSpan -Start (Get-Date) -End $endTime | ForEach-Object { $_.TotalMinutes }
$elapsedTime = [math]::Round($elapsedTime, 1)

# Output results
Write-Host "`n================================================" -ForegroundColor Cyan
Write-Host "Conversion Complete!" -ForegroundColor Green
Write-Host "Total files: $totalCount" 
Write-Host "Successfully converted: $successCount" -ForegroundColor Green
Write-Host "Skipped (not smaller): $skippedCount" -ForegroundColor Yellow
Write-Host "Failures: $failedCount" -ForegroundColor Red
Write-Host "Total space saved: $([math]::Round($totalSpaceSaved, 2)) KB" -ForegroundColor Cyan
Write-Host "Time elapsed: $elapsedTime minutes" -ForegroundColor Cyan
Write-Host "Log file: $logPath" -ForegroundColor Magenta
Write-Host "================================================" -ForegroundColor Cyan

命令行运行,添加目标地址

.\findlargepngs.ps1 -TargetPath "E:\workspace\xxxx\src\main"

即可将png转换成webp

最后APK大小成功减小50%

FTPClient使用中,碰到SocketTimeoutException 坑 ftpclient设置soTimeout无效 阅读详情

相关推荐

Unity3D 2022版如何一键安装Newtonsoft.Json?最新Package Manager教程

本文详细介绍了在Unity3D 2022及以上版本中,如何通过Package Manager一键安装和配置Newtonsoft.Json(Json.NET)。教程涵盖了从打开Package Manager、搜索并安装正确包源,到验证安装和基础使用的完整流程,旨在帮助开发者以现代化、可靠的方式集成这一强大的JSON处理框架,提升开发效率并规避手动导入的常见问题。

lg888的博客 921

Android开发——减小APK大小

0.前言APK的大小对APP的加载速度,使用内存大小和消耗功率多少有一定影响。如何减小APK的大小对于Android开发者是一个永恒的话题。那么首先就来了解一下APK的组成结构。1.APK的组成结构META-INF:包含CERT.SF和CERT.RSA签名文件,和MANIFEST.MF清单文件。assets:包含APP的assets资源,代码中可以通过AssetManager对象访问。res:包...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

【verilog语法详解:从入门到精通】

Verilog语法详解:从入门到精通 摘要:本文系统讲解Verilog硬件描述语言的核心语法与应用。Verilog作为数字电路设计标准,具有并行执行、硬件映射和层次化三大特点。文章从基础语法框架入手,详细介绍了模块定义、端口类型(input/output/inout)声明规范,以及线网型(wire)和寄存器型(reg)两种核心数据类型的区别与应用场景。重点讲解了组合逻辑(assign连续赋值)和时序逻辑(always块)的实现方式,包括阻塞赋值(=)与非阻塞赋值(<=)的关键差异。此外,还涵盖了参数(

m0_58476824的博客 4687

APK瘦身值得分享的一些经验

现在apk越来越大,原因有如下几个:   APK在安装和更新之前都需要经过网络将其下载到手机,如果APK越大消耗的流量就会越多,特别是对于使用移动网络的用户来讲,消耗流量越多就代表需要花更多的钱去购买流量。同时一些第三方应用商城也会对上传的APK大小有限制,所以为了能够让产品能够更受商城和用户欢迎,APK瘦身是第一步,更小的APK标示着更多地用户愿意去下载和体验。   为了能够减小AP

Weven-blog 3558

【Cadence】 ADS Dynamic Link使用教程

在Cadence617上使用ADS Dynamic Link

乾巽的博客 6081

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly

2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。

weixin_42968584的博客 1127

减小Apk包大小的常用方法

我们之所以要减小apk的大小,一方面是为了节省用户手机的内存;另一方面是为了节省用户在App安装和版本升级时的流量; 直接减小apk文件大小的方法: 1.使用图片压缩工具; 目前常用的工具是:ImageOptim,压缩效果很好,使用默认配置即可。但是仅有MAC版的; 2.删除无用的资源文件以及代码; 在Eclipse开发环境下通过Android Lint工具可以找出项目中无用的资源及

chwnpp2的专栏 3918

SPEI计算避坑指南:gma中Distribution和FitMethod参数怎么选?

本文深入探讨了在SPEI计算中如何科学选择gma库中的Distribution和FitMethod参数,帮助研究者避开常见陷阱。详细分析了LogLogistic、Gamma和Pearson3三种分布的适用场景,以及LMoment与MLE拟合方法的优缺点,为气象干旱研究提供实用指南。

weixin_30308101的博客 254

如何压缩减小少APK安卓安装包大小

如何减小少APK安卓安装包的大小

欢迎访问胡宝全的博客 1万+

GitLab社区版vs企业版:本地部署性能对比与选型建议(含实测数据)

本文深入对比GitLab社区版(CE)与企业版(EE)在本地部署中的性能差异与功能特性,提供实测数据与选型建议。测试显示EE版在并发克隆、CI流水线启动等场景性能提升显著,尤其适合需要高级安全合规与CI/CD功能的团队。文章还包含硬件配置指南与成本效益分析,帮助技术决策者做出明智选择。

weixin_28828243的博客 295

Ut接口原理及 VoLTE 补充业务自管理信令流程(GBA 引导认证+业务访问认证+ VoLTE 补充业务自管理)

2. Ut 接口及 VoLTE 业务子管理概述 2.1 UT 接口 —— VoLTE 终端补充业务配置 2.2终端通过 Ut 接口完成 VoLTE 补充业务自管理举例 2.3什么是 GBA 和 GAA 架构 2.4为什么要引入 GBA 架构认证及 BSF 网元 2.5UE(终端) 接口相关网元及功能 2.6GBA 架构流程概述 3. Ut 接口业务自管理信令流程 3.1 补充业务自管理及本文主要参考以下规范 3.2 Ut 接口业务自管理信令流程:查询补充业务 3.2.1 UE获

原来45的博客 1258

mm编译将so打包进apk_程序性能优化之APK大小优化(六)上

11/12号文档资料已全面更新!;《【阿里P7】移动互联网架构师高级教程+BAT面试题》,点击下方链接前往领取:【阿里P7】Android高级教程+BAT面试题​shimo.im本篇文章将继续从APK瘦身来介绍APK大小优化:文章主要内容从理论出发,再做实际操作。分为下面几个方面:1. 结构分析, 2.具体实操 3. 总结1. 结构分析首先上传一张瘦身前通过Analyze app分析出来的图片(打...

weixin_39609887的博客 718

【Claude Code的Harness Engineering实现】:06-记忆系统(Memory)

记忆系统是Claude Code实现跨会话持久化和上下文保持的核心组件。它分为短期记忆(当前会话的对话历史)和长期记忆(跨会话保留的结构化信息),通过多层级的文件系统实现灵活的记忆管理。

rengang66的博客 240

APK瘦身探索

概述 我平常在项目开发中,刚开始的APK包可能不太大,但是随着时间的变迁,项目的迭代,慢慢的就回发现打出来的APK包越来越大,包每大一点可能用户下载的欲望就小一些,所以在平常的项目迭代过程中,对APK瘦身的工作也要持续进行,这篇文章就会记录一下从几个方面对apk进行瘦身 APK构成初探 我们生成一个包,把包拖到Android studio中就可以看到包的构成了 apk的构成如上图,下面...

weixin_45365889的博客 221

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ANDROID资源打包优化,Android优化篇之APK体积优化

在平常开发过程中,随着应用功能不断增加和版本功能迭代,APK的体积大小在不知不觉中不断增大,而APK体积大小会影响用户首次下载安装应用或更新应用的时长和流量消耗。因此,如何有效合理的优化APK的体积也是在平常开发中需要留意的。一、合理选择图片类型在APP中图片就占据了很大的一部分体积,所以图片的优化是我们必须要关注的点。平常使用到的图片类型主要有jpg、png、webp、svg等。jpg是有损压缩...

weixin_39921023的博客 525

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Android 内存优化之包体积极致减小

简介 我们的APP随着年代的久远,迭代的版本越来越多,随之软件的包体积也就越来越大,如果apk包体积过大,会消耗用户大量的流量,并且安装时间也会更加久,这样就会导致APP的流量也会大幅度的降低,所以我们要优化apk包体积。 apk包体积优化的几道工序 1、使用SVG矢量图片 SVG全程是Scalable Vector Graphies,可缩放矢量图。它不会像位图一样因为缩放而导致图片质量下降,优点...

weixin_38203696的博客 1349

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android 性能优化 - APK 瘦身

如何查看 apk 的组成 如果要优化 apk 的大小,我们首先需要知道我们编译出来的 apk 都包含哪些东西,然后针对占用大的做裁剪,或者删除不需要的东西,从而达到瘦身的目的。 查看 apk 的内容占用情况很简单,打开 AS ,把 apk 拖到 AS 里面就可以查看 apk 包含的内容了。 可以看到占大头的是 res 代码等,所以瘦身可以从这几个方面来考虑。 如何减少 res 资源大小 删除冗余的资源 一般随着项目的迭代,部分图片等资源不再使用了,但是可能仍然被编译到了 apk 里面,所以可以删除这部

Xander.Wang 的专栏 451

Android APK瘦身经验总结

Android APK瘦身经验总结写在前面:无论手机的内存有多大, 我们自然都希望一个应用的安装包能越小越好,更小的APK标示着更多地用户愿意去下载和体验。本文借鉴张明云、胡凯等老师的博客,对常规的APK瘦身方法进行归纳和总结并附上资料的链接。如果能对你有所帮助,那真的再好不过了。零:瘦身的指标是什么造成了APK越来越大呢? 先来看一张解压之后的APK的目录图: 应该从哪些方面入手对APK进行瘦身呢

MeloDev的博客 1158

Android性能优化(5):APK瘦身优化

文章目录1. APK文件结构2. APK瘦身优化2.1 优化dex文件大小2.1.1 Proguard2.1.2 AndResGuard2.2 优化资源文件大小2.2.1 Android Lint2.2.2 [tinypng](http://leonshi.com/2015/11/02/tinypng-compress/)2.2.3 WebP2.3 优化libs目录大小2.3.1 裁剪libs目录...

老蒋也疯狂 3934

Android性能优化-减小APK大小

前言 用户通常会避免下载比较大的应用,特别是连接到2G和3G网络,或者按流量收费的设备。这篇文章描述了如何减小apk的大小,帮助你让更多的用户下载你的app。 一 理解APK的结构 在讨论如何减小apk大小之前,理解apk的结构很有必要。一个APK文件包括一个ZIP 文件,该ZIP包含app的所有文件。包括java 字节码文件,资源文件和一个包含了编译后的资源文件。APK包含以下目录: ...

weixin_30470857的博客 167

Flutter包大小优化

包大小分析 优化思路 APK优化实战 Flutter包大小优化需要用到集成打包的知识,对于还不了解如何打包Flutter应用的小伙伴可以先看我们课程后面有关集成打包部分的内容,然后再来学习本节课。 包大小分析 将APK拖拽到AS中可以进行包大小分析: 优化思路 图片优化 移除冗余的二三库 启用代码缩减和资源缩减 构建单ABI架构的包 图片优化 Flutter资源中占比较多的一般是图片,对于图片的优化常用的有两个方案: 图片压缩:对于过大的图片可以使用TinyPNG – Comp

唐僧的专栏 1758

Android减小Apk包大小的常用方法

我们之所以要减小apk的大小,一方面是为了节省用户手机的内存;另一方面是为了节省用户在App安装和版本升级时的流量; 直接减小apk文件大小的方法: 1.使用图片压缩工具; 目前常用的工具是: ImageOptim,压缩效果很好,使用默认配置即可。但是仅有MAC版的; Tinypng,官网:https://tinypng.com/,也非常简单易用,压缩效果也很好。 2.删除无用的资源文

qq_33172961的博客 949

Android App安装包大小优化,Android开发谈

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。GitHub地址PS:我GitHub中有大量高阶Android学习视频资料和面试资料包~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。[外链图片转存中…(img-1TRLfNb8-1710758124806)]GitHub地址PS:我GitHub中有大量高阶Android学习视频资料和面试资料包~欢迎大家一起交流讨论啊~

2201_75604341的博客 1000

性能优化 (十二) APK 极限压缩(资源越多,效果越显著)

性能优化系列 APP 启动优化 UI 绘制优化 内存优化 图片压缩 长图优化 电量优化 Dex 加解密 动态替换 Application APP 稳定性之热修复原理探索 APP 持续运行之进程保活实现 ProGuard 对代码和资源压缩 APK 极限压缩 简介 随着项目的不断迭代,代码量跟资源文件不断增多。那么就会出现打包后的 APK 文件越来越大,如果突然有一天你们老板或领导叫你优化 APK ...

weixin_33774615的博客 894

Android-APK瘦身实践:二次瘦身如何再减少大小?(4M—2-9M)

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

erghtt的博客 785
上一篇: 内存泄漏修复示例
下一篇: compose 保持屏幕常亮的工具类
lynn8570_blog
博客等级 码龄10年 254粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值