构造Scala开发环境并创建ApiDemos示例项目

scala-intellij IDEA 插件 Scala-IDEA-插件-2018.2.10版本 适用于IDEA 182-183(在IDEA内点击 Help -> About即可查看版本号) 立即下载

从2011年开始写Android ApiDemos 以来,Android的版本也更新了很多,目前的版本已经是4.04。ApiDemos中的例子也增加了不少,有必要更新Android ApiDemo示例解析系列文章(当然之前的文章还是有用的,依然可以作为参考)。为了不重复之前的内容,我们准备使用Scala语言开发Android应用,随着例子的逐步解析,我们会把ApiDemos的例子的代码依次修改为Scala代码,并使用Robujuice 来注入View,关于Scala编程可以参考博客scala开发教程 ,关于Robujuice的介绍可以参考Android RoboGuice 使用指南

我们开发Android应用使用的IDE为Intellij (这也是新版Android Studio 基于的版本)。
1. 安装Scala开发环境 ,请参考开始神奇的Scala编程之旅
2. 安装IDEA Scala插件 使用IntelliJ IDEA开发Scala应用
3. 安装Android SDK
4. 导入ApiDemos示例到Intellij,这里我们使用Android-17 目录下
20141001001
为方便起见,ApiDemos的项目可以在github网站上复制 https://github.com/guidebee/ApiDemos 一般来说每次更新都会打上当天的日期作为标记,以便参考。
5.为Android项目配置Scala Facet,在导入的ApiDemos项目,使用File -> Project Structure -> Facets
20141001002

6. 为项目添加Scala 库文件, 使用 File -> Project Structure -> Libraries
20141001003
scala-library.jar 文件可以在Scala安装目录 的libs下找到
7. 确认之前添加的Scala Facet为module的dependency. 你可以查看模块的dependency File -> Project Structure -> Modules -> Dependencies
20141001004
并配置compiler plugins (可选)

20141001005

注意:选取的Android平台需要使用JDK7 ,这是因为目前最新版的proguard还不支持JDK8.

8. 配置proguard ,使用下面的proguard-project.txt 文件,这个文件可以使用大多数的项目,你将这个文件添加到Android项目中
对于Intellij 12 ,使用 File → project settings → modules → select module(s) → compiler tab → enable proguard
对于Intellij 13 ,使用 File → project settings → modules → select module(s) → compiler tab → check Run Proguard checkbox
20141001006
注意在配置proguard列表时,同时也需添加Android SDK缺省的文件 /android-sdk-home/tools/proguard/proguard-android.txt 缺省情况已经在项目的配置中了。

之后我们就可以和编译普通Java开发的Android应用一样编译Scala代码,使用这种配置,你可以任意混合使用scala 和 Java 语言,当然你不能在同一个文件中混合使用,如有Scala代码存放在.scala文件中,所有java代码还是存放在.java文件中,在github的项目中,有两个实例的.java文件 ExampleActivity.java 和 SignInActivity.java .我们把它们先修改成scala代码

1import android.app.Activity
2import android.os.Bundle
3 
4class ExampleActivity extends Activity {
5 
6  override def onCreate(savedInstanceState: Bundle) {
7    super.onCreate(savedInstanceState)
8    // The activity is being created.
9  }
10 
11  protected override def onStart() {
12    super.onStart()
13    // The activity is about to become visible.
14  }
15 
16  protected override def onResume() {
17    super.onResume()
18    // The activity has become visible (it is now "resumed").
19  }
20 
21  protected override def onPause() {
22    super.onPause()
23    // Another activity is taking focus (this activity is about to be "paused").
24  }
25 
26  protected override def onStop() {
27    super.onStop()
28    // The activity is no longer visible (it is now "stopped")
29  }
30 
31  protected override def onDestroy() {
32    super.onDestroy()
33    // The activity is about to be destroyed.
34  }
35}

其实这两个文件ApiDemos并没有用到它们,我们正好可以用它们来测试下Scala的开发环境是否配置好,编译这个项目,如果你在编译后的目录out/production/ApiDemos找到 ExampleActive.class 说明IDE编译Scala代码成功了。
20141001007

最后项目可以在github.com 下载 https://github.com/guidebee/ApiDemos

第3.4章 机器人第三方库实战总结(四):G2O优化库从入门到实战(附SLAM实例代码) 自定义边同样是满足复杂应用需求的重要手段。自定义边时,需要明确边所连接的顶点类型以及边所表示的误差项的计算方式。假设我们要定义一条边,用于约束两个上述自定义顶点之间的相对位姿和传感器偏移量关系。我们可以这样定义边类:public:// 计算误差// 计算雅可比矩阵// 读盘和存盘函数,这里暂不实现。 阅读详情

相关推荐

DELPHI11 利用Android手机实现条码扫描功能

