Android Studio 设置 buildConfigField 点击 sync now 无效

Android天气应用开发:从零搭建MVVM架构与Jetpack Compose实战 在移动应用开发领域,架构设计与技术选型是决定项目成败的关键基础。MVVM(Model-View-ViewModel)架构模式通过清晰的关注点分离,实现了数据驱动UI的核心原理,显著提升了代码的可测试性与可维护性。结合Kotlin协程的异步处理能力,能够优雅地管理数据流与状态。这种技术组合在现代Android开发中展现出巨大价值,尤其适用于数据实时更新、UI状态复杂的应用场景,例如天气类应用。本文以构建一个Android天气APP为例,系统阐述如何运用Jetpack Compose这一声明式UI框架与MVVM 阅读详情

一、代码

buildConfigField("boolean","LOG_DEBUG","true")

二、问题

点击 sync now 无效。

三、解决

点击 Build —> Rebuild Rroject。

Android AAR包生成与使用全攻略:从模块化到团队协作 在Android开发中,模块化是提升代码复用和团队协作效率的核心实践。其基本原理是将功能封装成独立模块,通过依赖管理实现解耦。这种技术能显著提升项目的可维护性和构建速度,是现代工程架构的重要组成。从技术价值看,模块化不仅减少了代码重复,更便于团队并行开发和持续集成。在实际应用场景中,Android Archive(AAR)作为Android库的标准发布格式,成为模块化落地的关键载体。AAR包相比传统JAR包含了代码、资源、清单等完整组件,特别适合封装UI组件、网络SDK等共享功能。本文聚焦AAR的完整工作流 阅读详情

相关推荐

基于Kotlin与Jetpack Compose的天气应用开发全流程解析

在现代移动应用开发中,MVVM架构模式与声明式UI框架已成为构建健壮、可维护应用的核心范式。MVVM通过清晰的关注点分离,将数据逻辑、业务规则与用户界面解耦,而Jetpack Compose作为Android官方推荐的声明式UI工具包,极大地简化了UI开发与状态管理。其技术价值在于提升了开发效率、增强了代码可测试性,并优化了应用性能。结合Kotlin协程与Flow处理异步数据流,以及Retrofit进行网络请求、Room实现本地缓存,能够构建出响应迅速、体验流畅的现代化应用。这类技术组合尤其适用于需要实时数

weixin_30591551的博客 422

Android Studio开发物联网App:从ThingSpeak数据获取到移动端展示

物联网应用开发的核心在于实现设备、云端与移动端的数据互联。其基本原理是通过RESTful API进行网络通信,云端平台负责数据汇聚与存储,移动端则通过HTTP请求获取并解析JSON格式数据,最终实现可视化展示。这一技术架构的价值在于打通了物理世界与数字世界的桥梁,使得远程监控、环境监测等场景成为可能。在工程实践中,开发者常使用Android Studio进行原生应用开发,通过集成Retrofit等网络库高效处理API请求,并利用LiveData管理UI状态。本文以流行的ThingSpeak物联网平台为例,详

weixin_33859231的博客 395

Spring AI Alibaba Skill 实战:定义、注册与渐进式披露的企业级落地

摘要:很多团队在接入大模型时,第一步做到的是“能对话”,第二步遇到的瓶颈却是“不能可靠执行”。Skill 的本质不是给模型多几个函数,而是把企业系统中的可控能力,以可治理、可审计、可扩展的方式交给 Agent。本文围绕 Spring AI Alibaba Skill 的定义、注册与渐进式披露,结合电商客服与售后场景,系统讲清楚其底层原理、架构设计、生产级实现、高并发治理与工程实践。@Component@Tool(description = "根据订单号查询订单状态、支付状态和物流状态")扫描包含。

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 623

【Gradle同步】AndroidStudio中Gradle Sync菜单,Sync Now的终端命令

问题描述: 我们在修改build.gradle后,会弹出gradle同步按钮“Sync Now”,点击现在同步,如下图: 但现在的项目基本都会采用组件化架构,gradle的配置会统一管理,如 ext 、buildSrc、composing builds等方式。 在修改配置后,需要将项目同步,在项目已经build构建过一次后,再次build可能会出现修改依赖版本号无法同步更新。这时需要手动去修改build.gradle一下,使得自动弹出如上图的按钮 “Sync Now”进行同步。 以上操作略显麻烦

qq893182474的博客 2万+

吉林大学软件工程章节测验 第九章 答案+解析

