[Java]Fresco(Facebook开源的android项目)图片缓存...

来源:本网整理

这种鉴宝节目,如果存在砸宝环节,一定会提前让藏友签一份“生死文书”,以防出现纠纷。“生死文书”的本质是合同,签字后具有法律效力,各方均应遵守。“生死文书”大致包括如下内容:藏宝人提供藏品;由节目组选定鉴定人员;藏宝人同意由节目选定的鉴赏人员对藏品进行鉴定,并认可其鉴定意见;如鉴定人员对藏品的鉴定结论为赝品,藏宝人同意由主持人砸毁赝品。“生死文书”的约束主体明确,权利义务规定清晰,其本质其实是藏宝人和鉴宝节目组,对于在鉴宝砸宝流程中所涉及的各方权益所达成的约定,是合同的一种表现形式。根据我国合同法的相关规定,合同在各方签约后均应依约遵守。在“生死文书”下,藏品真伪的辨别标准已经发生质变。在未签“

周末闲来无事,研究了一下facebook开源的android图片缓存框架(https://github.com/facebook/fresco),并从AS整合到eclipse里。做了一些修改,仔细的研究了该框架的使用配置,也详细的标注了配置说明。目前暂未研究网络层,数据源层以及线程池等替换,不过这些在http://fresco-cn.org/上有详细说明。

吐槽下,Fresco项目开发人员为了凸显该框架的强大,把android常用的网络层和图片缓存都整到Demo里,不熟悉折腾起来还是挺麻烦的,而且NDK环境明明配置正确,还老报NDK配置错误,找不到NDK,偶然一次运行成功,再次导入项目又报错了,郁闷。。。

\n下面我们就来介绍一下老式旧电脑的新用途,应该会对各位有所启发。旧电脑也分个等级,并不是所有的系统都已经无法使用,也许它运行Windows7和Vista不够流畅,但是运行起Linux来却会有比较理想的效果。原本担心什么数据、兼容性之类的问题,不敢在自己的主力电脑上尝试一下Linux。现在对于旧电脑,何不尝试一下小企鹅。Linux对于电脑系统的硬件要求并不高,流行的Ubuntu系统不过需要400MHz的处理器、64MB内存和4GB硬盘,PuppyLinux更是只需要奔腾MMX166处理器、64MB内存就可以,甚至还有不需要硬盘就可以运行的Linux,不如DamnSmallLinux,只要486

PS:该图片缓存框架强大,可以说目前最强的android图片缓存框架,决定下周就把项目里的UniversalImageLoader换成Fresco,不过该框架里暂未找到不用UI组件直接把图片拉入缓存的方法,知道小伙伴们共享下吧。。 scrolltotop.offset(100,120); scrolltotop.init();

[1].[代码] 缓存框架运行的一些相关配置 跳至 [1] [2] [3]

对于同一件事情同一个事物,每个人都有自己的想法和观点,不一定非得要按固化思维千篇一律啊。30岁前想努力打拼想潇洒想玩,怎么样都无可厚非。30岁之后夫妻双方都成熟稳定了,而且有一定经济基础,再生孩子挺好的。又或者那些丁克家庭,压根就不想生孩子。这是当事人自己的选择,旁人无可厚非,更没有理由说三道四或者进行道德绑架,指责别人没有家庭责任感,没有担当。记住:子非鱼。说到因为嫌带孩子累而不想生孩子的,这是因为没有真正生过、带过孩子,还没找到其中的乐趣,还没有享受到过孩子带来的欢乐。当然,不得不承认,带孩子确实不是一件轻松的事儿,尤其是碰到些爱哭闹、吵夜的。总之,不管是怎么样的一个孩子,他们都会是一个家

/* * This file provided by Facebook is for non-commercial testing and evaluation * purposes only. Facebook reserves all rights not expressly granted. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.facebook.fresco.sample.configs; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Environment; import com.facebook.cache.disk.DiskCacheConfig; import com.facebook.common.internal.Supplier; import com.facebook.common.util.ByteConstants; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.drawable.ProgressBarDrawable; import com.facebook.drawee.generic.GenericDraweeHierarchy; import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder; import com.facebook.drawee.generic.RoundingParams; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.interfaces.SimpleDraweeControllerBuilder; import com.facebook.fresco.sample.R; import com.facebook.fresco.sample.instrumentation.InstrumentedDraweeView; import com.facebook.imagepipeline.cache.MemoryCacheParams; import com.facebook.imagepipeline.common.ImageDecodeOptions; import com.facebook.imagepipeline.common.ResizeOptions; import com.facebook.imagepipeline.core.ImagePipelineConfig; import com.facebook.imagepipeline.request.ImageRequest; import com.facebook.imagepipeline.request.ImageRequest.RequestLevel; import com.facebook.imagepipeline.request.ImageRequestBuilder; /** * 配置才是关键~~~细细看来确实是不错的图片缓存框架, * @author notreami * */ public class ConfigConstants { private static final int MAX_HEAP_SIZE = (int) Runtime.getRuntime().maxMemory();//分配的可用内存 public static final int MAX_MEMORY_CACHE_SIZE = MAX_HEAP_SIZE / 4;//使用的缓存数量 public static final int MAX_SMALL_DISK_VERYLOW_CACHE_SIZE = 5 * ByteConstants.MB;//小图极低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图) public static final int MAX_SMALL_DISK_LOW_CACHE_SIZE = 10 * ByteConstants.MB;//小图低磁盘空间缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图) public static final int MAX_SMALL_DISK_CACHE_SIZE = 20 * ByteConstants.MB;//小图磁盘缓存的最大值(特性:可将大量的小图放到额外放在另一个磁盘空间防止大图占用磁盘空间而删除了大量的小图) public static final int MAX_DISK_CACHE_VERYLOW_SIZE = 10 * ByteConstants.MB;//默认图极低磁盘空间缓存的最大值 public static final int MAX_DISK_CACHE_LOW_SIZE = 30 * ByteConstants.MB;//默认图低磁盘空间缓存的最大值 public static final int MAX_DISK_CACHE_SIZE = 50 * ByteConstants.MB;//默认图磁盘缓存的最大值 private static final String IMAGE_PIPELINE_SMALL_CACHE_DIR = "imagepipeline_cache";//小图所放路径的文件夹名 private static final String IMAGE_PIPELINE_CACHE_DIR = "imagepipeline_cache";//默认图所放路径的文件夹名 private static ImagePipelineConfig sImagePipelineConfig; private ConfigConstants(){ } /** * 初始化配置,单例 */ public static ImagePipelineConfig getImagePipelineConfig(Context context) { if (sImagePipelineConfig == null) { sImagePipelineConfig = configureCaches(context); } return sImagePipelineConfig; } /** * 初始化配置 */ private static ImagePipelineConfig configureCaches(Context context) { //内存配置 final MemoryCacheParams bitmapCacheParams = new MemoryCacheParams( ConfigConstants.MAX_MEMORY_CACHE_SIZE, // 内存缓存中总图片的最大大小,以字节为单位。 Integer.MAX_VALUE, // 内存缓存中图片的最大数量。 ConfigConstants.MAX_MEMORY_CACHE_SIZE, // 内存缓存中准备清除但尚未被删除的总图片的最大大小,以字节为单位。 Integer.MAX_VALUE, // 内存缓存中准备清除的总图片的最大数量。 Integer.MAX_VALUE); // 内存缓存中单个图片的最大大小。 //修改内存图片缓存数量,空间策略(这个方式有点恶心) Supplier<MemoryCacheParams> mSupplierMemoryCacheParams= new Supplier<MemoryCacheParams>() { @Override public MemoryCacheParams get() { return bitmapCacheParams; } }; //小图片的磁盘配置 DiskCacheConfig diskSmallCacheConfig = DiskCacheConfig.newBuilder() .setBaseDirectoryPath(context.getApplicationContext().getCacheDir())//缓存图片基路径 .setBaseDirectoryName(IMAGE_PIPELINE_SMALL_CACHE_DIR)//文件夹名 // .setCacheErrorLogger(cacheErrorLogger)//日志记录器用于日志错误的缓存。 // .setCacheEventListener(cacheEventListener)//缓存事件侦听器。 // .setDiskTrimmableRegistry(diskTrimmableRegistry)//类将包含一个注册表的缓存减少磁盘空间的环境。 .setMaxCacheSize(ConfigConstants.MAX_DISK_CACHE_SIZE)//默认缓存的最大大小。 .setMaxCacheSizeOnLowDiskSpace(MAX_SMALL_DISK_LOW_CACHE_SIZE)//缓存的最大大小,使用设备时低磁盘空间。 .setMaxCacheSizeOnVeryLowDiskSpace(MAX_SMALL_DISK_VERYLOW_CACHE_SIZE)//缓存的最大大小,当设备极低磁盘空间 // .setVersion(version) .build(); //默认图片的磁盘配置 DiskCacheConfig diskCacheConfig = DiskCacheConfig.newBuilder() .setBaseDirectoryPath(Environment.getExternalStorageDirectory().getAbsoluteFile())//缓存图片基路径 .setBaseDirectoryName(IMAGE_PIPELINE_CACHE_DIR)//文件夹名 // .setCacheErrorLogger(cacheErrorLogger)//日志记录器用于日志错误的缓存。 // .setCacheEventListener(cacheEventListener)//缓存事件侦听器。 // .setDiskTrimmableRegistry(diskTrimmableRegistry)//类将包含一个注册表的缓存减少磁盘空间的环境。 .setMaxCacheSize(ConfigConstants.MAX_DISK_CACHE_SIZE)//默认缓存的最大大小。 .setMaxCacheSizeOnLowDiskSpace(MAX_DISK_CACHE_LOW_SIZE)//缓存的最大大小,使用设备时低磁盘空间。 .setMaxCacheSizeOnVeryLowDiskSpace(MAX_DISK_CACHE_VERYLOW_SIZE)//缓存的最大大小,当设备极低磁盘空间 // .setVersion(version) .build(); //缓存图片配置 ImagePipelineConfig.Builder configBuilder = ImagePipelineConfig.newBuilder(context) // .setAnimatedImageFactory(AnimatedImageFactory animatedImageFactory)//图片加载动画 .setBitmapMemoryCacheParamsSupplier(mSupplierMemoryCacheParams)//内存缓存配置(一级缓存,已解码的图片) // .setCacheKeyFactory(cacheKeyFactory)//缓存Key工厂 // .setEncodedMemoryCacheParamsSupplier(encodedCacheParamsSupplier)//内存缓存和未解码的内存缓存的配置(二级缓存) // .setExecutorSupplier(executorSupplier)//线程池配置 // .setImageCacheStatsTracker(imageCacheStatsTracker)//统计缓存的命中率 // .setImageDecoder(ImageDecoder imageDecoder) //图片解码器配置 // .setIsPrefetchEnabledSupplier(Supplier<Boolean> isPrefetchEnabledSupplier)//图片预览(缩略图,预加载图等)预加载到文件缓存 .setMainDiskCacheConfig(diskCacheConfig)//磁盘缓存配置(总,三级缓存) // .setMemoryTrimmableRegistry(memoryTrimmableRegistry) //内存用量的缩减,有时我们可能会想缩小内存用量。比如应用中有其他数据需要占用内存,不得不把图片缓存清除或者减小 或者我们想检查看看手机是否已经内存不够了。 // .setNetworkFetchProducer(networkFetchProducer)//自定的网络层配置:如OkHttp,Volley // .setPoolFactory(poolFactory)//线程池工厂配置 // .setProgressiveJpegConfig(progressiveJpegConfig)//渐进式JPEG图 // .setRequestListeners(requestListeners)//图片请求监听 // .setResizeAndRotateEnabledForNetwork(boolean resizeAndRotateEnabledForNetwork)//调整和旋转是否支持网络图片 .setSmallImageDiskCacheConfig(diskSmallCacheConfig)//磁盘缓存配置(小图片,可选~三级缓存的小图优化缓存) ; return configBuilder.build(); } //圆形,圆角切图,对动图无效 public static RoundingParams getRoundingParams(){ RoundingParams roundingParams = RoundingParams.fromCornersRadius(7f); // roundingParams.asCircle();//圆形 // roundingParams.setBorder(color, width);//fresco:roundingBorderWidth="2dp"边框 fresco:roundingBorderColor="@color/border_color" // roundingParams.setCornersRadii(radii);//半径 // roundingParams.setCornersRadii(topLeft, topRight, bottomRight, bottomLeft)//fresco:roundTopLeft="true" fresco:roundTopRight="false" fresco:roundBottomLeft="false" fresco:roundBottomRight="true" // roundingParams. setCornersRadius(radius);//fresco:roundedCornerRadius="1dp"圆角 // roundingParams.setOverlayColor(overlayColor);//fresco:roundWithOverlayColor="@color/corner_color" // roundingParams.setRoundAsCircle(roundAsCircle);//圆 // roundingParams.setRoundingMethod(roundingMethod); // fresco:progressBarAutoRotateInterval="1000"自动旋转间隔 // 或用 fromCornersRadii 以及 asCircle 方法 return roundingParams; } //Drawees DraweeHierarchy 组织 public static GenericDraweeHierarchy getGenericDraweeHierarchy(Context context){ GenericDraweeHierarchy gdh = new GenericDraweeHierarchyBuilder(context.getResources()) // .reset()//重置 // .setActualImageColorFilter(colorFilter)//颜色过滤 // .setActualImageFocusPoint(focusPoint)//focusCrop, 需要指定一个居中点 // .setActualImageMatrix(actualImageMatrix) // .setActualImageScaleType(actualImageScaleType)//fresco:actualImageScaleType="focusCrop"缩放类型 // .setBackground(background)//fresco:backgroundImage="@color/blue"背景图片 // .setBackgrounds(backgrounds) // .setFadeDuration(fadeDuration)//fresco:fadeDuration="300"加载图片动画时间 .setFailureImage(ConfigConstants.sErrorDrawable)//fresco:failureImage="@drawable/error"失败图 // .setFailureImage(failureDrawable, failureImageScaleType)//fresco:failureImageScaleType="centerInside"失败图缩放类型 // .setOverlay(overlay)//fresco:overlayImage="@drawable/watermark"叠加图 // .setOverlays(overlays) .setPlaceholderImage(ConfigConstants.sPlaceholderDrawable)//fresco:placeholderImage="@color/wait_color"占位图 // .setPlaceholderImage(placeholderDrawable, placeholderImageScaleType)//fresco:placeholderImageScaleType="fitCenter"占位图缩放类型 // .setPressedStateOverlay(drawable)//fresco:pressedStateOverlayImage="@color/red"按压状态下的叠加图 .setProgressBarImage(new ProgressBarDrawable())//进度条fresco:progressBarImage="@drawable/progress_bar"进度条 // .setProgressBarImage(progressBarImage, progressBarImageScaleType)//fresco:progressBarImageScaleType="centerInside"进度条类型 // .setRetryImage(retryDrawable)//fresco:retryImage="@drawable/retrying"点击重新加载 // .setRetryImage(retryDrawable, retryImageScaleType)//fresco:retryImageScaleType="centerCrop"点击重新加载缩放类型 .setRoundingParams(RoundingParams.asCircle())//圆形/圆角fresco:roundAsCircle="true"圆形 .build(); return gdh; } //DraweeView~~~SimpleDraweeView——UI组件 // public static SimpleDraweeView getSimpleDraweeView(Context context,Uri uri){ // SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context); // simpleDraweeView.setImageURI(uri); // simpleDraweeView.setAspectRatio(1.33f);//宽高缩放比 // return simpleDraweeView; // } //SimpleDraweeControllerBuilder public static SimpleDraweeControllerBuilder getSimpleDraweeControllerBuilder(SimpleDraweeControllerBuilder sdcb,Uri uri, Object callerContext,DraweeController draweeController){ SimpleDraweeControllerBuilder controllerBuilder = sdcb .setUri(uri) .setCallerContext(callerContext) // .setAspectRatio(1.33f);//宽高缩放比 .setOldController(draweeController); return controllerBuilder; } //图片解码 public static ImageDecodeOptions getImageDecodeOptions(){ ImageDecodeOptions decodeOptions = ImageDecodeOptions.newBuilder() // .setBackgroundColor(Color.TRANSPARENT)//图片的背景颜色 // .setDecodeAllFrames(decodeAllFrames)//解码所有帧 // .setDecodePreviewFrame(decodePreviewFrame)//解码预览框 // .setForceOldAnimationCode(forceOldAnimationCode)//使用以前动画 // .setFrom(options)//使用已经存在的图像解码 // .setMinDecodeIntervalMs(intervalMs)//最小解码间隔(分位单位) .setUseLastFrameForPreview(true)//使用最后一帧进行预览 .build(); return decodeOptions; } //图片显示 public static ImageRequest getImageRequest(InstrumentedDraweeView view,String uri){ ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(uri)) // .setAutoRotateEnabled(true)//自动旋转图片方向 // .setImageDecodeOptions(getImageDecodeOptions())//??图片解码库 // .setImageType(ImageType.SMALL)//图片类型,设置后可调整图片放入小图磁盘空间还是默认图片磁盘空间 // .setLocalThumbnailPreviewsEnabled(true)//缩略图预览,影响图片显示速度(轻微) .setLowestPermittedRequestLevel(RequestLevel.FULL_FETCH)//请求经过缓存级别 BITMAP_MEMORY_CACHE,ENCODED_MEMORY_CACHE,DISK_CACHE,FULL_FETCH // .setPostprocessor(postprocessor)//修改图片 // .setProgressiveRenderingEnabled(true)//渐进加载,主要用于渐进式的JPEG图,影响图片显示速度(普通) .setResizeOptions(new ResizeOptions(view.getLayoutParams().width, view.getLayoutParams().height))//调整大小 // .setSource(Uri uri)//设置图片地址 .build(); return imageRequest; } //DraweeController 控制 DraweeControllerBuilder public static DraweeController getDraweeController(ImageRequest imageRequest,InstrumentedDraweeView view){ DraweeController draweeController = Fresco.newDraweeControllerBuilder() // .reset()//重置 .setAutoPlayAnimations(true)//自动播放图片动画 // .setCallerContext(callerContext)//回调 .setControllerListener(view.getListener())//监听图片下载完毕等 // .setDataSourceSupplier(dataSourceSupplier)//数据源 // .setFirstAvailableImageRequests(firstAvailableImageRequests)//本地图片复用,可加入ImageRequest数组 .setImageRequest(imageRequest)//设置单个图片请求~~~不可与setFirstAvailableImageRequests共用,配合setLowResImageRequest为高分辨率的图 // .setLowResImageRequest(ImageRequest.fromUri(lowResUri))//先下载显示低分辨率的图 .setOldController(view.getController())//DraweeController复用 .setTapToRetryEnabled(true)//点击重新加载图 .build(); return draweeController; } //默认加载图片和失败图片 public static Drawable sPlaceholderDrawable; public static Drawable sErrorDrawable; @SuppressWarnings("deprecation") public static void init(final Resources resources) { if (sPlaceholderDrawable == null) { sPlaceholderDrawable = resources.getDrawable(R.color.placeholder); } if (sErrorDrawable == null) { sErrorDrawable = resources.getDrawable(R.color.error); } } }

[2].[图片] FCA713BC1530726DEF842896DAA9332C.jpg 跳至 [1] [2] [3]

[3].[文件] frescoSample.zip ~ N/A    (4) 跳至 [1] [2] [3]

文件不存在或者代码语言不存在 SyntaxHighlighter.autoloader( 'applescript /js/sh309/scripts/shBrushAppleScript.js?t=1420773622000', 'actionscript3 as3 /js/sh309/scripts/shBrushAS3.js?t=1420773622000', 'bash shell /js/sh309/scripts/shBrushBash.js?t=1420773622000', 'coldfusion cf /js/sh309/scripts/shBrushColdFusion.js?t=1420773622000', 'cpp c /js/sh309/scripts/shBrushCpp.js?t=1420773622000', 'obj-c objc /js/sh309/scripts/shBrushObjC.js?t=1420773622000', 'c# c-sharp csharp /js/sh309/scripts/shBrushCSharp.js?t=1420773622000', 'css /js/sh309/scripts/shBrushCss.js?t=1420773622000', 'delphi pascal /js/sh309/scripts/shBrushDelphi.js?t=1420773622000', 'diff patch pas /js/sh309/scripts/shBrushDiff.js?t=1420773622000', 'erl erlang /js/sh309/scripts/shBrushErlang.js?t=1420773622000', 'groovy /js/sh309/scripts/shBrushGroovy.js?t=1420773622000', 'haxe hx /js/sh309/scripts/shBrushHaxe.js?t=1420773622000', 'java /js/sh309/scripts/shBrushJava.js?t=1420773622000', 'jfx javafx /js/sh309/scripts/shBrushJavaFX.js?t=1420773622000', 'js jscript javascript /js/sh309/scripts/shBrushJScript.js?t=1420773622000', 'perl pl /js/sh309/scripts/shBrushPerl.js?t=1420773622000', 'php /js/sh309/scripts/shBrushPhp.js?t=1420773622000', 'text plain /js/sh309/scripts/shBrushPlain.js?t=1420773622000', 'py python /js/sh309/scripts/shBrushPython.js?t=1420773622000', 'ruby rails ror rb /js/sh309/scripts/shBrushRuby.js?t=1420773622000', 'scala /js/sh309/scripts/shBrushScala.js?t=1420773622000', 'sql /js/sh309/scripts/shBrushSql.js?t=1420773622000', 'vb vbnet /js/sh309/scripts/shBrushVb.js?t=1420773622000', 'xml xhtml xslt html /js/sh309/scripts/shBrushXml.js?t=1420773622000' ); SyntaxHighlighter.all();

唐寅千春亦秋霜(唐寅春树秋霜图原名春山伴侣图轴此图绘春山吐翠、流泉飞溅的山谷内,两位文士盘坐于临溪的矶石上寻幽晤谈的情景。图中高岭回耸,枯树新枝,绽发嫩芽,透露出春的消息。谷口悬泉如练,汇入溪流,跳珠溅出,冷冷有声。环境清雅出尘。两位士人的侃侃而谈,平添了些许诗情画意。)

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

android studio failed to resolve:com.facebook.fresco:fresco:0.9.0.+ 怎么解

应该是facebook的错误,是否是因为无法更新导致的错误。

facebook的图片加载框架Fresco出现NoClassDefFoundError异常大神有没有碰到过?

检查你的初始化语句执行到了没有追问既然是找不到类,那肯定不会执行了。可能是开发环境的问题。昨天安装新版的jdk及adt,项目就部署成功了。

如何为facebook fresco在代码中设置 宽高比

在代码中设置控件大小的方法 private Button mbtn; mbtn = (Button) findViewById(R.id.btn_test); LayoutParams lp; lp=mbtn.getLayoutParams(); lp.width=100; lp.height=200; mbtn.setLayoutParams(lp); //在代码中设置界面大小的方法

  • 本文相关:
  • [PHP]PHP+jQuery+Ajax多图片上传(支持手机...
  • [Java]UDP核心代码
  • [PHP]SQLITE缓存
  • [PHP]保存SESSION到SQLITE,
  • [C/C++]rpc protobuf minirpc
  • [Java]ssh开发的简单的花店系统
  • [Shell/批处理]在linux环境下安装配置hadoop2.6.0...
  • [Java]实体对象克隆与值复制
  • [Shell/批处理]smokeping2.6.8一键安装离线包...
  • [Python]配置文件备份
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved