C# Xamarin For Android移动开发基础实战演练

C#语言入门、xamarin基础、.NET MAUI全栈开发技术综合笔记 自学c#笔记 阅读详情

一、课程介绍

英文原文:C# is the best language for mobile app development. Anything you can do in Objective-C, Swift or Java, you can do in C#。

中文译意:C#是移动应用程序开发的最佳语言。 在Objective-C,Swift或Java中你可以做的任何事情,你都可以在C#中完成。

1)、本次分享课程适合人群如下:

1、 热爱Xamarin跨平台移动开发。

2、进一步了解和学习Xamarin For Android移动开发基础知识。

Xamarin主要有这么几项技术,Xamarin.Android、Xamarin.iOS和Xamarin.Forms,此外还有Xamarin.UWP、Xamarin.Windows、Xamarin.WinPhone等。本次阿笨的分享课程是 Xamarin.Android系列,希望大家要看清楚课程教学重点和覆盖内容。

2)、本次分享课程包含以下干货知识点:

1、BIOS如何开启Virtual Technology虚拟化技术

2、Android手机(魅蓝NOTE 3)如何开启开发者调试

3、如何快速上手通过Xamarin 创建移动Android App应用程序。

4、Android介绍以及SDK、版本。

5、Android ADB常用命令介绍

6、Android常用几种权限(Permission)

7、Android生命周期

8、Android四大组件

9、Android六大布局(Layout)

10、Android五大存储(Storage)

11、Android文件操作(File)

12、Android学习之Intent使用

13、Android页面跳转以及传值(Activity)

14、Android学习之广播使用(Broadcast)

3)、本次分享课程最终目标:

希望学完本次分享课程后能够对Xamarin For Android开发有一定的了解和掌握,从而减少大家的学习成本!

如果您同样对本次分享课程 《C# Xamarin移动开发基础进修篇》感兴趣的话,那么请跟着阿笨一起学习吧!

废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。

二、概念名称含义解释

2.1、Mono介绍

Mono是一个由Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。与微软的.NET Framework(共通语言运行平台)不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris,甚至一些游戏平台。

一句话:Mono一个致力于开创.NET在Linux上使用的开源工程。它包含了一个C#语言的编译器,能够使得开发人员在Linux用C#开发程序。

2.2、Xamarin 简介和工作原理

1)、Xamarin 简介

考虑如何生成 iOS 和 Android 应用程序时,许多用户都认为本机语言、Objective-C、Swift 和 Java 是唯一的选择。Xamarin 它的目标是用C#开发iOS、Android和Windows Phone原生应用程序。

Xamarin.Android 为 .NET 开发人员提供了完整的 Android SDK。 在 Visual Studio 中使用 C# 或 F# 生成完全本机的 Android 应用。

Xamarin.iOS 为 .NET 开发人员提供了完整的 iOS SDK。 在 Visual Studio 中使用 C# 或 F# 生成完全本机的 iOS 应用。

Xamarin.Mac 为 .NET 开发人员提供了完整的 macOS SDK。 在 Visual Studio for Mac 中生成完全的本机应用。

Xamarin.Forms 是一个跨平台 UI 工具包,允许开发人员有效创建可跨 iOS、Android、Windows Phone、通用 Windows 平台应用共享的本机用户界面布局。

2)、Xamarin工作原理

Android应用程序会被编译为IL代码,启动时再进行JIT编译(动态编译),发布程序的时候会包含一个mono runtime。

而iOS则是直接通过AOT编译(静态编译)为ARM汇编代码。具体见:http://xamarin.com/how-it-works

2.3、Xamarin Studio介绍

Xamarin Studio是一个用C#语言开发跨平台应用的集成开发环境,它和iOS以及AndroidSDK紧密整合。开发者可以使用Xamarin Studio在模拟器和真机上对移动应用进行测试和bug调试。Xamarin Studio能够完美支持Windows和Mac!

2.4、Visual Studio Tools for Xamarin介绍

自从微软收购了 Xamarin 团队后,将Xamarin Studio整合到了Visual Studio中了,可以说是给我们C#开发者带来了极大的福利。微软终于收购了跨平台移动开发公司Xamarin。至于收购金额并未得到公布。微软云端与企业部门执行副总裁Scot Guthrie在博客中指出,Xamarin将联合Visual Studio为客户提供丰富的移动开发产品,开发者将能使用C#开发移动软件并向所有主要移动平台推送全原生态的移动软件。

由于微软2016年2月正式收购了Xamarin,并将Xamarin内置到了VS2015 Update2中(Xamarin被微软收购后,从2016年5月开始,Xamarin for VS已经变为全部免费并开源了),因此2016年6月发布的Xamarin for VS 4.1.0.530不再需要破解,也不再需要单独的账号,直接安装或者升级就是企业版了。

三、Xamarin  App移动开发环境和工具

3.1工欲善其事,必先利其器

