自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (11)
  • 收藏
  • 关注

原创 Glide解析(二)

load时序图:RequestBuilder : 这是一个通用请求构建类,可以处理通用资源类型的设置选项和启动负载。load 函数加载相对于比较简单。我们看下具体代码实现public class RequestManager implements LifecycleListener,ModelTypes<RequestBuilder<Drawable>> {.....public RequestBuilder<Drawable> ...

2021-04-09 16:32:04 261

原创 Glide解析(一)

Glide with 时序图:加载:override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val imageView: ImageView = findViewById(R.id.image) // 同学们:获取ImageView控件而已// TODO 常规方...

2021-04-08 14:58:47 547

原创 Retrofit详解

一:Retrofit是什么?准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装我们先来看看下面这个图:上图说明了如下几点:1. App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。2. 在服务端返回数据之后,OkHttp 将原始的结果交给

2021-04-07 14:54:29 34026 2

原创 OkHttp原理解析(一)

OkHttp 3.10.0版本,最新OkHttp为:4.0.1逻辑与3版本并没有太大变化,但是改为kotlin实现。OkHttp介绍OkHttp是当下Android使用最频繁的网络请求框架,由Square公司开源。Google在Android4.4以后开始将源码中的HttpURLConnection底层实现替换为OKHttp,同时现在流行的Retrofit框架底层同样是使用OKHttp的。优点:支持Http1、Http2、Quic以及WebSocket连接池复用底层TCP(Socket),减少请

2021-04-07 14:40:39 422

原创 Java原生网络编程

编程中的 Socket 是什么?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,其实就是一个门面模式。TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)。短连接长连接服务端、客户端、通信编程关注的三件事原生JDK网络编程-BIOServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。原生JDK网络编程-BIO

2021-04-02 13:52:45 84

原创 插件化(二)

宿主启动插件的ActivityActivity 是需要在清单文件中注册的,显然,插件的 Activity 没有在宿主的清单文件中注册,那我们如何来启动它呢?这里我们就需要使用 Hook 技术,来绕开系统的检测。可能有些同学不知道 Hook 是什么,所以我们先简单的介绍下 Hook 技术。Hook正常情况下对象A调用对象B,对象B处理后将数据返回给对象A,如下图:而加入Hook后的流程就变成了下图形式:Hook可以是一个方法或者一个对象,它就像一个钩子一样挂在对象B上面,当对象A调

2021-04-01 15:46:17 79

原创 插件化(一)

前言插件化技术最初源于免安装运行 apk 的想法,这个免安装的 apk 就可以理解为插件,而支持插件的 app 我们一般叫宿主。宿主可以在运行时加载和运行插件,这样便可以将 app 中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现 app 功能的动态扩展。插件化的实现我们如何去实现一个插件化呢?首先我们要知道,插件apk是没有安装的,那我们怎么加载它呢?不知道。。。没关系,这儿我们还可以细分下,一个 apk 主要就是由代码和资源组成,所以上面的问题我们可以变为:如

2021-03-31 17:42:53 352

原创 组件化(一)

早期的单一分层模式 问题一:无论分包怎么做,随着项目增大,项目失去层次感,后面接手的人扑街 问题二:包名约束太弱,稍有不注意,就会不同业务包直接互相调用,代码高耦合 问题三:多人开发在版本管理中,容易出现代码覆盖冲突等问题所有的代码都写在app模块中不同的包里面1.什么是组件化,为什么需要组件化组件化的意义:不相互依赖,可以相互交互,任意组合,高度解耦,自由拆卸,自由组装,重复利用,分层独立化此时:app不在是老大,子模块都是小弟组件化后,所有的module都平起平坐,有

2021-03-29 15:16:32 3844

原创 屏幕适配

屏幕适配为什么要适配由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,于是导致运行 Android 的设备多种多样,它们有着不同的屏幕尺寸和像素密度。 尽管系统可通过基本的缩放和调整大小功能使界面适应不同屏幕,但您应做出进一步优化,以确保界面能够在各类屏幕上美观地呈现几个重要的概念屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米比如常见的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等

2021-03-26 13:48:23 204

原创 SQL优化

SQLite什么是SQLiteSQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreS

2021-03-25 14:16:35 109

原创 APK瘦身

