学不动了 ,京东跨端移动开发平台 Ares 发布!

Ares源码分析 ares/heap_fix:内存管理,可以知道Delphi的内存分配helper_unicode:unicode UTF-8 相互转换helper_params:选取命令行参数ufrmmain:Ares主界面,通常的事件和过程ufrmpvt:私人聊天窗口和UI处理事件ufrmemoticon:聊天的图释窗口Ufrmjmptofile:播放列表ufrmhint:提示窗口,(最具特色的UI之一)uc 阅读详情

点击上方“开发者技术前线”,选择“星标”

13:21 在看 真爱

责编: 可可  | 来源 : 京东技术


640?wx_fmt=png


前不久, 京东推出的跨端移动应用开发解决方案ARES,包括五大产品板块:ARES Engines、ARES Websits、ARES Studio、ARES Store、ARES Console。经过不断的技术完善,目前已经在手机京东客户端累计接入150+业务,稳定支撑千万级DAU,并对外支持20+个独立APP,拥有完善的API和功能强大的开发IDE工具。

ARES小程序转换工具用来打通ARESEngines和微信小程序生态,它包含两个部分,一部分是我们之前已经发布的小程序转JDReact工具,另一部分就是本次隆重推出的JDReact转微信小程序工具,通过这两部分我们就可以完全实现ARES引擎和微信小程序的互通。

640?wx_fmt=jpeg


样例展示


1、APIDemoes


640?wx_fmt=gif


2、实际业务