工欲善其事,必先利其器是说:工匠想要使他的工作做好,一定要先让工具锋利。比喻要做好一件事,准备工作非常重要。我们不使用vs2015,我们不使用VS自带微软提供给我们的移动设备模拟器,我们不使用第三方移动设备模拟器比如:genymotion等等。大家时间都是宝贵的,把有限的时间投入到无限的工作中上。这里阿笨不陪大家折腾了,我们直接上真机真环境上开启我们的Xamarin For Android

C#使用xamarin进行跨平台开发 Xamarin.Forms 提供了一种跨平台的方式来定义 UI,而 Xamarin.Native 允许你在每个平台上直接使用本机 UI 组件。使用 Xamarin 进行跨平台开发可以使用 C# 和 .NET 平台来开发移动应用程序,同时将代码在多个主要移动操作系统上运行,包括 Android 和 iOS。无论是开发 Android 应用还是 iOS 应用,使用 Xamarin 可以最大限度地重用代码,加快开发速度,并确保在多个平台上提供一致的用户体验。一旦你满意应用程序的功能和性能,你可以准备发布应用。 阅读详情

相关推荐

C# Xamarin For Android移动开发项目实战篇

一、课程介绍 在前面阿笨的《C# Xamarin移动开发基础进修篇》课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理。本次分享课《C# Xamarin移动开发项目实战篇》,阿笨将直接带领大家进入Xamarin for android的实战项目环节,真真体验一下xamarin开发的魅力吧。 由于阿笨学习Xamarin也是“半路出家”,“赶鸭子上架”的状态,视频教学中关于...

跟着阿笨一起玩NET 1万+

Xamarin.Forms 跨平台移动应用开发实战:C# 的移动之旅

是一个 UI 框架,它提供了跨平台的界面布局和控件,使得开发者能够用相同的代码实现多个平台的用户界面。与 Xamarin.Native(即使用 Xamarin.Android 和 Xamarin.iOS 分别开发的方式)不同,Xamarin.Forms 提供了一种更加统一的解决方案,使得开发者不需要为每个平台编写不同的 UI 代码。通过使用C#和XAML来创建用户界面。利用共享代码库实现跨平台的业务逻辑。访问 Android 和 iOS 的原生 API,并使用平台特定的功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1445

【技术贴】聊聊ArcGIS Runtime for Xamarin

聊聊ArcGIS Runtime for Xamrin ArcGIS Runtime forXamarin是 Runtime Quartz系列的新成员,至此Quart系列拥有了7个产品,今天要聊ArcGIS Runtime SDK for Xamarin就必须先提一下 Xamarin,对于Xamarin 他的读法是 [zæmərɪn],可能很多人对他都很陌生,不知道是做什么,怎么会和ArcGIS

ArcGIS产品与技术专栏 5500

C#开发Android应用程序——创建第一个应用程序——Hello World

从创建新项目开始,设计用户界面,编写代码逻辑,最后构建和调试应用程序。在本文中,我们将探讨使用C#语言开发Android应用程序的基本步骤。我们将从创建第一个应用程序开始,并在屏幕上显示"Hello World"。在解决方案资源管理器中找到名为"MainPage.xaml.cs"的文件,并双击打开它。在C#代码文件中,我们可以编写与用户界面相关的代码逻辑。现在,您可以通过选择工具栏上的“运行”按钮来构建和调试您的应用程序。一旦您准备好了这些工具,我们就可以开始创建我们的第一个应用程序了。

HackDashX的博客 4179

C#使用Xamarin进行Android移动开发项目

通过上述步骤,我们已经成功使用C#和Xamarin创建了一个简单的Android移动开发项目。使用Xamarin,我们可以复用大部分代码,并在多个平台上构建高性能和功能强大的移动应用程序。在移动应用的开发领域中,C#语言结合Xamarin框架为开发人员提供了一种强大和高效的方式来构建跨平台的移动应用。在完成用户界面的设计后,我们可以开始编写C#代码来实现应用程序的逻辑。方法获取到了布局文件中定义的控件,然后通过设置按钮的点击事件,在按钮被点击时更新文本视图的文本。在上述代码中,我们通过。

2301_79365003的博客 1572

C# Xamarin 和跨平台移动开发

Xamarin 是一款跨平台的移动应用开发框架,它允许开发者使用 C# 语言编写代码,并共享大部分业务逻辑和用户界面代码,同时还能编译成原生的 iOS 和 Android 应用。简单来说,你可以用一套代码库开发出运行在不同平台上的应用!通过这篇文章,我们不仅了解了 Xamarin 的基础知识,还动手创建了一个简单的跨平台应用。Xamarin 是一个非常强大的工具,可以帮助你快速构建高质量的移动应用,而且只需要掌握一种语言——C#。如果你对 Xamarin 感兴趣,建议你继续探索更多的功能和案例。

java专栏 3107

Xamarin体验:使用C#开发iOS/Android应用