缩减应用大小随着业务迭代,apk体积逐渐变大。项目中积累的无用资源,未压缩的图片资源等,都为apk带来了不必要的体积增加。而APK 的大小会影响应用加载速度、使用的内存量以及消耗的电量。了解 APK 结构在讨论如何缩减应用的大小之前,有必要了解下应用 APK 的结构。APK 文件由一个 Zip 压缩文件组成,其中包含构成应用的所有文件。这些文件包括 Java 类文件、资源文件和包含已编译资源的文件。APK 包含以下目录:META-INF/ :包含 CERT.SF 和 CERT.RSA 签..

2021-03-22 15:50:58 1016

原创 电量与网络优化

电量优化电池续航时间是移动用户体验中最重要的一个方面。没电的设备完全无法使用。因此,对于应用来说,尽可能地考虑电池续航时间是至关重要的。在我们开发时对于单个APP应该注意能够:减少操作:您的应用是否存在可删减的多余操作?例如,是否可以缓存已下载的数据,而不是每次重新下载数据?推迟操作:应用是否需要立即执行某项操作?例如,是否可以等到设备充电后或者Wifi连接时(通常情况下使用移动网络要比WIFI更耗电 )再将数据备份到云端?合并操作:工作是否可以批处理,而不是多次将设备置于活动状态?比如和服

2021-03-11 16:08:56 424

原创 ANR解析

概念ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR在 Android 里,应用程序的响应性是由 Activity Manager 和 WindowManager 系统服务监视的。当它监测到以下情况中的一个时,Android 就会针对特定的应用程序显示 ANR:场景Service TimeoutBroadcastQueue Timeo

2021-03-10 14:05:45 432

原创 卡顿分析与布局优化

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。Android系统每隔大概16.6ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。我们通常都会提到60fps与16ms,可是知道为何会是以程序是否达到60fps来作为App性能的衡量标准吗?这是因为人眼与大脑之间的协作无法感知超过60fps的画面更新。12fps大概类似手动快速翻动书籍的帧率,这明显是可以

2021-03-09 14:31:31 510

原创 Android App启动优化

用户希望应用能够及时响应并快速加载。启动时间过长的应用可能会导致用户在对应用给出很低的评分,甚至完全弃用。启动状态应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动与热启动。在冷启动中,应用从头开始启动。在另外两种状态中,系统需要将后台运行的应用带入前台。建议始终在假定冷启动的基础上进行优化。这样做也可以提升温启动和热启动的性能。冷启动冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应用自设备启动后或系统终止应用后首次启动。热启

2021-03-08 16:31:11 381

原创 OOM与内存优化

内存管理基础App内存组成以及限制Android 给每个 App 分配一个 VM ,让App运行在 dalvik 上,这样即使 App 崩溃也不会影响到系统。系统给 VM 分配了一定的内存大小, App 可以申请使用的内存大小不能超过此硬性逻辑限制,就算物理内存富余,如果应用超出 VM 最大内存,就会出现内存溢出 crash 。由程序控制操作的内存空间在 heap 上,分 java heapsize 和 native heapsizeJava申请的内存在 vm heap 上,所以如果 java

2021-03-05 13:56:16 658

原创 数据结构

算法的时间复杂度和空间复杂度分析通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。而度量一个程序

2021-03-04 14:16:58 491 1

原创 Fragment(二)

Fragment 是什么Fragment 是什么,从官网、别人博客上看到的都是他人之言,我们还是得去看源码才能得到答案。public class Fragment implements ComponentCallbacks,OnCreateContextMenuListener {...}可以看到,Fragment 没有继承任何类,只是实现了这两个接口,第二个不太重要,第一个是在内存不足时可以收到回调。没有什么特别信息,我们还是去看看它的主要成员。Fragment 的主要成员sta

2021-03-03 14:01:44 165

原创 Fragment(一)

Fragment 的使用实现很简单,创建一个的布局,然后在 Activity 里点击时替换 Fragment。mFragmentManager = getSupportFragmentManager();mFragmentManager.beginTransaction().replace(R.id.fl_content, fragment).commitAllowingStateLoss();代码很简单,核心就三步:1. 创建 Fragment2. 获取 FragmentMana..

2021-03-02 14:41:28 448

原创 WindowManagerService