好了,整个过程全部结束,当然这只是最简单的例子,只是演示一下如何识别条码,更多的条码处理功能,比如优化,提速等需要在后面继续。安装过程中所有提示框全部按OK就可以,直到提示安装成功,那么ZXing库就成功完成了安装。点击红框标识的文件夹图标,将下载的ZXing库文件路径加入进来后,点ADD。第三步:选择下载的ZXing库路径,并按Ctrl + A进行全选,并导入。至此为止,我们的库才算是全部安装完成,可以在DELPHI 中正常引用了。2.打开相机,识别条码,并将条码内容显示在MEMO1中。

1529

Spark的Java和Scala API的使用

Spark的Java和Scala API的使用 实验环境 Linux Ubuntu 16.04 前提条件: Java 运行环境部署完成 Spark Local模式部署完成 上述前提条件,我们已经为你准备就绪了。 实验内容 在上述前提条件下,完成Spark中Scala和Java API的使用 实验步骤 1.点击"命令行终端",打开新窗口 2.启动Scala的Shell 在命令行终端中输入下面的命令即可启动Scala Shell 启动后终端显示如下: 如上出现了 Scala>表明进入了Sc..

无心 696

AppFlow实战:零代码将Dify接入企业微信的完整指南

本文提供了一份零代码将Dify AI应用接入企业微信的完整实战指南。通过使用阿里云AppFlow作为无代码连接器,详细讲解了从获取Dify API密钥、创建企业微信应用到配置自动化流程的全过程,帮助团队快速将AI能力无缝融入日常协作,大幅提升工作效率。

php55的博客 808

简化基于Scala的Web API开发

虽然说使用 Scala 语言的语法来写 SpringBoot 微服务已经可以让 Scala 开发者们兴奋不已了,但说实话,这并没有很大程度上发挥二者各自的最大威力。

unber的博客 1005

Isaac Sim 车辆动力学:从参数调优到户外仿真的挑战与实战

本文深入探讨了Isaac Sim在车辆动力学仿真中的应用,从参数调优到户外场景模拟的实战经验。详细解析了悬架系统、轮胎物理模型等核心参数的设置技巧,并分享了应对户外仿真挑战的实用方案。通过Vehicle Wizard高级使用和传感器配置,帮助开发者高效完成车辆仿真与算法开发。

weixin_29192211的博客 404

Hexo博客使用PDF.js

clone了一个pdf.js 然后兴高采烈地到文章里使用{% pdf %}标签 结果浏览器弹出了个下载框(使用GitHub的raw) 不知道是不是因为使用GitHub的原因导致这个问题 后来我测试的时候报了个错 优快云上的解决方法 到时候我再试试把资源放回lib/里面看看行不行 目录1.clone1.1.官方方法1.2.NexT主题方法1.3.补充2.修改文件2.1.修改viewer.htm...

LTFan 961

scala调用java api

1.看一个socket实例,直接调用java api即可 Executors.newFixedThreadPool(poolSize)      * Creates a thread pool that reuses a fixed number of threads      * operating off a shared unbounded queue.  At any point,

u013571243的专栏 1921

企查查爬取实战

实战成果完成接口定位、抓包参数拆解、签名逆向、报错修复全流程调试,梳理出企查查多层风控逻辑;最终按照搜索分页规则,规范整理出两页共 20 条结构化企业数据,以标准 JSON 格式本地保存,字段完整、数据排版规范。现存局限平台顶层设备指纹与人机验证风控,纯 requests 网络请求模式无法突破;高频请求还存在账号限流、IP 访问限制风险,爬虫稳定性受平台策略影响较大。技术收获。

czr2026的博客 1127

26_Scala集合常用API汇总

类比tail同理,init也可以迭代操作list_las.inits.inits //逐步的往前获取元素作者认为元素是一个一个添加的,所以真个集合来说,当最后一个元素进行添加操作,前面所有的元素相对于最终的集合为初始(init)集合;//此处这样理解学习语言时候,跟着作者思路思考是一种非常有效的学习方法;scala作者设计的方法有些是根据单词意思设计,有些是根据逻辑设计。

m0_52474839的博客 2502

【Bug已解决】Codex Desktop 报错 Computer Use 插件不可用的解决方案

方案适用场景推荐指数让 Codex 自查修复首选的快速尝试方式⭐⭐⭐⭐⭐清理插件缓存重启明确怀疑是本地缓存损坏⭐⭐⭐⭐彻底卸载重装前两个方案无效时的进阶方案⭐⭐⭐⭐检查安全软件拦截企业电脑/装有严格安全软件的环境⭐⭐⭐确认账号权限范围排除功能本身未开放的可能性⭐⭐⭐Codex Desktop 报Computer Use 插件不可用的本质是客户端内置的插件资源在本地未被正确解包或注册到插件市场索引中,而不是真的缺少安装包。优先尝试让 Codex 自身检测并修复本地插件环境。

