Android Weekly #30

技术文章

过去一周 Android 相关的技术文章精选,以及过去一周发现的经典文章

  1. 深入探索 Flutter 性能优化

    Flutter 作为目前最火爆的移动端跨平台框架,能够帮助开发者通过一套代码库高效地构建多平台的精美应用,并支持移动、Web、桌面和嵌入式平台。对于 Android 来说,Flutter 能够创作媲美原生的高性能应用,但是,在较为复杂的 App 中,使用 Flutter 开发也很难避免产生各种各样的性能问题。在这篇文章中,我将和你一起全方位地深入探索 Flutter 性能优化的疆域。

  2. 深入理解 Gradle Tooling API

    Gradle 为什么要专门提供一个 Tooling API 供外部集成调用,而不是像其他构建系统一样,只提供基于可执行程序的命令方式呢?Tooling API 是对 Gradle 的一个重大扩展,它提供了比命令方式更可控、更深入的构建控制能力,可以让 IDE 和其他工具更方便、紧密地和 Gradle 能力结合。Tooling API 接口可以直接返回构建结果,无需像命令方式一样再手动解析命令行程序的日志输出,并且可以独立于版本运行,这意味着相同版本的 Tooling API 可以处理不同 Gradle 版本的构建,同时向前和向后兼容。

  3. 向工程腐化开炮:Java 代码治理

    java 代码腐化和失控,主要体现在不合理代码使用不断累积。这里“不合理”的定义,由上层场景决定,例如在当前隐私合规监管态势下,我们不允许非预期的,代码直接调用系统敏感 API,那么“对系统敏感 API 的直接调用”就是不合理。java 代码治理,正是围绕这种“不合理“代码使用,逐步展开。本章不会介绍 java 语言本身,相信大家对此已有足够熟悉。相对的,会从工程应用角度,讲解几个有意思的技术点。

  4. Android Studio 对现代 WorkManager 的支持

    上一篇文章)中,我们提到了现代 WorkManager API 对工具支持方面也进行了改进,本文我们将结合实际案例来看看具体有哪些改进。

  5. Android P/Q/R/S 9/10/11/12 多任务手势动画 OtherActivityInputConsumer 情况[1]

    在手机屏幕屏占比越来越大的时候,用户对手机的屏幕交互体验也在提升,把原来的导航键 3 个按钮的交互方式,在 Android P 产生了一个巨大的变化,增加了全面屏上导航手势的方式,后面版本也是在 P 的基础进行一些细微修改。导航手势给人的用户体验也确实很不错,但是他的整套代码实现也是相当复杂的,今天我们对导航手势的 OtherActivityInputConsumer 情况来进行分析。

  6. Activity 启动速度分析方法(启动流程分析)[2]

    本文从启动速度统计方法、Activity 启动流程分析、统计方法小结、优化思路等四个方面来介绍 Android 启动速度的分析方法

  7. 对开发人员有用的定律、理论、原则和模式[3]

    当人们谈论开发时,会聊到许多定律。这个仓库收录了一些最常见的定律。❗: 这个仓库包含对一些定律、原则以及模式的解释,但不提倡其中任何一个。它们的应用始终存在着争论,并且很大程度上取决于你正在做什么。

  8. iOS 微信全文搜索技术优化

    全文搜索是使用倒排索引进行搜索的一种搜索方式。倒排索引也称为反向索引,是指对输入的内容中的每个 Token 建立一个索引,索引中保存了这个 Token 在内容中的具体位置。全文搜索技术主要应用在对大量文本内容进行搜索的场景。

    微信终端涉及到大量文本搜索的业务场景主要包括联系人、聊天记录、收藏的搜索。这些搜索功能从 2014 年上线至今,已经多年没有更新底层搜索技术,聊天记录使用的全文搜索引擎还是 SQLite FTS3,而现在已经有 SQLite FTS5,收藏首页的搜索还是使用简单的 Like 语句去匹配文本,联系人搜索甚至用的是内存搜索(在内存中遍历所有联系人的所有属性进行匹配)。随着用户在微信上积累的数据越来越多,提升微信底层搜索技术的需求也越来越迫切。在 2021 年,我们对 iOS 微信的全文搜索技术进行了一次全面升级,本文主要介绍本次技术升级的工作经验。

  9. Jetpack Compose 1.1 现已进入稳定版!

    我们一如既往地搭建产品路线图,现在已经发布了 Jetpack Compose 的 1.1 版本,这是 Android 的现代原生界面工具包。此版本新增了一些功能,比如经过优化的焦点处理、触摸目标值、ImageVector 缓存,和对 Android 12 拉伸滚动的支持。Compose 1.1 还让许多之前的实验性 API 过渡到了稳定阶段,并支持新版 Kotlin。我们已经更新了示例、Codelab 和 Accompanist 开发库,以便您与 Compose 1.1 搭配使用。

  10. 自动拦截 50% crash,字节自研 Fastbot 如何助力今日头条稳定性测试

    在 Apple 对 TestFlight 限制以后,单 App 通过 TestFlight 渠道灰度用户总量受限,灰度暴露稳定性问题的能力受到极大的限制,如何能更好地在线下暴露更多的问题,成为当前最棘手的问题。

    Fastbot 是公司 Quality Lab 与 GIP - iOS 平台架构团队共同研发的智能化测试服务,其利用机器学习和强化学习进行遍历测试,其提供了基础的稳定性测试服务能力,在代码覆盖率和稳定性测试方面,都有着比传统 Monkey 更好的效果,问题发现数及代码覆盖率都有一倍以上的提升,在代码覆盖率方面与人工回归有着相当的表现。[1]

  11. APM 页面加载耗时校准

    APM 的全称叫做 Application Performance Monitor,属于应用性能监控部分。在手淘的 APM 中有一项特殊的数据,叫做页面可视耗时,不同于业界常规的技术视角阐述数据,我们更倾向于从用户体验交互进行阐述。

    以 Activity 实现的页面为例,在页面加载过程中,用户关心的是从点击开始到最后页面完全呈现,直至用户可以进行交互的一个过程,而不是单纯 Activity 的 Lifecycle 耗时,更不是技术视角的一个阶段数据。

    更逼近用户体验的数据是我们在页面加载上的追求。接下来我将从淘宝 APM 如何从用户角度实现可视计算的历史进行介绍,并深入详解淘宝对页面加载耗时校准所做一些努力与改变。

  12. Android IO 监控 | 性能监控系列

    公司的一款 app 最近在上架厂商的过程中,被对方指出了 IO 读写过于频繁,然后不给上架。但是 IO 读写的操作非常零散,而且很多第三方框架内都会有写入操作,所以就变得非常难以监控和修改,有没有一种非常简单的方式可以帮助我们去定位这个问题呢?

    之后我参考了下腾讯的 Matrix 的 IOCanary 监控组件,其原理是通过 hook(ELF hook)的机制,hook 了 IO 的读取/写入的操作,然后打印出调用堆栈,从而帮助开发同学定位问题。

    一般来说,一套 Apm(Application Performance Monitor)系统是要分成多个部分的,比如开发阶段工具,测试阶段工具以及线上收集数据等等。而 IO 监控则是其中的开发测试阶段工具。

  13. Android 启动画面[4]

    Android 12 添加了 SplashScreen API,该 API 可为所有在搭载 Android 12 或更高版本的设备上运行的应用启用新的应用启动动画。这包括启动时的进入应用动作、显示应用图标的启动画面,以及向应用本身的过渡。

    这种新体验可让应用每次启动时都呈现标准设计元素,但它也可自定义,以便您的应用能够保持其独特的品牌形象。

    除了直接使用 SplashScreen API 之外,您还可以使用封装 SplashScreen API 的 SplashScreen compat 库。

  14. 实用的 ADB GUI 工具推荐[5]

    ADB 是一个用于调试 Android 系统的命令行工具(全称 Android Debug Bridge 调试桥),对于经常搞机、刷机的小伙伴玩家们,或者是应用开发者,想必对 ADB 这个概念一定不会陌生。

    不过,原版的 ADB 工具仅可通过命令行进行操作,缺乏傻瓜化的 GUI 图形界面,在一些情况下并不便捷。本文为大家分享 Padroid 小编在网上搜集到的,一些实用的图形化 ADB GUI 工具推荐。

  15. 【开源分享】深挖 Linux 内核的新功能特性[6]

    以 io_uring, cgroup, ebpf, llvm 为代表,包含开源项目,代码案例,文章,视频,架构脑图等

  16. Lottie Android 5.0[7]

    在 Lottie's 庆祝成立五周年之际,Lottie Android 5.0 已经准备好发布。表面上看是一些新功能,但在引擎盖下是一些重要的渲染能力、性能改进和错误修复,并配以迄今为止最大的更新日志。

  17. How To Make an Android Run Tracking App[8]

    在本教程中,你将学习如何制作一个安卓跑步追踪应用程序,在地图上显示用户的位置和他们的路径。当你试图为跑步或骑自行车等运动项目建立一个追踪器时,这种方法很实用。使用谷歌地图 API,你可以创建一个具有这种能力的追踪器。

  18. Can you trust time measurements in Profiler?[9]

    Profiler 是寻找 Android 应用中性能热点的一个优秀工具。它被嵌入到 Android Studio 中,所以它根本不需要设置,而且它允许我们在与应用程序交互时,很容易看到每个方法的实时执行时间。但是你有没有想过,Profiler 中的结果到底有多准确?事实证明,你在 Profiler 中看到的结果远没有你想象的那么准确。在这篇文章中,我将向你解释为什么

  19. Android 12(S)适配指北[10]

    Android 12 适配内容解析

  20. 抽丝剥茧 Jetpack | Lifecycle 到底解决了什么问题?[11]

    Lifecycle(生命周期) 在任何 GUI 编程中都是基石般的存在,Android 也不例外。作为用户,在页面跳转,旋转屏幕,查看通知,切换应用等日常操作中,都期望获得流畅连贯的使用体验。在这背后,就需要我们开发者在生命周期组件的不同阶段中进行相应的逻辑处理。这里的生命周期组件,可能是整个应用,也可能是单个页面。对应到 Android 中,Activity、Fragment,甚至 Service 都可以成为生命周期组件。

  21. xCrash ANR 非主线程初始化不生效的前世今生[12]

    这要从一个 bug 说起, 项目 Demo 工程该功能 work 但是集成到集成工程里该功能不生效 经过排查发现二者的差异如下 :

    1. Demo 工程 xCrash 初始化在 mian 线程。

    2. 集成工程里 xCrash 初始化却在子线程里。

  22. Context Receiver 是什么东西?

    Kotlin 1.6.20 预览版中的 Context Receiver 是什么东西?

  23. 一个新进程的内核之旅

    我们常在 Linux 平台 bash 环境下执行一条 cmd,如看下当前文件有哪些"ls -l"。这条 cmd 会 fork 一个新的进程,然后完成 ls 可执行程序的加载和执行。对于用户而言,看上去仿佛就应该这样,简单快速。而对于这个新进程,在内核中经历了什么,内核表示自己默默扛下所有。

    本文尝试探索内核所做的工作,开始之前提出几个问题:

    1. fork 新进程的返回值为何是 0?

    2. fork 父进程和新进程如何执行同一份代码?

    3. fork 新进程何时被加入到调度器队列?

  24. 动态化引擎原理解析与开发实践

    本文介绍了 Android 端动态化引擎的实现原理,并分步骤地实现了动态化引擎的各个模块,带领大家更直观、更深入地了解移动端动态化方案。