Activity与Window相关概念Activity只负责生命周期和事件处理 Window只控制视图 一个Activity包含一个Window,如果Activity没有Window,那就相当于Service AMS统一调度所有应用程序的Activity WMS控制所有Window的显示与隐藏以及要显示的位置Window“Window”表明它是和窗口相关的,“窗口”是一个抽象的概念,从用户的角度来讲,它是一个“界面”;从SurfaceFlinger的角度来看,它是一个Layer,承载着和

2021-03-01 14:00:52 309

原创 Android10.0 PKMS 源码解读(三)

五部曲 - PMS之权限扫描此 “PMS之权限扫描” 学习的目标是: PackageManagerService中执行systemReady()后,需求对/system/etc/permissions中的各种xml进行扫描,进行相应的权限存储,让以后可以使用,这就是本次“PMS只权限扫描”学习的目的权限扫描:PackageManagerService执行systemReady()时,通过SystemConfig的readPermissionsFromXml()来扫描读取/system/etc/p

2021-02-26 13:56:42 366

原创 Android10.0 PKMS 源码解读(二)

三部曲 - APK的扫描:同学们注意:PKMS的构造函数中调用了 scanDirTracedLI方法 来扫描某个目录的apk文件。同学们注意:Android10.0 和 其他低版本扫描的路径是不一样的:Android 10.0中,PKMS主要扫描以下路径的APK信息:/vendor/overlay 系统的APP类别/product/overlay 系统的APP类别/product_services/overlay 系统的APP类别/odm/overlay 系统的APP类别/oem/ove

2021-02-25 17:33:23 679

原创 Android10.0 PKMS 源码解读(一)

PackageManagerService 简称 PKMSPKMS 是什么东西?答: PackageManagerService(简称 PKMS),是 Android 系统中核心服务之一,负责应用程序的安装,卸载,信息查询,等工作。PKMS 概述信息:Android系统启动时,会启动(应用程序管理服务器PKMS),此服务负责扫描系统中特定的目录,寻找里面的APK格式的文件,并对这些文件进行解析,然后得到应用程序相关信息,最后完成应用程序的安装PKMS在安装应用过程中, 会全面解析应

2021-02-24 15:03:59 863

原创 AMS

ActivityManagerService是Android系统中一个特别重要的系统服务,也是我们上层APP打交道最多的系统服务之一。ActivityManagerService(以下简称AMS) 主要负责四大组件的启动、切换、调度以及应用进程的管理和调度工作。所有的APP应用都需要 与AMS打交道Activity Manager的组成主要分为以下几个部分:1.服务代理:由ActivityManagerProxy实现,用于与Server端提供的系统服务进行进程间通信2.服务中枢:ActivityM

2021-02-23 15:19:41 287

原创 Dex格式解析与增量更新

dex文件是Android系统的可执行文件,包含应用程序的全部操du作指令以及运行时数据。当java程序编译成class后,还需要使用dx工具将所有的class文件整合到一个dex文件,目的是其中各个类能够共享数据,在一定程度上降低了冗余,同时也是文件结构更加经凑,实验表明,dex文件是传统jar文件大小的50%左右。文件布局dex 文件可以分为3个模块,头文件、索引区、数据区。头文件概况的描述了整个 dex 文件的分布,包括每一个索引区的大小跟偏移。索引区表示每个数据的标识,索引区主要是指向

2021-02-22 14:13:39 578

原创 系统进程启动流程分析(二)

什么是Runtime ?https://stackoverflow.com/questions/3900549/what-is-runtime归纳起来的意思就是,Runtime 是支撑程序运行的基础库,它是与语言绑定在一起的。比如:C Runtime:就是C standard lib, 也就是我们常说的libc。(有意思的是, Wiki会自动将“Cruntime” 重定向到 “C Standard Library”).Java Runtime: 同样,Wiki将其重定向到” Java V

2021-02-20 13:26:01 538

原创 系统进程启动流程分析(一)

Android启动概览众所周知,Android是谷歌开发的一款基于Linux的开源操作系统,下图所示为 Android 平台的主要组件1. Linux 内核Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。2. 硬件抽象层 (HAL)硬件抽象层 (HAL) 提供标准界

2021-02-19 14:42:18 1565

原创 Binder(二)

