Android中如何关闭Log

Android源码 — 打开串口log 一般来说user版本是关闭串口log的,如果特需情况下要开启user版本的串口log,可以按照以下步骤: 1.开启lk阶段的log vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c @@ -1167,7 +1167,7 @@ int boot_linux_fdt(void *kernel, unsigned *tags, if (!has_set_p2u) { sw... 阅读详情

android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。根据首字母对应VERBOSE,

DEBUG,INFO, WARN,ERROR。

1、Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","");

2、Log.d的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.

3、Log.i的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息

4、Log.w的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。

5、Log.e为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。


      开发过程中在程序中有打了很多的log,以方便调试程序,当初项目组内每个人打log的方式也没有统一。项目结项正式发布程序时需要关闭log,删掉肯定不行,统一修改也挺麻烦的。今天在网上搜索了一下,找到了三种方法:

方法一:

在Application中设置一个全局的标记,例如:public static final boolean DEBUG=true;

if (DEBUG) {

    Log.d(LOG_TAG, "Something");

}

需要关闭log时,只需将DEBUG的值改为false。

该方法的缺点为:每次打log都需要添加if进行判断。


方法二:

在proguard.cfg文件中加入

-assumenosideeffects class android.util.Log {  

     public static *** d(...);  

     public static *** v(...);  

} 



方法三:

自动写一个日志类,以取代android.util.Log类:

import android.content.Context;

import android.util.Log;

import android.widget.Toast;


public class DebugUtil {

    public static final boolean DEBUG = true;

     

    public static void toast(Context context,String content) {

        Toast.makeText(context, content, Toast.LENGTH_SHORT).show();

    }

    

    public static void v(String tag,String msg) {

        if (DEBUG) {

            Log.v(tag, msg);

        }

    }

     

    public static void d(String tag,String msg) {

        if (DEBUG) {

            Log.d(tag, msg);

        }

    }

    

    public static void i(String tag,String msg) {

        if (DEBUG) {

            Log.i(tag, msg);

        }

    }

    

    public static void w(String tag,String msg) {

        if (DEBUG) {

            Log.w(tag, msg);

        }

    }

    

    public static void e(String tag,String msg) {

        if (DEBUG) {

            Log.e(tag, msg);

        }

    }    

}

需要import该类,使用的时候将以往的Log.d(**,**)变为DebugUtil.d(**,**)即可。

将DEBUG的值设为false时可以关闭所有log,假如需要开启w和e级别的log,只需将DebugUtil类对应w和e方法中的if语句去掉。

log压缩包包含很多android.log.txt,如何快速过滤camera问题时间点对应的一次完整的打开/关闭相机logat?log-file.sh 【代码】log分析。 阅读详情

相关推荐

android轻松管理安卓应用中的log日志 发布应用时log日志全部去掉的方法

android合理的管理log日志,在开发的时候打印出来,在发布的时候,把所有的log日志全部关掉,下面就把方法给你一一道来

android应用如何在发布市场时关掉所有的Log日志输出

平时我们在开发android应用时,会经常使用android.utils.Log类来打印日志。但到发布时,往往我们希望关闭Log输出。总不能一条条去注释去删除吧。下面推荐2个办法 直接点的,就是重新封装个Log类。然后设个开关。 public class MyLog{ public static final DEBUG = false; public static

daguaio_O的专栏 1万+

【论文翻译】Enhancing Channel Estimation in High Mobility OTFS Systems: A Novel Pilot-Based Method...

本文介绍了一种用于正交时频空间(OTFS)调制系统的新型基于导频的信道估计方法。我们提出的方法是在ZP-OTFS系统的零填充区域插入一行导频符号,具有减少开销和降低峰均功率比(PAPR)的显著优势。特别是,通过沿多普勒轴分布导频符号,我们的方法在高移动性场景下依然能够提供鲁棒且精确的信道估计,这是像TransPod这种时速超过1000 km/h的运输系统的一个典型特征。这一点至关重要,因为在此类场景下,多普勒频移可能会导致系统性能的严重退化。

Cuby的博客 1212

如何优雅关闭Android日志输出

背景 日常Android开发中,为了APP和用户安全考虑,经常需要关闭线上APP日志输出。对于我们自己开发维护的代码,我们可以通过自定义开关一键关闭。但一个项目往往会引入很多三方库,这些三方库中也时常会出现各种不规范、没有日志输出使能开关的情况。导致大量调试信息被三方劫持或查看。因此,我们需要赋予我们自有APP可以有效关闭这些三方库的日志输出的能力。 目的 赋予我们自有APP可以有效关闭其引入的三方库日志输出的能力。 关闭APP中任何没有输出使能开关配置的日志输出行为。 方案 当前方案采取Andr

weixin_42323898的博客 4993

一文详解心电图(ECG)监测原理

介绍心电图的监测原理,从心电信号产生、获取到心电图的基本组成

m0_50146396的博客 3287

整合WGCNA、机器学习和孟德尔随机化

(G)通过蛋白质免疫印迹法(Western blot)测定的 UT-B(由 SLC14A1 编码)、ARHGEF38、NEFH、MSMB、KRT23 和 KRT15 在前列腺癌肿瘤组织和癌旁非癌组织中的蛋白质表达水平。本研究利用来自基因表达综合数据库(GEO)的数据集筛选差异表达基因(DEGs),并采用加权基因共表达网络分析(WGCNA),以识别在模块中与前列腺癌高度相关的驱动基因。(F)蓝绿色模块中的模块成员关系(MM)与前列腺癌(PCa)的基因显著性(GS)的散点图。(D)6 个基因之间的相关性分析。

多组・学・多组学 1137

Android关闭日志输出

app上线前,有一项安全测试不合格 描述:在日志中可见大量动态调试信息。 安全建议:开发过程中应尽量避免在日志中输出敏感信息,上线前应及时去除不必要的日志输出。 这样是非常危险的!当我们签名后发布应用后如果没有关闭log的打印,那么安装app后连接as 或者 eclipse 等ide就会直接打印log,清晰可见,那么这款app就没有什么安全可言了,所以发布应用前关闭log是必须的! 网上查阅后做法...

weixin_37195726的博客 1724

手把手教你用S7-PLCSIM Advanced V3.0搭建PLC仿真测试环境(含WinPcap避坑指南)

本文详细介绍了如何使用西门子S7-PLCSIM Advanced V3.0搭建PLC仿真测试环境,包括WinPcap 4.1.3驱动的安装避坑指南。从环境准备、软件安装到配置调试,提供了一套完整的解决方案,帮助工程师和教学人员快速构建可靠的PLC仿真环境,解决常见的报错问题。

weixin_30879169的博客 641

【Android】在Release版本中如何关闭Debug版本中的log

之前在程序中有打了很多的log,当初打log的方式也没有统一,删掉肯定不行,统一修改也挺麻烦的。今天在stackoverflow上面看到有对这个的讨论 主要有以下三种方式关闭log信息http://stackoverflow.com/questions/2446248/deactivate-any-calls-to-log-before-publishing-are-there-tools-

YING 8008

转录因子详细介绍(motif)

转录因子详细介绍(motif) TF: transcription factor转录因子TFBS: transcription factor binding site转录因子结合位点TFBS是序列内的location,TF特异结合在这里,这个site有这种特点 1 和一些参考相关的一个位置(开始,结束,strand),这些reference可以是染色体开始,geneTSS。也可以是一段sequence 2 A SITE可以是实验证实的(已知的),也可以是一些算法(预测的) 3 例子,下面这个图是酵母

wangprince2017 3万+

HAL库硬件SPI驱动ST7735 TFT屏幕:从零实现高效刷屏与图形绘制

本文详细介绍了如何使用STM32的HAL库硬件SPI驱动ST7735 TFT屏幕,从硬件连接到SPI配置优化,再到图形绘制与文本显示的实现。重点分享了DMA传输、局部刷新等高级优化技巧,显著提升刷屏效率,帮助开发者快速掌握屏幕驱动技术并应用于实际项目。

pink的博客 741

android封装log设置开关,Android编程:Android应用打包release版时关闭log日志输出

本文主要介绍了Android编程中的Android应用打包release版时关闭log日志输出,希望对大家学习Android编程有所帮助。方法一:封装Log类可以自己封装一个Log类,可以实现条件判断,也可以设置输出的log级别。publicclassLogger{publicstaticintLOG_LEVEL=0;publicstaticintERROR=1;publ...

weixin_39670545的博客 1032

Vue和Vue-Element-Admin(六):集成中的CORS(跨域资源共享)问题

在vue-element-admin登录集成时候碰到跨域资源共享问题,CORS(Cross-origin resource sharing)是浏览器的技术规范,浏览器可以发起跨域请求但Javascript脚本不能,传统的ajax只能获取在同域名下的资源,但Html5允许ajax发起跨域请求,解决方案有:JSONP、Flash、IFrame、CORS。 一、CORS(跨域资源共享)问题 针对vue-element-admin的登录模块的后端接口完成后,前端调用时候出现报错,因为前端的端口是9527而后.

叶子叶来 9614

android Log打印怎么关闭

如何关闭Android Log打印 在Android开发过程中,我们经常会使用Log来打印调试信息。然而,在发布应用程序时,我们通常不希望将调试信息暴露给用户。因此,关闭Android Log打印是一个很重要的问题。在本文中,我们将讨论如何关闭Android Log打印,并提供一些示例代码帮助你解决这个问题。 问题描述 在...

weixin_36299472的博客 461

【DEIM创新改进】独家下采样创新改进篇 | ECCV 2026 | DEIM 引入FSD-Down频域-空间动态下采样,在下采样过程中保留小目标的高频信息、助力小目标检测、遥感小目标检测有效涨点

🔥本文提出了一种名为FSD-Down的频域-空间动态下采样模块,用于改进DEIM网络模型在小目标检测中的性能。FSD-Down通过小波分解显式保留低频语义和高频细节,结合分组卷积、动态通道权重和可学习缩放因子,自适应强化目标边缘与纹理特征。该模块能有效减轻传统下采样造成的频率混叠和细节丢失,提升对小目标、密集目标和低对比度目标的检测能力。实验表明,FSD-Down计算开销可控,在保持实时性的同时显著提升检测精度,特别是在VisDrone和AITODv2数据集上对小目标的检测性能提升显著。

Ai缝合怪、助力小伙伴高效发论文 82

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android 关闭Log日志

平时我们在开发Android应用时,会经常使用android.utils.Log类来打印日志。但到发布时,往往我们希望关闭Log输出。总不能一条条去注释去删除吧。下面推荐2个办法 直接点的,就是重新封装个Log类。然后设个开关。 [java] view plain copy public class MyLog{

Angus博客 7409

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

安卓自动化结合adb抓Log时,adb logcat的关闭问题

本文解决两个问题 1. 使用adb logcat时,如何通过命令行关闭 2. 使用appium结合python实现android自动化时,如何正确的抓取Log 背景:          目前一直在做安卓自动化的东西,主要是针对项目回归测试用例进行实现。由于设计的用例,所扑捉的问题都是已经预估到的,对于未知的导致用例异常的行为并未有很好的处理,所以尝试将adb logcat与自动化结

小小希 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Log android 如何关闭

日志系统相关视频讲解:Kubernetes/K8s企业运维实战:需求背景、容器特性对日志带来问题Log Android 如何关闭 在Android开发过程中,日志(Log)是一种非常有用的调试工具,可以帮助开发者了解程序的运行状态和问题所在。但是,在发布应用时,我们通常希望关闭日志输出,以避免泄露敏感信息和影响应用性能。...

weixin_36661894的博客 408

[Android]在代码混淆中关闭 Log

-assumenosideeffects class android.util.Log{ public static *** d(...); public static *** e(...); } 转载于:https://www.cnblogs.com/jinglecode/p/5287872.html

weixin_34223655的博客 303

android studio 关闭log 打印

I am using Android studio 1.3 and this is what I did. 1、Add the log methods that you want to strip in your release build in proguard-android-optimize.txt: -assumenosideeffects class android.ut

hhbbeijing的专栏 3526

Android:签名打包后关闭Log打印

Android:签名打包后关闭Log打印 正常开发过程中log是常用的,个人之前遇到bug第一时间不会使用调试工具来看看哪里出的问题,常常使用log输出相应的数据或者判断结果,当我们签名后发布应用后如果继续打印log是非常危险的,假如没有关闭log的打印,那么安装app后连接as 或者 eclipse 等ide就会直接打印log,清晰可见,那么这款app就没有什么安全可言了,所以发布应用前关

飞翔的熊blabla 807

android 中打 Log 的一些技巧

在 android 平台上搞开发工作,会经常用到一些 Log 输出调试信息。众所周知,android 中有五种类型的 Log , v, d, i, w, e 这里就不再赘 述 (如果对这些不了解的朋友,推荐看 android_Tutor 的博文http://blog.youkuaiyun.com/Android_Tutor/article/details/5081713 , 上面讲的很详细)本文主要讲一下如何

fulinwsuafcie的专栏 4357

Android关闭内核打印log信息

方法一: 动态设置打印优先级,每次开机需要设置一次 su echo 0 > proc/sys/kernel/printk 方法二: 修改/kernel/printk/printk.c console_printk[0]原值为CONSOLE_LOGLEVEL_DEFAULT;将其修改为CONSOLE_LOGLEVEL_MIN 修改后重新编译烧录 int console_printk[4] = { CONSOLE_LOGLEVEL_MIN, ...

Y哥的博客 2573

android 自动打印出来,Android:签名打包后关闭Log打印

楔子log在发布版本中打印会出现极大的安全问题,但在debug版本中确是不可缺少的。需求自动判断当前版本类型,选择是否输出log实现查阅了stormzhang的文章,提出使用BuildConfig.DEBUG和自定义BuildConfig字段,网上还有第三种方法通过 ProGuard 优化掉 Log 代码stormzhang的文章地址一.BuildConfig.DEBUG首先在Gradle脚本中默...

weixin_31992501的博客 382
上一篇: Android Fragment完全解析,关于碎片你所需知道的一切
下一篇: Android NDK环境简介
HabbyGe
博客等级 码龄16年 46粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值