经验分享 && 推荐阅读

过去一周个人阅读和收藏的非技术文章精选,扩展 Android 之外的知识和视野,不要给自己设限

  1. 黑咖啡与减肥 : 喝黑咖啡能减肥么?江湖上传闻喝咖啡减肥,也是特指黑咖啡,就是不加奶不加糖纯粹的一杯苦水,学名叫做美式咖啡,黑咖啡或者美式咖啡的减肥功效,也只是个辅助功能。它要么是配合锻炼,提升人的心率和排尿,从而加强代谢;要么是配合间歇性断食,作为断食期间喝白开水之外的选项

  2. 写在第二十五万字[13]:写作这个活动注定不适合所有人,尤其是在如今的短视频时代。但我依旧觉得大部分人都值得去试试,看看自己能不能写点东西并坚持下来。这也是我这篇文章的目的,让更多的人看到并开始尝试写点东西。

  3. 互联网人穿越周期的「新框架」:作为互联网从业者,我们也在穿越周期。未来,不论是选择公司还是做具体业务,都需要迭代认知框架,去适应新的时代背景,我把它总结为「理解边界,聚焦核心,学会算账」。

  4. 刷新率也能浮动?各厂 LTPO 2.0 调度机制大揭秘:各家都在推广 LTPO 屏幕,那么各家 LTPO 屏幕调度如何?我们一起来探索。

  5. 聊聊 Notion 个人管理体系搭建 | Linmi Weekly #3:我们可以记录,但是如何让信息结构化起来,我们可以随时抽取我们需要的信息,让别人能快速理解的信息结构?

  6. 技术负责人要停止写代码吗?:对于 TL 来讲,该做什么呢?六字箴言:「咨询」、「指导」、「协助」;做 Code Review,帮助团队解决具有挑战性的编程问题;抬头看路,阅读技术文章,了解最新的技术新闻和趋势,为自己解决一些小的编程挑战,以此来保持大脑的敏锐。

  7. 无法忍受不做单元测试和内卷,我离开了这家在美中国企业:最近,一位曾在一家在美中企(TikTok)工作了一年多的华裔(之前任职于 Snapchat 和 Facebook),在 YouTube 上发布了一个视频“5 crazy things about working for Tiktok(why we quit our PM and engineering jobs)”,从五个方面总结了他从中国企业里学到的经验。

  8. 如何使用 MarginNote 阅读外刊新闻 :我一直在鼓励同学们多看多写多读,这是外语专业学生的最朴素的习惯。不管有多少人会做,我还是会坚持推动下去。今天这篇帖子我想具体写一下如何使用 MarginNote 这款软件来阅读外刊新闻

  9. 15 新兴外企的工作体验【Grab - Yifen】篇:2022 新的系列节目,关注近十年才来中国组建团队的外企,邀请在这些公司工作的朋友,聊聊他们体验和思考。本期的嘉宾是来自 Grab 北京的 Yifen 同学

  10. 创作者经济-概念篇 -#7[14]:上周发出之后不久,本 newsletter 的订阅者就突破了 1000 个,小小里程碑,可喜可贺。我的数据在 Twitter 上都是公开过的,七篇文章,不到两个月的时间就突破了 1000 订阅,这个速度还可以,远超出了我的预期。我写 newsletter 的初衷,在第一期中就提到过,但当时没想清楚,现在写了几期之后,对创作者经济和对 newsletter 这个载体都慢慢地有了更深刻的认识。本篇主要讲一些概念,下一篇会以实例讲解头部大佬如何运营他的 newsletter 的

  11. 创作者经济-实例篇 -#8[15]:这周承接上一期   创作者经济-概念篇,而这期主要以  Packy McCormick  写的 newsletter Not Boring  为例,讲一讲他是如何一年时间从零开始赚到  100 万美金的。写本篇时还看到了这篇  #02 详解 Not Boring: 从内容切入风投,「一人公司」,以及创作者经济新玩法,文中旁征博引,横向对比写得很好,珠玉在前,我只敢狗尾续貂一下了。

  12. 我是如何从哑巴英语到无障碍英文工作沟通的[16]:提起语言能力,无非是听说读写四个方面,但是对于海外面试,以及应付全英文的工作环境,对于大家来说,可能感觉更重要也更难提升的其实是听和说两个方面。因为读写的话,大多数是邮件交流,这种沟通方式是异步的,可以靠花时间慢慢修改,慢慢理解,而要你去参加个全英文的会议,所需要的听和说能力,是实时的,在面对面沟通的时候,没有太多时间让你去慢慢理解和斟酌字句,并且还会倍感压力,难度更大。但是不论是听说,还是读写,首先的基础肯定还是英文单词,我先来说说我是如何学习和记忆单词的吧。

  13. 英语:漏屋-英语学习的真实方法及误区分析[17] :著名语言学家 Greg Thomson 说的:“外语学习的原理是如此之复杂,以至于没有人能说清楚;但掌握语言的过程又是如此之简单,以至于不需要说清楚。”讨论语言学习的原 理,是件非常复杂的事,在下当然也没把握能描述得很清楚。而且因为外语学习就连学术界都存在很多尖锐的争论,本人也不敢说自己有把握能把争论化解。但还是 决定先从简单入手,做些抛砖引玉的工作吧,探讨一下外语学习的真谛,特别是对大家在外语学习上普遍存在的误解进行分析和澄清,希望能对外语学习者有所帮 助,对外语教学工作着有所启发,就知足了

  14. 健身、拍照、感受力和记忆厚度[18]:「本体感觉」(proprioceptive sensation)指的是通过本体感受器接受外界的刺激信息,再经过大脑的处理使我们能感知关节的动作和位置的能力。最早由解剖学家查尔斯·贝尔(Charles Bell)提出,他认为本体感觉作为感觉、知觉和运动的基础,可以对身体空间位置以及用力大小进行判定。而长期看着镜子训练,会降低身体对动作的感知能力。

  15. 写在我的 M1 Max 深度使用 3 个月后[19] :结论:真香

  16. Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11:还在使用 89 年版 C 语言的 Linux 内核,现在终于要做出改变了。今天,Linux 开源社区宣布,未来会把内核 C 语言版本升级到 C11,预计 5.18 版之后生效,也就是今年 5 月。这个决定很突然,从发起问题到官方声明,不过才一个星期,要知道说服固执的 Linux 之父 Linus Torvalds 可不是件容易的事。事情的原因,说起来还有那么一点偶然的因素。

  17. LTPO 是否能够成为下一代的手机屏幕方向?[20] : 答案:是

  18. OPPO 刘作虎:行业增长见顶,品牌如何“爬坡”?:本周六,OPPO 首席产品官刘作虎先生做客混沌,与混沌创新领教李云龙展开精彩对谈,深入剖析 OPPO 高端化战略之路。刘作虎先生倾囊分享他将产品作为一种信仰的坚持,他对好产品的理解以及来自一线的用户价值感知方法论等。

  19. Android Studio Bumblebee (2021.1.1) 稳定版正式发布[21]

  20. 自说自话 Weekly Review 055 - 你要走自己的路,也要允许他人走在自己的路上[22]:海水是苦涩的,海量的信息只能带给人无法饮用的饥渴感,海量的朋友带给人的可能也是没有朋友孤独感。你要走自己的路,也要允许他人走在自己的路上。

  21. 消失的虚拟城市:豆瓣“阿尔法城”第一次考古发掘报告:豆瓣阿尔法城关闭。有人评价,它是痴迷于城市规划的豆瓣创始人的一次文艺乌托邦的尝试。但如今,它仅存遗迹。一座虚拟的城市和社区,能让诸多同好相聚一处,却无法对应真实的空间,这意味着它不可能像现实中的城市,因人口增长超过环境容量而崩溃,只会因人口流失而凋敝。无论如何,这里都曾是诸人理想中的一座城池,值得进行考古挖掘。