启动service_manager 1.启动servicemanager进程 2.main2-1.binder_open 2-2.binder_become_context_manager 2-2-1.binder_ioctl 2-2-2.binder_ioctl_set_ctx_mgr 2-2-2-1.binder_new_node 2-3.binder_loop 2-3-1.binder_write 2-3-2.binder_thread_write 2-3-

2021-02-18 12:33:29 107

原创 Binder(一)

binder框架binder涉及到的类binder驱动binder的jni方法注册1.zygote启动1-1.启动zygote进程zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是 app_main.cpp ,进程名为zygote。// system/core/rootdir/init.zygote32.rcservice zygote /system/bin/ap

2021-02-17 13:46:22 353 1

原创 Handel详解

在android开发中,经常会在子线程中进行一些操作,当操作完毕后会通过handler发送一些数据给主线程,通知主线程做相应的操作。 探索其背后的原理:子线程 handler 主线程 其实构成了线程模型中的经典问题 生产者-消费者模型。 生产者-消费者模型:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加数据,消费者从存储空间中取走数据。...

2021-02-10 15:43:13 318

原创 PhotoView项目实战

我们要实现的效果是显示一张图片,然后对其进行双击放大缩小,滑动,双指放大缩小。1.绘制图片到屏幕中间protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); // 求原始偏移量,为了让图片居中 originalOffsetX = ( getWidth() - bitmap.getWidth()) / 2f;

2021-02-09 10:26:17 224

原创 Material Design控件使用

什么是Material DesignMaterial Design,中文名:材料设计语言,是由Google推出的全新的设计语言,谷歌表示,这种设计语言旨在为手机、平板电脑、台式机和“其他平台”提供更一致、更广泛的“外观和感觉”。Tip: 在Android5.0最引人注意的就是MaterialDesign设计风格 Material Design:谷歌拿出媲美苹果的设计 过去Google的产品线,每一个都相当的独立,在产品的设计上反映得尤为明显,甚至不必看产品设计,只要看一下Google每款产品的L

2021-02-08 14:39:46 487

原创 Banner实战

什么是BannerViewPager 缓存页面 与 预加载ViewPager懒加载机制ViewPager1与ViewPager2的差异化缓存页面 与 预加载缓存页面的目的是为了预加载在缓存页面 - setOffscreenPageLimit 是什么? 设置预加载为什么这个函数设置 0 无效,为什么缓存的页面数不能低于1? 缓存页面populate setOffscreenPageLimit = 1 极端情况: T1是当前展示页面,由于左边没有...

2021-02-07 14:27:19 92

原创 实现锦鲤动画

锦鲤动画分析效果:小鱼的身体各个部件都是简单的半透明几何图形 各个部件都可以活动 从头到尾方向的部件摆动幅度越来越大、频率越来越高实现步骤:实现小鱼的绘制 实现小鱼的原地摆动 实现小鱼点击游动分解图Drawable是什么?一种可以在Canvas上进行绘制的抽象的概念 颜色、图片等都可以是一个Drawable Drawable可以通过XML定义,或者通过代码创建 Android中Drawable是一个抽象类,每个具体的Drawable都是其子类Drawable的优点

2021-02-06 13:14:23 314

原创 View事件分发

1、事件的种类和手势1.1 单点触摸根据面向对象思想,事件被封装成 MotionEvent 对象 1.2 多点触摸 多点触控 ( Multitouch,也称 Multi-touch ),即同时接受屏幕上多个点的人机交互操作,多点触 控是从 Android 2.0 开始引入的功能 1.3 手势 1.4 多点手势手指操作流程 2、View的体系结构和事件分发的框架 2.1 View和ViewGroup的关系2.2 Android页面View

2021-02-05 20:29:33 131

原创 布局流程与插件化换肤