4.【判断题】估算软件规模有代码行技术和功能点技术两种方法,其中代码行方法估计实现一个功能所需要的源程序行数,其不依赖项目所使用的开发语言,并且具有较好的直观性。3.【单选题】软件项目估算时,若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出功能点估计值,记作a, m, b,则估算的期望值E的公式为( )。8.【判断题】在工程网络图中,如果在由起始事件至终止事件所构成的一条路径上,所有事件的最早时刻都和最迟时刻都相同,那么这条路径就是关键路径。4.【单选题】配置管理贯穿软件开发的整个过程。

m0_51459931的博客 1430

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

liang007dudu的博客 1万+

添加开关库 Android Studio

在 Android Studio 2022.3 版本中,"Sync Now" 按钮已经被重命名为 "Sync Project with Gradle Files" 按钮,该按钮通常出现在编辑器界面的右上方,具体位置可能会因为布局变化而略微不同。这样,Android Studio 就会自动下载并安装你在 build.gradle 文件中添加的库。完成依赖项同步后,你应该能够在项目中使用该库了。3. 单击 "Sync Project with Gradle Files" 按钮,该按钮通常位于操作栏的右上方。

m0_72716610的博客 1923

【论文复现】自动化细胞核分割与特征分析

HoVer-Net是一种精心设计的多分支深度学习网络架构,专为处理复杂的多组织显微图像中的细胞核实例分割与精确分类任务而开发。该网络通过创新的策略,不仅有效解决了细胞核在密集聚集区域难以准确区分的问题,还实现了对每个独立细胞核类型的细致分类。此外,HoVer-Net还引入了专门的上采样分支,这一设计旨在对每个成功分割出的细胞核实例进行进一步的核类型分类。这一分支利用高级语义信息,结合精心设计的分类策略,能够准确判断每个细胞核的所属类型,为医学研究提供了宝贵的细胞水平信息。

2201_75366661的博客 1978

【Android】解决 AndroidStudio 中 gradle 的 buildTypes 配置不生效问题