开发 Weekly

  1. Android Weekly-507[23]

  2. Kotlin Weekly #291[24]

  3. onCreate Digest - Issue #97[25]

  4. NEWSLETTER #94[26]

  5. Now in Android #56[27] :过去一周 Android 官方的一些内容更新介绍:Jetpack Compose 1.1 stable, DataStore MAD Skills series, Material You, developer preview of Android 13, AndroidX releases and more!

  6. 软件测试周刊(第 60 期):有事可做,是一个人保持最佳状态的唯一途径:本期看点:如何使用 Jest + React Testing Library 做单元测试?性能工程:如何做性能规划?中通是如何做全链路压测的?什么才是真正的持续交付?从电视剧《开端》理解可观测性;你应该知道的 5 种软件架构模式;Redis 突然变慢了如何排查并解决?何为工程师思维?企业如何做好 2022 年度规划?

书籍推荐

  1. 字节跳动:从 0 到 1 的秘密[28]

定时打鸡血

!! 在信息时代,客观障碍已不复存在,所有的障碍都是主观上的。如果你想动手开发什么全新的技术,你不需要几百万美元的资金,你只需要在冰箱里摆满比萨和可乐,再有一台便宜的计算机,和为之献身的决心。我们在地板上睡过,我们从河水中趟过。From < Doom 启示录>