布局流程ActivityThread.java2644 private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) { 2665 ContextImpl appContext = createBaseContextForActivity(r);创建上下文 2669 activity = mInstrumentation.newActivity(。。。)创建activity 2...

2021-02-04 17:14:33 92

原创 Android自定义View

为什么要自定义View自定义View的基本方法自定义View的最基本的三个方法分别是: onMeasure()、onLayout()、onDraw(); View在Activity中显示出来,要经历测量、布局和绘制三个步骤,分别对应三个动作:measure、layout和draw。测量:onMeasure()决定View的大小; 布局:onLayout()决定View在ViewGroup中的位置; 绘制:onDraw()决定绘制这个View。自定义控件分类自定义View: 只需要重写on

2021-02-03 20:20:20 227

原创 ClassLoader类加载

ART 和 DalvikDVM也是实现了JVM规范的一个虚拟器,默认使用CMS垃圾回收器,但是与JVM运行 Class 字节码不同,DVM执行 Dex(Dalvik Executable Format)** ——专为 Dalvik 设计的一种压缩格式。Dex 文件是很多 .class 文件处理压缩后的产物,最终可以在 Android 运行时环境执行。而ART(Android Runtime) 是在 Android 4.4 中引入的一个开发者选项,也是 Android 5.0 及更高版本的默认An

2021-02-02 14:02:40 257

原创 dex文件加密

反编译什么是反编译?(what ) 定义:利用编译程序从源语言编写的源程序产生目标程序的过程。怎么进行反编译?先了解apk的文件构造加固方案的手段反模拟器 模拟器运行apk,可以用模拟器监控到apk的各种行为,所以在实际的加固apk运行中,一旦发现模拟器在运行该APK,就停止核心代码的运行。代码虚拟化 代码虚拟化在桌面平台应用保护中已经是非常的常见了,主要的思路是自建一个虚拟执行引擎,然后把原生的可执行代码转换成自定义的指令进行虚拟执行。加密...

2021-02-01 16:36:32 871

原创 Java IO

IO框架 Java IO的学习是一件非常艰巨的任务。它的挑战是来自于要覆盖所有的可能性。不仅存在各种I/O源端还有想要和他通信的接收端(文件/控制台/网络链 接),而且还需要以不同的方式与他们进行通信(顺序/随机存取/缓冲/二进制/字符/行/字 等等)这些情况综合起来 就给我们带来了大量的学习任务,大量的类需要学习。 我们要学会所有的这些java 的IO是很难的,因为我们没有构建一个关于IO的体系,要构建这个体系又需要深入理解 IO库的演进过程,所以,我们如果缺乏历史的眼光,很快

2021-01-31 18:01:30 115

mtSecKill.win.exe

京东茅台自动抢购exe

2021-02-07

Fish-v324-0712.zip

百度文库免费下载文档 通过连接即可下载 亲测可用(..............................)

2020-11-04

中学图书馆管理系统.zip

只完成了一部分功能!!应付一下课程作业没有问题~ 中学图书馆管理系统 目的:方便图书馆对书籍借阅的管理 主要功能:学生基本信息查询,书籍借阅管理, 书籍管理 图书管理系统主要有三种角色,分别是读者、图书、工作人员.主要分成五个功能模块:图书管理, 图书流通管理, 读者管理, 统计查询, 系统管理.

2020-11-02

javaweb版图书管理系统.zip

基于javaweb的图书管理系统 条例清晰,页面美观 数据库完整 适合做课程设计或者本科的毕业设计

2020-11-02

【安卓软件】压缩包密码破解大师.apk

不知道压缩包密码?压缩包密码记不清了?不存在的,这款软件助你破解压缩包密码, 支持多种模式破解,

2019-06-27

微信对话生成器+自定义生成微信聊天截图.rar

这款软件是可以生成微信好友聊天对话截图 请勿行骗和做违法事情 软件是电脑端的,可以自定义聊天记录 比如时间/提示框、文字、转账、收账、语音、图片、红包等还有对方头像和昵称都可以 用来整蛊好友女朋友可以用上 至于聊天内容就自己发挥想象吧亲测也随便生成了一张和真实聊天截图是一模一样的

2019-06-27

jdk1.5 java

jdk1.5 java jdk1.5 java jdk1.5 java jdk1.5 java

2017-12-04

一键刷支付宝微信QQ运动步数.apk 需要xp框架

需要xp框架 一键刷支付宝微信QQ运动步数.apk ,一键刷支付宝微信QQ运动步数.apk

2017-12-04

OPPO R11 线刷工具MSMdownloadtool 救砖 清账户 清密码

OPPO R11 线刷工具MSMdownloadtool 救砖 清账户 清密码

2017-12-04

JAVA android IOS AES通用加密

private static final char[] chars = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' };

2017-09-11

雷霆战机ui资源

雷霆战机全套UI资源

2016-03-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除