下面是前端组件部的通用交易组件项目,包含个人中心、订单、商详、购物车、结算,可快速组合接入不同的APP,项目同时具有原生、RN端、h5、小程序端,详情请查看链接(http://docs.api.jd.com/),其中小程序端就是由本引擎转化而来。


640?wx_fmt=jpeg

▲我的京东


640?wx_fmt=jpeg

▲订单业务

使用方式


1、命令行


可以通过安装@jdreact/to-mp-engine直接使用

npm install-g@jdreact/to-mp-engine

以JDReactAPIDemos为例:

jdreact-rntomp -i jdreact-jsbundle-JDReactAPIDemos/jsbundles/JDReactAPIDemos -o JDReactAPIDemosWP

这样就会在当前目录生成一个JDReactAPIDemosWP目录,也就是小程序的源码目录。


jdreact-rntomp命令有三个参数:

  • -v 打印jdreact-rntomp 版本

  • -i React Native 源代码目录

  • -o 转化生成的小程序源代码目录

2、ARES IDE


ARES小程序转换工具将会集成在最新的ARES IDE中,大家就可以不用命令行, 而是以可视化的方式方便的使用转化引擎了。

640?wx_fmt=jpeg


原理简介


首先:微信小程序是什么?


关于这个问题,大家可以直接查看微信小程序官方文档:

https://developers.weixin.qq.com/miniprogram/dev/


这里简单总结一下:

  • 数据驱动UI = f(data)

  • 无法直接操作节点,模版结构必须预先在wxml文件定义好

  • 变量绑定不能是函数调用


小程序实现了一套框架,并给出了很多规则,限制开发者必须以一种“静态”的方式组织代码。


那么,React Native是怎样的呢?React Native使用的是JSX来组织UI,由于JSX本质上是JS,所以React很自由动态,它就是代码,最终运行时会给你结果。


从“静态”到“动态”相对简单,之前我们发布过一个工具:

http://npm.m.jd.com/package/@jdreact/to-jdreact-engine,就是把小程序的代码转化为React Native。


那么如何把“动态”的React Native代码转化为“静态”的小程序代码呢?


AST操纵代码


先解决一个前置问题:我们必须能够理解代码语义进而能够“操纵代码”。想想看,由于变量绑定方式的不同,至少我们需要把 React Native的 <Text>{txt}</Text>转化为小程序的<text>{{txt}}</text>。,因为小程序的变量绑定形式是双大括号。


AST(抽象语法树)是源代码的抽象语法结构的树状表现形式,我们通过修改AST结构使之符合我们预期,然后根据修改之后的AST结构重新生成代码。比如,我们需要把var a=1,这句代码修改为const x='你好'。首先我们先看下这句代码的AST结构:

640?wx_fmt=png


修改这个AST结构,比如把上面的结构改为:

640?wx_fmt=png


重新生成代码就变成了const x='你好'


总的来说,通过AST这个工具,我们可以理解源代码语义,并且具有了修改源代码生产新代码的能力。

640?wx_fmt=jpeg


那么当我们遇到这样的React Native代码时

640?wx_fmt=png


可以通过AST修改代码,变成index.wxml

640?wx_fmt=jpeg


React运行时


回到我们一开始提出的“动态”与“静态”的问题。


比如这样的React Native代码:

640?wx_fmt=jpeg


这里的x是this.f()这个函数的返回值。但是这个函数具体返回什么呢?这个需要在运行时才能够确定下来。可能是JSX结构<Text>1</Text>也可能就是null。显然这里对这个x到底怎么处理,AST是没有办法的。AST本质也是“静态”分析代码,不是它不够强大,而是有些信息只有在代码运行时才能获取到。那么如何转化这种情况,让其在小程序上同样正常呢,也就是之前的问题:如何把相对“动态”的React Native代码转化为小程序代码呢?


只有一种方式就是让React代码跑在小程序环境,这样所有的运行时信息也就能够处理呢。而我们之前也提到了JSX本质上就是JS,而小程序就是运行在浏览器的, 需要再这个小程序环境上让React跑起来。所以,我们在小程序上实现了一套React 运行时,它是一个mini-react,总的思想设计思想基于React,又适配了小程序。


首先,我们知道JSX语法本身是不被浏览器识别的,直接在小程序里面写JSX语法那肯定就是语法错误了。所以第一步需要把所有的JSX会被转化JS(基于babel现有插件)。

640?wx_fmt=png


然后就像React一样,这里有一个Render入口函数,负责去构造整个React环境, 包括实例对象,context,ref等等,还记得之前说“小程序的组件属性不能是方法”这个限制了吗?这里也是不存在的,因为所有的属性传递都在React这一层进行。同时需要在调用setState的时候,重新构建这样的环境,这里面会涉及到 state 合并,组件声明周期,实例复用,context计算等等。与React是一样的,通过这样的一个过程把小程序渲染需要的数据都准备好。


最后一步:把运行时结果更新到页面上,刚才我们说了React执行环境会准备好所有小程序渲染需要的数据。这些数据最终会交个对应的小程序组件实例,然后小程序调用自己的setData方法,把数据更新到页面上。


大家可以简单的理解为:React Native在小程序上运行,一切以React的方式进行,只是最后实际更新UI的时候,是交个了小程序实例来更新。

640?wx_fmt=jpeg


这里有一个Instance manager模块,这个模块是小程序实例和React实例交互的关键。小程序环境和React环境在构建的过程中都会和这个模块交互,每当有新的实例生成时,都会向这个模块注册。同时实例销毁的时候,也会通知这个模块移除这个实例。它打通了React环境和小程序环境,使之可以双向交互。


组件/API对齐


接着上面的过程,假设是这样的一个页面:

640?wx_fmt=jpeg


当我们React Native‘运行’结束,把数据交给小程序更新UI的时候,小程序这里也必须存在一个‘FlatList’实例去接受这份数据。所以在小程序上我们需要预先把FlatList,ScrollView等这些组件实现一下,实际上由于差异的存在,即使时View, Text,Button这些基本组件,在小程序上也有对应的组件存在。


另外,正如之前APIDemos演示的一样,常用的JDReact的组件也是有对应的小程序版本的。

640?wx_fmt=jpeg


最后,如果你有自己的组件库,我们会提供很方便的扩展机制,那么就不仅仅是JDReact应用可以转化为小程序了,你自己的React Native应用也是可以无损转化了。

640?wx_fmt=jpeg


第三方库集成


对于第三方库这里以redux和react-redux这两个库来说明。这两个库分别代表了两个类型的库,redux与React毫无关系,就是一个数据管理库。而react-redux其实是通过高阶组件的方式对React组件进行扩展,是和React紧密相关的。


对于redux这种于React运行无关的库,直接就可以集成到小程序。


对于react-redux我们需要解决的是怎么在我们的mini-react上创建高阶组件。前文已经说明在React运行时和小程序运行时之间有个 InstanceManager 管理实例之间的关系,高阶组件本身也会生成一个React实例,需要把高阶组件的这个实例通过InstanceManager管理起来,我们提供了一个很方便的HocComponent方便大家创建高阶组件。react-redux就是基于这个组件实现的。


经典的TodoList:

640?wx_fmt=gif


美好的世界,总有遗憾


话说回来,由于小程序和React Native两个平台还是有很多差异无法抹平,有些使用上的限制必须提前说明。


对于这些差异,你可以使用平台判断的方式针对不同平台做不同处理,
当Platform.OS === 'wx'时表明是小程序平台,某些情况可以通过这个平台判断做相关处理。


1、路由


第一个差异点是路由系统。小程序的路由是内置的,而对React Native来说路由本身也就是一个组件,没有什么特殊的,而且Facebook官方也没有提供一个靠谱的实现。这里我们提供了一个路由组件@areslabs/wx-navigator来抹平差异。

在React Native端它基于社区的react-navigation,转化为小程序之后则直接使用小程序的内置路由。


这个路由组件简单易用,具备了大部分你需要的功能。

640?wx_fmt=gif

2、动画


第二个差异点时动画,相比与React Native来说,小程序的动画能力相对较弱,完全把RN的动画转化为小程序的是不可能的,这是平台限制。但是动画能力是一个app必不可少的能力,所以我们提供了一套RN的动画API@areslabs/wx-animated。


这套API基本参考了小程序的动画API,可以直接查看小程序的动画文档:

https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/wx.createAnimation.html

640?wx_fmt=gif

3、转化其他限制


  • 转化之后的代码最终是跑在小程序引擎上,必须符合小程序的规范,比如最终压缩的代码小于2m,路由深度不大于5层等

  • 只支持ES6模块文件系统,也就是只支持import/export,不支持require。不过,require图片是可以的。

  • 一个文件最多只能有一个组件,不管是class组件还是函数式组件。原因是这样的:在小程序端一个组件对应4个文件,如果在React Native的一个文件中写了多个组件(n),那么小程序端将会出现4n个文件,对于这些文件如何命名才能让开发者方便的二次修改呢?而且函数式组件的识别就是一个问题。这里为了避免混乱,这里要求一个文件最多只能有一个组件,而且我们认为这是一个好习惯

  • 基本组件的属性展开不支持,比如<View {...x}/>这样是不支持的。但是自定义组件是OK的,比如A是一个自定义组件,那么可以<A {...x}/>

  • ref必须是方法,不支持字符串

  • 不支持onLayout方法,在浏览器环境好像没有支持的途径

  • 自定义组件属性类型是React Element或者方法返回React Element,属性名必须是 xxComponet。类似 FlatList 的ListHeaderComponent,ListFooterComponent等

  • 在React Native里面,使用map方法返回组件数组是很常见的操作,比如

    640?wx_fmt=png

    在React Native中,如果Text没有指定key,将会报警告。但是转化引擎要求这里的key是必须传递的。

    同样 FlatList,SectionList的key/keyExtractor 也是必须指定的,如果不指定,我们不会好心的用index代替,而是直接报错。

  • 怎么判断一个函数是不是组件声明呢?我们对定义方式有要求:函数式组件必须在定义的时候导出,例如:

    640?wx_fmt=jpeg

  • 不支持外部JSX方法,可以用函数式组件,具体是指:

    640?wx_fmt=jpeg

    需要改写为:

    640?wx_fmt=png


END

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

历史阅读


谷歌限制华为后,Github也被限制,要全面开怼了吗

支付宝 App 启动性能优化

Kotlin 新版来了,支持跨平台!

640? 640?wx_fmt=gif 640?wx_fmt=png 喜欢就点个好看吧 640?wx_fmt=gif
ARES中文版 将再Proteus中设计的模拟电路转化为可视的电路板。 立即下载

相关推荐

Circinus:Vue的前端基于Ares

马戏团 项目设置 npm install 编译和热重装以进行开发 npm run serve 编译并最小化生产 npm run build 自定义配置 请参阅。

公司ARES studio 自动上传编译启动服务工具

公司ARES studio 自动上传编译启动服务工具//在执行文件中 // conf // |--app.conf // monitor.exe // app.conf中的内容 // command="ls -l" // monitordir ="c:\\test" // 在windows下会执行两次 // https://github.com/howeyc/fsnotify/issu

初夏的专栏 3491

react-Taro是京东一套遵循React语法规范的多端开发解决方案

京东多端统一开发框架,支持用 React 的开发方式编写一次代码,生成能运行在微信小程序、H5、React Native 等的应用。

Ares编译环境

1,将IE控件修改的2修改回来(搞新界面的时候改为2的),project->import type library->create unit2,将delphi的source中的ToolsAPI包的内容拷贝到lib中3,安装TNT unicode控件包4,安装JVCL5,安装DCPack6,安装Ares的扩展控件,不包括IE开头的pas文件*注意,当编译有的包时,会错误提示不是运行时刻包,修改pro

blueseaineye的专栏 1954

不会写GLSL?用Cesium 1.120 + Heatmap.js 2.0.5也能搞定动态洪水模拟(附完整源码)

本文介绍了一种无需GLSL编程的3D洪水动态模拟方案,结合Cesium 1.120和Heatmap.js 2.0.5实现高效可视化。通过数据层、可视化层和集成层的技术降级方案,开发者可以快速构建专业级洪水演进效果,适用于应急管理、水利工程等场景。文章包含完整源码和性能优化技巧。

weixin_30329623的博客 523

esp32 python开发环境搭建_eclipse esp32开发环境搭建

安装方法基本是按照官网提供的方法来操作https://github.com/espressif/idf-eclipse-plugin#GettingStarted但是官网的方法安装之后还是不能编译成功的,第一次编译会出现一下问题问题1:Building in: E:\eclipse-workspace\helloworlk\buildcmake -G Ninja -DCMAKE_TOOLCHAIN...

weixin_39978276的博客 1264

ARES

ARES规划是恒生公用技术平台规划,以敏捷Agility、重用性Reused、扩展性Extend、简单性Simple为核心特性与价值取向,规划涉及ARES Server运行支撑平台、ARES Studio集成开发平台、ARES See运维监控平台; 作为核心的ARES Server根据采用技术的不同,分为基于C/C++技术的CRES平台与基于JAVA技术的JRES平台。CRES(读音克瑞斯)平台...

weixin_30332705的博客 1150

保姆级教程:用NILMTK和REDD数据集,5分钟跑通你的第一个负荷分解模型

本文提供了一份详细的NILMTK和REDD数据集负荷分解模型教程,适合零基础用户快速上手。从环境准备、数据获取到模型构建和评估,全程仅需5分钟即可完成。特别适合希望快速入门非侵入式负荷分解(NILM)的开发者,涵盖数据预处理、模型训练及结果可视化等关键步骤。

weixin_30493401的博客 442

【亲测免费】 推荐 Ares: 一款轻量级的 Web 开发框架

推荐 Ares: 一款轻量级的 Web 开发框架 简介 是一个基于 JavaScript 的轻量级 Web 开发框架,旨在帮助开发者快速构建高性能、可扩展的应用程序。 应用场景 Ares 可以用于以下场景: 构建 Web 前端应用程序 创建 RESTful API 服务器 快速原型设计 特点 以下是 Ares 的一些主要特点: 轻量级 Ares 框架非常小巧,易于上手,同时也提供了足够的灵...

gitblog_00054的博客 1431

nRF52811墨水屏时钟DIY:从全刷到局刷的实战改造指南(附完整代码)

本文详细介绍了如何将基于nRF52811的墨水屏时钟从耗电的全屏刷新模式改造为高效的局部刷新模式。通过剖析全刷与局刷的原理差异,提供了从工程架构、驱动层适配到应用层逻辑重构的完整实战指南,并附上关键代码示例。改造后,设备功耗显著降低,续航大幅提升,同时解决了视觉闪烁问题,是DIY低功耗墨水屏应用的实用参考。

weixin_29194693的博客 355

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 STM32系列器件和开发工具发展历史。

我的博客 187

探索极致模拟体验:ares 模拟器

探索极致模拟体验:ares 模拟器 去发现同类优质开源项目:https://gitcode.com/ ares 是一个始于2004年10月14日的多系统准确度极高的模拟器,它是higan和bsnes的后代,专注于精确性和保真性。 项目简介 ares 不仅仅是一个普通的游戏模拟器,它是一个完整的多平台解决方案,能够仿真多个经典游戏系统的硬件,如FC、SFC、N64等。ares 提供了官方版本以及每...

gitblog_00063的博客 1503

辐射制冷无规散射结构非球形散射体的结构优化与设计准则

本文针对辐射制冷材料中非球形散射体的光散射特性开展研究,提出了一种基于体积散射截面和不对称因子的综合评价方法。通过建立简化模型分析球体、圆柱体、长方体等六种几何形状在太阳波段的散射性能,发现金字塔形和圆锥形具有更强的后向散射能力。研究创新性地提出"反射因子SR=S(1-g)"这一评价参数,该参数与宏观反射率高度相关,为非球形散射体的优化设计提供了定量依据。仿真结果表明,合理选择散射体形状可显著提升辐射制冷材料的太阳反射率,为实现高效被动制冷提供了新的结构设计思路。

huanghm88的专栏 79

apollo公共配置dubbo 报错 Invalid name=“org.apache.dubbo.config.ApplicationConfig#0“解决

apollo公共配置信息 dubbo.registry.protocol = zookeeper dubbo.registry.address = 127.0.0.1:2181 dubbo.protocol.name = dubbo dubbo.protocol.port = 20885 dubbo.provider.timeout = 60000 dubbo.provider.threadpool = fixed dubbo.provider.threads = 100 dubbo.provider.a.

cai750415222的博客 5729

第7章: MMU notifier在AMD GPU驱动中的应用

AMD GPU驱动利用MMU Interval Notifier机制实现共享虚拟内存(SVM)和异构内存管理(HMM)。通过分析AMDGPU内存架构(VRAM、GTT、Userptr)和Buffer Object设计,重点探讨了Userptr零拷贝机制如何依赖MMU notifier保持CPU/GPU内存一致性。HMM框架进一步实现统一地址空间和透明页面迁移,AMDGPU通过amdgpu_hmm.c实现两种invalidate回调(GFX和HSA模式),处理不同场景下的内存失效同步问题。

图形/计算GPU的驱动与虚拟化技术分享园地 2473

全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中)