在开发过程中,我们喜欢把开发和现网坏境的配置区别开,比如IP、端口等。gradle也很好地给我们提供了buildTypes的功能,如下所示: buildTypes { debug { buildConfigField "String", "httpServerIp", "\"10.10.19.15\"" buildConfigField "String",...

weixin_33894992的博客 1131

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 160

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1367

Android Studio3.0 Gradle相关配置

基于Android Studio3.0 提供demo:https://github.com/hacjy/GradleConfigDemo 1、依赖库的统一管理配置 -创建config.gradle 关键字ext -如何使用:首先,在工程的build.gradle中导入该配置文件:apply from:”config.gradle”; 然后,使用rootProject对象调用,如rootP...

hacjy 616

YOLOv8改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块,我们将其用于C2f中组合出一种新的结构,来替换我们网络中的模块可以达到一种轻量化的作用,我将其用于我的数据集上实验,包括多个类别的数据集,其在轻量网络结构的同时,却能够提高一定的mAP精度,所以这是一种十分高效的模块,该网络结构非常适合那些模型精度已经无法提到,想要从轻量化模型的角度入手的读者使用。欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。

Snu77的博客 6094

Android版本更新踩坑,Android Studio 3.0升级后踩到的坑

最近升级了Android Studio 3.1.2,还没沉浸在欢乐中,就当头一棒,更新项目没事,但是运行项目就报错。错误信息如下:Caused by: org.gradle.tooling.BuildException: Warnings found during shrinking, please use -dontwarn or -ignorewarnings to suppress them...

weixin_32943417的博客 472

Vue3 - Element Plus 全局修改更换主题色配置详细教程,element-plus自定义主题色全局替换主色调强力解决方案,支持动态修改主题颜色/动态皮肤,将默认蓝色主题色更换为其他颜色!

vue3,nuxt3,element-plus,组件库,主题色,修改主题颜色,更换主题色,如何修改组件默认主题蓝色,项目主题色定制,修改失败,主题色覆盖不了,:root直接修改,hover颜色没改,自定义主题色,vue3全局设置elementPlus主题色最新详细修改教程,怎么修改全局的颜色,scss变量,覆盖原来的主题色改为自己的颜色,统一替换,有没有好办法,颜色不变,失败,无效,动态主题切换,主题颜色怎么在项目里直接改,plus主题色更换,覆盖默认主题色,最强最好用,设置主题色,换肤,皮肤,动态更换

🏆 前端领域优质创作者 1万+

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

Android天气APP开发:从零开始的开发准备与核心依赖选型

在移动应用开发中,网络请求、数据解析和UI绘制是构建功能完整应用的基础技术。理解这些概念的工作原理,例如通过Retrofit处理HTTP请求、协程管理异步任务,能够显著提升应用的响应性和稳定性。这些技术的工程价值在于它们提供了高效、可维护的解决方案,广泛应用于需要实时数据交互的场景,如新闻、电商和社交应用。本文聚焦于Android天气APP的开发准备,系统介绍了开发环境配置、项目结构规划以及关键依赖库的选型,其中Retrofit和协程的合理使用是确保项目顺利启动的核心。通过对比主流天气API,如和风天气,并

weixin_33859844的博客 423

假人有限元模型

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

Android应用基础信息修改与多环境打包实战指南

在Android应用开发与维护中,应用基础信息配置与多环境管理是至关重要的工程实践。从概念上讲,包名(applicationId)是Android应用的唯一身份标识,它决定了应用在系统中的唯一性,而应用名称、图标和启动页则构成了用户对应用的直接视觉认知。其原理在于通过Gradle构建系统对构建变体(Build Variants)和产品风味(Product Flavors)的灵活配置,实现一套代码对不同环境(如开发、测试、生产)的差异化打包。这项技术的核心价值在于提升开发效率、保证各环境隔离性,并实现应用标识

weixin_34101229的博客 423

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android Studio 导入/删除/新建库的模块(第三方项目) - Module

Module

彬sir哥的博客 4998

android studio NDK源码开发,cpp文件点Sync Now没有用,代码加载不进去,std爆红引入文件路径不对

Please include it in the appropriate build file(build.gradle,CMakeLists.txt or Android 这个问题,先参考下这一篇:https://blog.youkuaiyun.com/qq_24712507/article/details/115296076 (不是给自己引流哈,不太喜欢做重复工作) 如果解决不了,删除这四个文件夹: Build -> Rebuild Project (最好不要选Make Project) 这

迷彩狼的博客 1622

Android Studio中如何自定义Android BuildConfig配置文件

一个project会有多个app,不同module中都要配置compileSdkVersion、buildToolsVersion等变量值,这时候每个app中的compile工程如果不能统一,在以后升级里会很麻烦,所以我们要把这些公共的配置项称为共享变量。 步骤: 1、在项目的根目录下定义了一个build_config.gradle的配置文 config.gradle: configField 数...

皮卡丘的博客 1万+

[安卓开发] Android Studio导入SlidingMenu的两种方法(超详细)

方法1导入aar:顺道解析一下在android studio中,有两种方式: 一种是jar包,一种是带资源文件的aar包。 jar: 只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。 aar: 包含jar包和资源文件,如图片等所有res中的文件 SlidingMenu的aar下载地址:1、复制aar文件到app目录下的libs2、修改app的gradle打

KeepStudy 9336

Android Studio 1、改包名,2、改项目名,3、类中的所有同一个变量名/文件名统一改

android studio

彬sir哥的博客 4746

android buildConfigField使用

注意:特别是字符串的使用,需要使用 "\"xx\""上面的使用一开便知道如何使用,好了,又可以愉快玩耍了。

Alex老夫子的专栏 6006

android studio 自定义生成BuildConfig文件,形成打包配置

转自自定义生成BuildConfig文件 BuildConfig文件的位置:你的工程目录-build-generated-source-buildConfig-debug-包名-BuildConfig.java 我们知道这个是工具生成的文件我们并不能手动更改,我们如何去改变它呢? 第一步,打开我们module的Gradle 看到“我添加的这一栏”,我们先这样写,规则是 buildConfigField “String”,“testId”,“1234567” 分别表示 buildConfigField 默认

skyang在路上 7041

Android Studio因可用内存不足而sync失败

最近打开一个大工程,一直提示sync failed,但排查后发现不是因为gradle脚本等常见原因导致,最后发现是因为给as分配了4gb内存不足以运行这个工程的脚本导致。通过修改studio64.vmoptions配置文件,把xmx选项提高到16GB,重新打开该工程发现sync成功

轮子初级玩家 423
上一篇: Android Switch控件警告:Use SwitchCompat from AppCompat or SwitchMaterial from Material library
下一篇: Android res目录中支持的资源目录
Android Hai
博客等级 码龄7年 30粉丝 43原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android Hai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值