付费知识星球

一个分享 Android 开发领域性能优化相关的圈子,主理人是三个国内一线手机厂商性能优化方面的一线开发者,有多年性能相关领域的知识积累和案例分析经验,可以提供性能、功耗分析知识的一站式服务,涵盖了基础、方法论、工具使用和最宝贵的案例分析

本周更新:卡顿相关的工具使用、理论知识等59f2b487c5029711fb496c298afd42cc.png

NewsLetter

由于微信外链限制,很多文章链接都无法直接访问,推荐大家订阅 NewsLetter 来获得更好的阅读体验

  1. 订阅地址:https://androidweekly.zhubai.love/

  2. 本文 NewsLetter 地址:https://androidweekly.zhubai.love/posts/2109754236060573696

参考资料

[1]

Android P/Q/R/S 9/10/11/12 多任务手势动画 OtherActivityInputConsumer 情况: https://blog.csdn.net/learnframework/article/details/123032419

[2]

Activity 启动速度分析方法(启动流程分析): http://light3moon.com/2021/01/19/Activity%20%E5%90%AF%E5%8A%A8%E9%80%9F%E5%BA%A6%E5%88%86%E6%9E%90%E6%96%B9%E6%B3%95%EF%BC%88%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B%E5%88%86%E6%9E%90%EF%BC%89/