QCC3040开发笔记之基本介绍(0) QCC3040开发笔记之开发环境搭建(1) QCC3040开发笔记之debug调试(trb调试,usbt调试,adb调试,WIFI调试)(2) QCC3040开发笔记之按键配置(3) QCC3040开发笔记之按键切换(4) QCC3040开发笔记之按键逻辑(5) QCC3040开发笔记之tone(6) QCC3040开发笔记之提示音(7) QCC3040开发笔记之bitserial接口(8) QCC3040开发笔记之双mic+AEC+ANC(9...

心跳包的博客 3万+

java中ares框架_ARES辅助开发工具-用户手册.doc

ARES辅助开发工具-用户手册ARES辅助开发工具用户手册第1章产品概述5第2章安装、更新62.1安装62.2更新6第3章ARES框架介绍63.1请求63.2动作63.3对象资源7第4章新建&删除74.1工作台说明74.1.1找到打开透视图的菜单。74.1.2打开“ARES”透视图。84.1.3复原透视图。84.1.4透视图的默认效果。84.1.5问题列表94.1.6代码评审记录104.1...

weixin_40008033的博客 2369

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【亲测免费】 Ares 开源项目教程

Ares 开源项目教程 项目介绍 Ares 是一个开源项目,旨在提供一个高效、灵活的客户端框架。该项目的主要目标是简化客户端开发流程,提高开发效率,并支持多种应用场景。Ares 项目遵循开源协议,鼓励社区贡献和协作。 项目快速启动 环境准备 在开始之前,请确保您的开发环境已经安装了以下工具: Git Node.js (推荐版本 14.x 或更高) npm (通常随 Node.js 一起安装) ...

gitblog_00593的博客 1116

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Aria-UI:领先的 GUI 多模态模型,AndroidWorld 基准测试第一

是一个专为 GUI 基础设计的大型多模态模型,类似于 Claude Computer use。它无需 HTML 或 AXTree 输入,采用纯视觉方法。作为 Moe 模型其速度也非常快。在 AndroidWorld 基准测试中以 44.8% 的成功率排名第一。,确实速度挺快的,不过该技术是底层模型,没有封装成可交互的应用。

weixin_51674085的博客 345

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

探索京东商城Flutter版:一个跨平台的移动应用框架实践

探索京东商城Flutter版:一个跨平台的移动应用框架实践 在如今的移动开发领域,跨平台是开发者们普遍追求的目标,以实现代码复用和降低维护成本。而Flutter作为Google推出的高效、现代化的UI工具包,正日益受到广大开发者的喜爱。今天我们要介绍的是一个基于Flutter构建的京东商城示例应用——。这是一个开源项目,旨在为开发者提供学习和参考,帮助他们更好地理解和运用Flutter进行实际项目...

gitblog_00040的博客 1145

Android Studio快捷开发(常用快捷键)

本文记录自己常用的快捷开发操作,会持续更新,慢慢补。 1.鼠标左键双击选中所点击的部分: 2.在句末鼠标左键双击选中该句: 3.在{ }大括号前后鼠标左键双击选中该{ }大括号包裹的代码段: xml文件中在< >前后双击也可以选择代码段 4.注释 :快捷键 Ctrl + / 5.方法折叠:Ctrl + Shift + 减号 6.方法展开:Ctrl + Shift + 加号 xm...

小蜉蝣星蔚的博客 1942

使用ajaxfileupload.js插件批量导入文件

1.下载ajaxfileupload.js文件,并且修改其中的方法: createUploadForm: function(id, fileElementId) { //create form var formId = 'jUploadForm' + id; var fileId = 'jUploadFile' + id; ...

砖家穴者叫兽的博客 1万+

干货 | 把Flutter扩展到微信小程序端的探索

Google Flutter是一个非常优秀的跨端框架,不仅可以运行在Android、 iOS平台,而且可以支持Web和桌面应用。在国内小程序是非常重要的技术平台,我们也一直思考能否把Flutter扩展到小程序端?我们团队之前已经开源了Alita项目(https://github.com/areslabs/alita),Alita可以把React Native的代码转换并运行在微信小程序平台。受此...

京东科技开发者 2万+

使用alita 将React Native项目转化为小程序

1.通过npm全局安装alita npm install -g @areslabs/alita 2.官方文档说明可以直接通过react native init一份项目直接转化,不过试了试,有问题,小程序一直报未找到入口文件 app.js,所以尽量使用alita官方提供的examples文件,所以可以clone一份HelloWorldRN,将文件名改为你的项目名就可以了:比如Demo 3.使用命令...

koufulong的博客 2485

JDFlutter 京东跨平台开发框架!

点击上方“开发者技术前线”,选择“星标” 13:21 在看 真爱 作者: 京东商城共享技术部 | 来源:京东商城技术团队 责编: 可可 前言 JDFlutter 是商城共享技术部-多端融合技术部推出的新一代跨平台开发框架,可快速集成至现有 Android/iOS 工程,开发者可借助 JDFlutter 平台快速完成 Flutter 业务开发。JDFlutter 平台提供了大多数京东样式 UI ...

开发者技术前线-DevolperFront 2795
上一篇: 为什么 Python 不用设计模式?
下一篇: Github上线打赏功能,要捞钱了?
DevolperFront
博客等级 码龄8年 465粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值