一键难忘的博客 5977

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 207

scala 常用API及示例代码

一、数组的常用操作 定长数组 操作 说明 :+ 在数组的最右边增加元素 +: 在数组的最左边增加元素 ++ 拼接两个数组,并返回一个新的数组 ++= 拼接两个数组 mkString(str) 将数组转成字符,按照 指定的 “str” 进行拼接 length/size 获取数组的大小(长度) sum 求数组元素的总和(仅对数值型数组有效) head 获取第...

Java_Road_Far的博客 595

DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密

DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ​。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。

weixin_43199439的博客 2095

构造Scala开发环境并创建ApiDemos演示样例项目

从2011年開始写Android ApiDemos 以来。Android的版本号也更新了非常多,眼下的版本号已经是4.04。ApiDemos中的样例也添加了不少,有必要更新Android ApiDemo演示样例解析系列文章(当然之前的文章还是实用的,依旧能够作为參考)。为了不反复之前的内容,我们准备使用Scala语言开发Android应用,随着样例的逐步解析,我们会把ApiDemos...

aofan9566的博客 119

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Scala开发环境配置与ApiDemos项目实战指南

Scala作为一门结合面向对象与函数式编程的JVM语言,凭借其强大的类型系统和简洁的语法,在数据工程和微服务开发中越来越受欢迎。其核心原理在于通过编译器优化和JVM生态的无缝集成,实现高性能与开发效率的平衡。特别是在金融科技和分布式系统领域,Scala的类型安全特性能够显著减少运行时错误。本文以IntelliJ IDEA和SBT构建工具为基础,详细介绍了如何配置高效的Scala开发环境,包括JDK版本选择、SBT镜像加速等实用技巧。通过ApiDemos项目实战,展示了如何快速构建RESTful接口和数据处理

weixin_34080571的博客 357

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Scala开发环境搭建与IntelliJ项目配置实战

Scala作为运行在JVM上的多范式编程语言,兼具面向对象与函数式编程特性,特别适合构建高并发分布式系统。其强大的类型系统和表达式特性,能够显著提升开发效率并降低运行时错误。通过sbt构建工具和IntelliJ IDEA开发环境的配合,开发者可以快速搭建企业级Scala项目。本文以金融科技领域实践为例,详细演示如何配置JDK 11/17运行环境、优化sbt构建速度,并创建包含Akka HTTP的REST API项目。针对国内开发者特别提供了镜像源配置方案,解决依赖下载慢的痛点,同时分享生产环境中验证过的性能

weixin_34110749的博客 389

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

手把手教你搭建Scala开发环境 步骤详细

手把手教你安装scala 搭建scala开发环境,多图详细步骤记录,保证一看就会!!!

春和的博客 8547

简单的scala请求接口(sbt)

简单的scala请求接口 参考:https://github.com/com-lihaoyi/requests-scala/ 导入依赖 libraryDependencies ++= Seq("com.lihaoyi" %% "requests" % "0.6.5","com.typesafe.play" % "play-json_2.11" % "2.4.3") 请求 package demo import com.alibaba.fastjson._ object Demo extends

weixin_43486817的博客 625

在Android中使用scala编程(-)

ScalaActivity.scala package com.example import android.app.Activity import android.os.Bundle import android.view.View import android.

daaoke的专栏 4616

IDEA出现no scala sdk in module intellij idea

IDEA出现no scala sdk in module intellij idea 在IDEA maven项目里的Global Libraries里没有Scala SDK 如图: 解决办法: 在setting -> Plugins -> 搜索Scala,点击安装即可(在IDEA里线上安装可能有点慢,可以自己线下在Scala官网‘https://www.scala-lang.org/download/‘安装好) 因为我已经安装了所以显示已安装 如果安装好没有还没有显示,重新启动一次IDEA就

weixin_43750611的博客 5095

NO Scala sdk module

打开模块设置 添加scala sdk

i_m_jack的博客 1092

intelliJ IDEA始终提示no Scala SDK in module解决方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34249678的博客 9169

android studio scala插件,在Android Studio中使用Scala和Java

我在Android Studio 1.2.2中安装了1.5.2 Scala插件。 我有一个用Java编码的现有(运行)项目。 我在Scala中添加了一个简单的类来替换现有的Java类,只是为了尝试它。 IDE似乎validation了Scala代码,但是Java代码对类的引用尚未解析。 我不知道为什么。 我已经成功地在这个项目的服务器端混合了SBT下的语言。Java代码引用如下所示:packag...

weixin_30199703的博客 422
上一篇: 一个使用sbt编译的JNI C++ 的模板
下一篇: Play Framework Web开发教程(33): 结构化页面-组合使用模板
引路蜂
博客等级 码龄16年 3122粉丝 711原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值