[3]

对开发人员有用的定律、理论、原则和模式: https://github.com/nusr/hacker-laws-zh

[4]

Android 启动画面: https://developer.android.google.cn/guide/topics/ui/splash-screen

[5]

实用的 ADB GUI 工具推荐: https://padroid.cc/archives/182

[6]

【开源分享】深挖 Linux 内核的新功能特性: https://zhuanlan.zhihu.com/p/461835365

[7]

Lottie Android 5.0: https://gpeal.medium.com/lottie-android-5-0-7d468e36d882

[8]

How To Make an Android Run Tracking App: https://www.raywenderlich.com/28767779-how-to-make-an-android-run-tracking-app

[9]

Can you trust time measurements in Profiler?: https://proandroiddev.com/can-you-trust-time-measurements-in-profiler-5b3566a55e0c

[10]

Android 12(S)适配指北: https://juejin.cn/post/7067748263113261087

[11]

抽丝剥茧 Jetpack | Lifecycle 到底解决了什么问题?: https://juejin.cn/post/7067659152268460045

[12]

xCrash ANR 非主线程初始化不生效的前世今生: https://juejin.cn/post/7068931826668175374

[13]

写在第二十五万字: https://www.bmpi.dev/self/my-writing-story/250k/

[14]

创作者经济-概念篇 -#7: https://geekplux.zhubai.love/posts/2104814787770388480