假设已经安装好Xamarin Studio,那么也一样直接安装Xamarin.iOS即可,然后就可以直接通过Xamarin Studio直接开发调试iOS应用程序了。安装之前需要你的电脑上已经安装Virtual Box(目前最新版为4.3.2),不过我发现我安装了Virtual Box 4.3.2的情况下GenyMotion无法启动,所以后来又换成官方推荐的4.2.12,从。安装好JDK及androidSDK之后,再安装Xamarin.Android,会让你选择是否安装Visual Studio插件。

liuyuehui的专栏 1295

C#开发Android应用实战教程

Android允许开发者通过继承现有的控件类来创建自定义控件。自定义控件可以重写父类的方法来提供新的行为或外观。布局也可以自定义。通过创建一个新的布局文件,并在其中定义新的控件和布局结构,开发者可以实现界面的自定义。对象关系映射(ORM)框架可以简化数据访问层的开发。Entity Framework(EF)是.NET领域最流行的ORM框架之一,它支持数据的查询、更新、插入和删除操作,并将数据模型转换为数据库中对应的表。

weixin_42360733的博客 1744

Android平台上使用Xamarin和C#的界面开发项目

TabLayout和ViewPager支持自定义标签页的样式和动画效果,从而提升用户体验。例如,可以设置标签的背景色、文字颜色、选中状态样式以及滑动动画等。// 自定义Tab的布局<TextView-- 可以在这里添加更多的自定义视图 -->使用自定义布局为TabLayout添加动画效果,可以利用接口。@Override// 选中时的动画效果@Override// 取消选中时的动画效果@Override// 重新选中时的动画效果});在上述代码中,通过覆写和。

weixin_31315007的博客 1166

Xamarin Android项目深入解析与实践

在本章中,我们将介绍Xamarin跨平台移动开发框架,它是微软推出的一个用于创建原生移动应用的平台,支持使用C#编程语言进行开发,能够生成在iOS、Android和Windows平台上的应用。Xamarin的核心特点包括对原生用户界面的支持、共享的代码基础以及强大的开发工具链。

weixin_30205153的博客 948

C#开发Android应用实战——使用Mono for Android和.NETC#.rar

C#开发Android应用实战——使用Mono for Android和.NETC#.rar

【数据挖掘】遗传算法原理浅析:什么是遗传算法?遗传算法的工作原理是什么?

遗传算法(Genetic Algorithm,GA),是进化算法的框架和核心。 各种进化算法有什么异同? - 及时物语的回答 - 知乎 https://www.zhihu.com/question/39152390/answer/901070749

纸羊同学的博客 4277

量化投资从0开始系列 ---- 15. 郑商所日统计数据

前面已经提取了其它期货交易所的数据,最后还剩下郑商所。相比而言,郑商所的数据获取比其它几个交易所更麻烦一点。因为郑商所的系统接口有两个,在2015年11月11日前后发生了切换,这个日期之前是老系统的api接口,这个日期之后是一个新的api接口。 具体的地址在哪里,还是依靠在浏览器中按F12来确定,最后发现的地址是: if trade_date > '20151111': czce_url = f'http://www.czce.com.cn/cn/DFSS

kengxie的博客 2113

单神经元PID控制:从Hebb到Delta,四种学习规则在MATLAB里到底怎么选?

本文深入探讨了单神经元PID控制算法在MATLAB中的四种学习规则(无监督Hebb、有监督Delta、有监督Hebb及改进Hebb)的实战对比与选型指南。通过详细的仿真实验和性能指标分析,为工程师提供了基于实际工程考量的选型建议和参数整定技巧,帮助优化复杂非线性系统的控制效果。

weixin_31220401的博客 283

基于cat12搞定SBM的ROI的统计分析——vertex水平和ROI水平的双样本T检验

前言 一、Atlas皮层图谱介绍 二、SBM分析——主要以皮层四种常用指标中的厚度(thickness)和沟深(depth)为主

Sophia2023的博客 8753

智能车竞赛模糊PID代码与使用方法

本文给出了模糊PID的代码,以及模糊PID的程序使用方法、参数调整方法

piginthesouth的博客 9123

安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案

本文主要介绍了安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案,希望能对使用Windows WSL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

2025年新发表的语音大模型全双工模型/框架/技术

参考该论文,给出2025年新发表的全双工模型或框架或技术下面这份清单专挑、且与“全双工语音对话/同步对话(边听边说、可打断、回馈/相槌、重叠语音)”直接相关的。我也结合你提到的的四大维度(暂停处理、相槌、顺滑换手、打断管理)来点出它们各自的贡献点,便于后续评测与对比。

u013250861的博客 630

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2731

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深度学习工具包 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")

上一篇: C#命名规则和编码规范
下一篇: C#轻量级高性能日志组件EasyLogger
跟着阿笨一起玩NET
博客等级 码龄9年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值