[15]

创作者经济-实例篇 -#8: https://geekplux.zhubai.love/posts/2107842028846809088?push_source_type=email&push_source_id=2092551433555320800

[16]

我是如何从哑巴英语到无障碍英文工作沟通的: https://www.kenshinji.me/wo-shi-ru-he-cong-ya-ba-ying-yu-dao-wu-zhang-ai-ying-wen-gong-zuo-gou-tong-de/

[17]

英语:漏屋-英语学习的真实方法及误区分析: https://www.cnblogs.com/zhoujg/archive/2011/03/01/1968366.html

[18]

健身、拍照、感受力和记忆厚度: https://hayami-blog.typlog.io/gym

[19]

写在我的 M1 Max 深度使用 3 个月后: https://sspai.com/post/71713?ref=weibo

[20]

LTPO 是否能够成为下一代的手机屏幕方向?: https://www.zhihu.com/question/449675893/answer/1787300579

[21]

Android Studio Bumblebee (2021.1.1) 稳定版正式发布: https://juejin.cn/post/7068125733985452063

[22]

自说自话 Weekly Review 055 - 你要走自己的路,也要允许他人走在自己的路上: https://landisland.zhubai.love/posts/2109493451027390464

[23]

Android Weekly-507: https://androidweekly.net/issues/issue-507

[24]

Kotlin Weekly #291: https://mailchi.mp/kotlinweekly/kotlin-weekly-291

[25]

onCreate Digest - Issue #97: https://www.oncreatedigest.com/issues/oncreate-digest-issue-97-1044486

[26]

NEWSLETTER #94: https://dormoshe.io/newsletters/ag/android/94

[27]

Now in Android #56: https://medium.com/androiddevelopers/now-in-android-56-c567b8a9a005

[28]

字节跳动:从 0 到 1 的秘密: https://weread.qq.com/book-detail?type=1&senderVid=15300598&v=55832f8072797d00558f1d3kcfc32da010cfcd208495488

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值