- 博客(416)
- 资源 (40)
- 收藏
- 关注
原创 Android 7系统休眠唤醒(十)实战调试与问题排查
至此,Android 7 系统休眠唤醒十篇系列全部完成。篇号主题层级1电源管理架构全景图宏观架构2开机全链路从 BootROM 到框架层3关机/重启全链路从 UI 到内核断电4休眠唤醒与开关机对比九维度差异分析5休眠全链路6唤醒全链路Kernel Resume → 屏幕点亮7wakelock 与 autosleep内核机制8Alarm 与硬件唤醒源定时唤醒全架构9libsuspend 与 Power HALNative 层双组件10。
2026-07-29 10:02:18
249
原创 Android 7系统休眠唤醒(九)Native层—libsuspend与Power HAL
本文深入分析Android Native层的电源管理核心组件libsuspend与Power HAL。libsuspend作为用户空间与内核休眠机制的桥梁,提供三级休眠模式选择:优先使用earlysuspend(通过帧缓冲同步确保安全休眠),autosleep模式被源码禁用,最终回退到wakeup_count模式。文章详解了earlysuspend的帧缓冲同步机制、wakeup_count的原子性保证,并指出Power HAL参考实现中的空函数问题。该分析为排查休眠模式选择、同步机制等底层问题提供了关键技术
2026-07-29 10:01:35
233
原创 Android 7系统休眠唤醒(八)内核层—Alarm定时唤醒与硬件唤醒源
文章摘要(148字) 本文深入解析Android的Alarm定时唤醒机制与硬件唤醒源。Alarm系统通过RTC硬件定时器实现精确唤醒,支撑闹钟、Doze模式等场景。架构分为五层:应用层调用AlarmManager API,框架层AlarmManagerService管理优先队列,Native层通过timerfd/RTC驱动交互,内核层alarmtimer子系统编程硬件,底层RTC芯片在CPU休眠时持续计时。文章详细分析了数据结构、Alarm类型选择、触发流程及timerfd/epoll的等待机制,并探讨了不
2026-07-28 20:13:59
153
原创 Android 7系统休眠唤醒(七)内核层—wakelock与autosleep机制
摘要: 本文深入解析Android内核层的wakelock与autosleep机制,揭示其设计初衷与实现原理。通过对比Linux标准休眠方案(wakeup_count)的竞态缺陷,指出wakelock通过“内核被动决策”模式(只要存在活跃锁即阻止休眠)从根本上避免竞态问题。详细剖析了wakelock的核心数据结构(struct wakeup_source)、全局链表管理及关键API(激活/释放/超时控制),并阐释autosleep线程如何通过“可冻结等待”实现无轮询的自动休眠触发。全文结合内核源码路径与设计
2026-07-28 19:55:18
244
原创 Android 7系统休眠唤醒(六)唤醒全链路
文章摘要: 本文是Android电源管理系列第六篇,聚焦系统唤醒全链路流程。从唤醒源触发(如电源键、RTC闹钟等)开始,详细分析内核层如何从中断唤醒到恢复进程(syscore_resume、thaw_processes等),再到Native层libsuspend通过阻塞式write()检测唤醒并通知Java层,最终由PowerManagerService协调亮屏与状态恢复。关键设计包括唤醒源的硬件中断机制、内核严格逆序恢复设备依赖、用户空间通过系统调用阻塞/返回来感知状态变化,形成从物理中断到应用响应的完整
2026-07-28 11:26:46
229
原创 Android 7系统休眠唤醒(五)休眠全链路
整个流程在 1 秒内完成,关键在于"冻结而非杀死"的设计——下一篇将分析唤醒流程,看系统如何从中断触发到点亮屏幕,以同样的速度恢复。,内核的 autosleep 线程会在每次 wakelock 释放后自动尝试休眠,无需用户空间反复写入。机制解决了关键的竞态问题——读出当前值,写入确认无新事件,再触发休眠。内核的休眠流程分为五个阶段:准备、冻结、挂起设备、进入休眠、恢复。是 Android 提供的用户空间库,负责与内核的休眠机制交互。这个方法是休眠的 Java 层入口,负责加锁并调用内部实现。
2026-07-28 11:21:04
189
原创 Android 7系统休眠唤醒(四)休眠唤醒与开关机—核心差异深度对比
本文从触发方式、内核状态、进程管理、虚拟机、系统服务、Activity、硬件外设、耗时时长、内存状态九个维度,系统对比了开机、关机、休眠、唤醒的差异。休眠唤醒是"冻结/解冻"模型— 系统原地暂停、原地恢复,不做任何拆除和重建开关机是"拆除/重建"模型— 关机有序拆除一切,开机从零重建一切移动设备选择休眠— 基于体验(亚秒恢复)、功耗(毫瓦级)、状态连续性(不丢上下文)的综合考量下一篇Android 7系统休眠唤醒(五)休眠全链路—PMS到Kernel Suspend。
2026-07-27 15:24:05
183
原创 Android 7系统休眠唤醒(三)关机_重启全链路—ShutdownThread到kernel_power_off
关机流程是一个"有序拆除"的过程,而非简单的"拉闸断电"。向所有应用广播关机通知AMS 终止所有 Activity 和进程PackageManager 保存包状态系统服务按依赖顺序关闭vold 安全卸载文件系统并 sync调用内核接口断电整个过程确保:数据不丢失、文件系统不损坏、服务正常断开连接。下一篇Android 7系统休眠唤醒(四)休眠唤醒与开关机—核心差异深度对比。
2026-07-23 21:17:59
186
原创 Android 7系统休眠唤醒(二)开机全链路—BootROM到Launcher
摘要:Android开机流程全解析 本文是系列第二篇,详细拆解Android从BootROM到Launcher的完整开机链路,分为六大阶段: BootROM(芯片固件):完成基础硬件初始化,加载BootLoader BootLoader(LK/U-Boot):加载boot.img(内核+ramdisk),移交控制权 Linux内核:初始化核心子系统,挂载根文件系统并启动init进程(PID=1) init进程: 挂载/proc、/sys等虚拟文件系统 解析init.rc脚本,按阶段触发early-init/
2026-07-23 20:58:17
246
原创 Android 7系统休眠唤醒(一)电源管理架构全景图
本文深入探讨了Android电源管理体系中的休眠唤醒机制。文章首先强调理解休眠唤醒的重要性,指出移动设备需要在性能与续航间取得平衡,并列举了常见问题的根源。 文章将Android电源状态抽象为三种粒度转移模型: 宏观级别的开关机(耗时30-60秒,状态完全丢失) 中观级别的休眠唤醒(核心内容,耗时<1秒,RAM状态保留) 微观级别的亮暗屏切换(仅涉及显示控制) 重点剖析了Android电源管理的四层架构: 应用层通过PowerManager API和WakeLock控制 框架层PowerManagerSer
2026-07-20 11:02:52
242
原创 Android 7系统网络(九)车机网络功能定制
车机网络定制的本质是"为正确的流量选择正确的路径,并精确控制其资源消耗"。多接口绑定解决了"路径"问题,流量配额解决了"消耗"问题,网络共享管控解决了"溢出"问题——三者共同构成了完整的车机网络管控方案。:per-netId 路由规则优先级最高(1000+),per-UID 绑定规则次之(100-999),默认路由规则最低(<100)。这样,如果应用主动调用。:三大定制方案共享内核层基础设施(iptables/tc/路由表),多接口绑定决定流量路径,流量配额控制资源消耗,网络共享管控防止资源溢出。
2026-07-16 11:26:54
201
原创 Android 7系统网络(八)应用API层—ConnectivityManager使用与实战调试
层级核心内容关键文件/模块内核层netfilter/iptables、fwmark、策略路由Native 层netd 守护进程、八大 ControllerFramework 层网络代理层WiFi/移动数据/以太网 NetworkAgent应用 API 层ConnectivityManager + 调试工具链带着一个问题,沿着调用链路从头走到尾。每次追踪一个具体场景(如 WiFi 连接),从应用层一直追到内核 iptables 规则,这种"纵深阅读"能让各个环节的交互变得清晰。
2026-07-16 11:26:20
178
原创 Android 7系统网络(七)连接建立—WiFi_移动数据_以太网完整流程
摘要: 本文是Android 7系统网络系列第七篇,解析WiFi、移动数据和以太网的连接流程。所有网络类型均采用统一的NetworkFactory + NetworkAgent模式,由ConnectivityService基于评分机制管理。WiFi连接通过WifiStateMachine状态机驱动,经历扫描、关联、DHCP获取IP、注册NetworkAgent及网络验证五个阶段;移动数据通过DcTracker→RILJ→Modem链路建立,依赖APN配置与PDP上下文激活;以太网则由EthernetNetw
2026-07-16 11:25:42
170
原创 Android 7系统网络(六)Framework层(下)—NMS_NPMS_NSS三大服务
600 系列响应码是 netd 主动推送的异步事件通知,与 200/400/500 系列的命令响应不同——NMS 通过。它是 NPMS 的"眼睛"——NPMS 需要流量数据来判断是否达到警告或限制阈值。:NPMS 是决策层(“限制谁”),NSS 是感知层(“用了多少”),NMS 是执行层(“怎么限制”),三者通过。协调——NMS 负责执行,NSS 负责统计,NPMS 负责决策,形成"执行-统计-决策"的闭环。在内核中为每个 Socket 创建唯一的 tag,所有数据包在协议栈中自动统计,无需用户态干预。
2026-07-16 11:25:12
332
原创 Android 7系统网络(五)Framework层(上)—ConnectivityService核心机制
ConnectivityService 是 Framework 层最核心的网络服务,负责管理系统中所有网络连接的状态。如果把 Android 网络比作一座城市,ConnectivityService 就是交通调度中心——它决定哪个网络是"默认网络"、何时切换网络、如何处理应用的网络请求。源码路径职责说明管理 NetworkAgent维护所有活跃网络连接(WiFi、移动数据、以太网等)的代理评分与选择比较各网络的评分,决定默认网络处理 NetworkRequest应用请求特定类型网络时的分配。
2026-07-10 17:24:36
187
原创 Android 7系统网络(四)Native层(下)—netd Controller详解
如果说 CommandListener 是 netd 的"耳朵",Controller 层就是 netd 的"手"——所有实际的网络操作都在 Controller 中执行。CommandListener(命令接收)│├── NetworkController ← 网络接口管理├── RouteController ← 路由策略管理├── FirewallController ← 防火墙(UID过滤)├── BandwidthController ← 带宽控制(流量限制)
2026-07-10 17:24:02
272
原创 Android 7系统网络(三)Native层(上)—netd守护进程与CommandListener
源码路径class main关键设计:所有 Socket 都是stream类型(TCP),而不是dgram(UDP)。netd 的命令协议基于文本行,需要可靠的面向连接传输。Socket类型权限用途netdFramework 控制通道dnsproxydDNS 代理mdns多播 DNS (mDNS)fwmarkdfwmark 设置netlink 是 Linux 中内核与用户态通信的一种机制。内核 用户态 (netd)│ ││ 接口 wlan0 UP ││ ↓ │。
2026-07-10 17:22:58
237
原创 Android 7系统网络(二)内核层—netfilter_iptables与路由策略
DNS 拦截是 Android 网络管理的核心机制——通过将 UDP 53 端口的流量统一重定向到 netd,Android 得以按网络接口(WiFi/移动数据/VPN)使用不同的上游 DNS 服务器,并实现统一的 DNS 缓存。:传统路由是"一条路走到黑",策略路由是"看标记选路"——fwmark 就是那个标记,内核根据它决定查询哪张路由表,从而让 WiFi 和移动数据的流量各走各的路。:MASQUERADE 是一种特殊的 SNAT——自动替换源 IP 为出口接口的 IP,是移动热点的核心技术。
2026-07-08 20:22:16
260
原创 Android 7系统网络(一)全景图与调用链路概览
本篇建立了 Android 7 网络子系统的五层全景图(内核 → netd → Framework → NetworkAgent → 应用 API),并跟踪了一条 HTTP 请求在各层之间穿行的完整路径。关键理解:netd 是网络控制的中枢——Framework 层的所有网络策略(防火墙、带宽、路由、DNS)最终都通过 netd 的 Controller 落地为 iptables 规则和路由表条目。理解 netd,就理解了 Android 网络的"操作系统"。
2026-07-07 17:01:12
308
原创 Android 7系统输入(六)定制安卓系统的输入模块
定制点位置核心代码作用① DOWN/UP 打印ALOGD(...)在源头过滤 MOVE,只打印按下和抬起② 窗口名打印知道事件发给了哪个窗口② 控件名打印知道事件最终被哪个控件消费③ 焦点变更去掉窗口切换时实时输出焦点信息三个定制点覆盖了输入系统从事件产生 → 目标定位 → 焦点管理的完整链路。这些改造不需要深入理解 Android 输入系统的全部细节——只需要知道在哪个文件的哪个函数里加一行日志,就能让原本"静默"的输入系统变得透明可见。
2026-07-07 16:20:26
232
原创 Android 7系统日志(八)定制安卓的日志系统
任务方案关键点扩大缓冲区→→扩大缓冲区改为512 * 1024编译时固化,所有设备默认生效扩大缓冲区(临时调试)直接写mMaxSize[],不写属性,重启 logd 失效user 版本不打印 V/D时丢弃 V/D 日志user 版本抑制 V/D,userdebug/eng 保留完整日志系统日志导出logcat -v threadtime -b all *:I -f <文件>+ 定时轮转文件名以logcat启动时刻命名;*:I过滤 V/D 级别,减少无效日志内核日志导出。
2026-07-03 18:38:51
400
原创 Android 7系统日志(七)实战调试与常见问题分析
Android 日志系统实战调试指南 本文基于前六篇原理分析,提供真实工程问题的解决方案速查与典型案例。 核心问题速查表:涵盖8类常见日志问题(如logcat无输出、日志丢失、时间错乱等),提供可能原因、排查命令与对应原理章节。 典型案例分析: 日志突然消失:通过logcat -g检查缓冲区状态,-S定位日志滥用者,调整缓冲区大小或优化高频日志代码。 chatty消息泛滥:因循环日志触发合并机制,建议采用采样率控制或使用VERBOSE级别。 开机日志丢失:因logd启动晚于内核日志,需通过dmesg或pst
2026-07-02 21:21:42
266
原创 Android 7系统日志(六)日志缓冲区管理—容量、裁剪与统计机制
本文深入分析了Android日志系统LogBuffer的内部实现机制,主要涵盖以下内容: 核心结构:LogBuffer采用环形双向链表存储日志,每个节点为LogBufferElement,包含日志元数据、内容及链表指针。 写入流程: 检查日志大小有效性 创建日志元素 通过加锁保证线程安全 chatty机制合并重复日志 更新统计信息 触发容量检查与裁剪 chatty机制:对相同tag+uid+pid+tid的连续日志进行合并计数,显著节省空间。 裁剪策略: 特权UID日志保留 单个UID日志占比不超过12.5
2026-07-02 21:20:46
208
原创 Android 7系统日志(五)日志读取—logcat源码深度分析
Android logcat 参数原理与源码分析(基于 Android 7) 摘要: 本文从源码角度解析 logcat 各参数的工作原理。Android 7 的 logcat 实现为单个 C++ 文件(logcat.cpp),约 2000 行代码。主要内容包括: 参数解析流程:-b 选择缓冲区(main/radio/events等),-v 设置输出格式(brief/threadtime等),-c/-g 控制命令 过滤机制:通过 TAG:LEVEL 语法构建过滤器链表,如"MyTag:D"表示仅显示该标签 D
2026-07-02 20:50:53
241
原创 Android 7系统日志(四)日志写入接口—Java层与Native层
本文分析了Android日志系统的接口实现,主要涵盖Java层和Native层的日志写入机制。文章通过架构图展示了从Java层的Log.d()、Slog.d()、EventLog到Native层的ALOGD()等接口,最终都通过__android_log_buf_write()统一处理的核心流程。重点解析了android.util.Log类的源码实现,包括日志级别常量、println_native()的JNI桥接层,以及不同缓冲区(MAIN/SYSTEM)的选择机制。特别指出Slog与Log的唯一区别在于缓
2026-07-01 21:23:08
244
原创 Android 7系统日志(三)liblog库—日志写入的完整链路
本文深入分析了Android日志系统liblog模块的核心调用链路,从入口函数__android_log_buf_write()到最终通过Socket发送日志的完整流程。主要内容包括: liblog模块全景介绍,展示各组件功能与关系 入口函数__android_log_buf_write()的详细解析,包括自动路由radio缓冲区、构建iovec数组等关键步骤 函数指针机制实现懒初始化,首次调用触发初始化后替换为快速路径 logd_writer核心实现,包括logdOpen()创建非阻塞Socket连接和l
2026-07-01 20:14:17
281
原创 Android 7系统日志(二)logd守护进程启动/初始化与Socket通信
深入解析Android日志系统:logd守护进程的启动与Socket通信机制 摘要:本文深入分析Android日志系统的核心组件logd守护进程,聚焦其启动时机、初始化流程和关键Socket通信机制。logd作为系统最早启动的核心服务之一,通过三个Socket通道(logdw、logdr、logd)实现日志的写入、读取和控制功能。文章详细解析了各Socket的设计原理(包括类型选择、权限控制等),并通过源码分析揭示了logd的启动流程(从init.rc配置到main()入口)、日志接收(LogListene
2026-07-01 16:42:24
258
原创 Android 7系统日志(一)全景图与架构概览
本文系统解析Android日志模块架构,以AOSP 7为例,通过六层模型展现从应用层到内核层的完整调用链路。核心包含logd守护进程、liblog库和logcat工具三大组件,详解七大日志缓冲区的特性与用途,并剖析典型日志Log.d()的写入路径:从Java层→JNI→liblog→socket→logd→缓冲区。特别对比了Android 5.0前后日志系统的演进,指出用户态logd架构的优势,同时解答了日志丢失、延迟等常见问题的深层机制。(摘要长度:149字)
2026-06-30 14:27:34
222
原创 Android 7系统输入(五)应用侧 — InputChannel、ViewRootImpl与事件消费
设计说明输入通道不经过 Binder,降低延迟fd 注册到 MessageQueue epoll输入事件与主线程 Message 共享同一事件循环JNI 层桥接,读 socket + 回调 JavaInputStage 责任链IME 前置 → View 分发 → 合成事件,6 级流水线ViewGroup 拦截机制FINISHED 信号闭环APP 消费 → socket 回复 → InputDispatcher 移出 waitQueue → 阻止 ANR总览:建立六层架构的宏观认知EventHub。
2026-06-26 19:04:22
119
原创 Android 7系统输入(四)InputDispatcher — 事件分发与ANR超时机制
/ 500ms// 500ms// 500ms默认输入事件超时时间为500ms。这意味着从 InputDispatcher 发出事件到收到 APP 的finished信号,最多只能等 500ms。模块关键机制。
2026-06-26 19:03:36
209
原创 Android 7系统输入(三)InputReader — 原始事件到Android事件的转换引擎
文章摘要: 本文是Android输入事件处理系列第三篇,聚焦InputReader的核心作用——将EventHub采集的原始事件(RawEvent)转换为Android框架可识别的KeyEvent/MotionEvent。InputReader运行在独立线程中,通过主循环loopOnce()处理事件流,其核心流程包括:读取原始事件、根据设备类型选择对应InputMapper(如Keyboard/TouchMapper)进行转换、批量通知InputDispatcher。文章详细剖析了InputDevice的创
2026-06-26 19:02:43
225
原创 Android 7系统输入(二)EventHub — 原始事件的采集者
摘要: EventHub是Android输入系统的底层事件采集器,负责监听输入设备(如触摸屏、键盘)并通过epoll和inotify机制从/dev/input/eventX读取原始事件。其核心包括: 数据结构:Device记录设备信息(如fd、路径、类型掩码),RawEvent封装内核事件(含时间戳、设备ID等)。 初始化:创建epoll实例监控设备文件描述符,通过inotify监听设备增减,并扫描已有设备(如/dev/input/event*)。 事件循环:getEvents()使用epoll_wait阻
2026-06-26 18:40:19
235
原创 Android 7系统输入(一)从硬件到应用的事件旅程
本文是Android输入系统系列文章的第一篇,从宏观架构角度解析事件从硬件到应用的分发全链路。文章首先提出研究输入系统的必要性,指出应用层事件分发机制无法解决深层问题(如ANR机制、外设接入等)。随后通过分层架构图展示事件流水线:硬件驱动→内核层(/dev/input/eventX)→Native层(EventHub采集、InputReader加工、InputDispatcher分发)→Java层(InputManagerService)→应用层(ViewRootImpl)。重点剖析了Linux内核的inp
2026-06-26 18:02:08
399
原创 Android7 U盘插拔链路源码全解析(八)实战调试与案例分析
U盘插入问题调试指南 本文是U盘插拔链路分析系列的最后一部分,聚焦实际调试方法与典型案例分析。文章提供了完整的调试工具链,涵盖内核层到应用层的诊断方法: 调试工具: 内核层:使用dmesg查看USB枚举和设备树信息 Native层:通过logcat监控vold事件和NDC通信 Framework层:使用logcat和dumpsys检查服务状态 应用层:观察MediaScanner日志和系统UI 典型案例分析: 以"U盘图标不消失"问题为例,演示了完整的定位流程: 通过dmesg确认内核层USB设备状态 使用
2026-06-26 16:30:24
264
原创 Android7 U盘插拔链路源码全解析(七)应用层MediaScanner与SAF
本文分析了Android系统中应用层如何访问U盘文件的关键机制。主要内容包括: 权限模型:通过FUSE实现权限控制,将原始挂载点/mnt/media_rw/Udisk重新映射为不同权限级别的访问路径。 MediaScanner流程: 接收ACTION_MEDIA_MOUNTED广播触发扫描 递归扫描目录,跳过含.nomedia文件的目录 根据文件扩展名识别媒体类型 提取音频等文件的元数据(如ID3标签) 将结果写入MediaStore数据库 版本差异:Android 7及之前版本应用可直接通过路径访问U盘文
2026-06-25 22:06:16
262
原创 Android7 U盘插拔链路源码全解析(六)广播分发与SystemUI响应
本文深入分析了Android系统中USB设备插入后广播分发的完整链路和SystemUI响应机制。关键点包括: 广播分发流程:从MountService发出广播到AMS调度,再到跨进程投递到接收方进程,详细解析了权限检查、广播入队和调度过程。 接收方全景:梳理了SystemUI、MediaProvider、Settings等核心组件对存储相关广播的注册方式和处理逻辑。 SystemUI响应机制:重点分析StorageNotification如何动态注册广播接收器并处理MOUNTED/UNMOUNTED事件来显
2026-06-25 21:54:46
228
原创 Android7 U盘插拔链路源码全解析(五)Framework层(下) MountService
摘要:本文是Android USB存储设备处理系列第四篇,聚焦MountService的核心作用。MountService作为连接vold(Native层)与应用层的桥梁,主要负责磁盘/卷的挂载管理、状态广播及StorageManager API提供。在Android 7中采用NativeDaemonConnector(NDC)与vold进行基于Unix Domain Socket的文本协议通信。文章详细分析了NDC的通信机制、协议格式及事件处理流程,包括DISK_CREATED、VOLUME_CREATE
2026-06-25 21:43:53
246
原创 Android7 U盘插拔链路源码全解析(四)Framework层(上) UsbHostManager
摘要 本文是Android USB设备管理系列第四篇,聚焦Framework层的UsbHostManager机制。文章基于Android 7.1.2源码,详细分析了USB设备感知链路的实现: 初始化流程:从SystemServer启动UsbService,到条件创建UsbHostManager(需FEATURE_USB_HOST支持),再到systemReady阶段启动JNI监听线程。 核心设计: 采用分段回调模式构建设备树(begin→add配置→add接口→add端点→end) 设备信息通过HashMa
2026-06-25 21:24:36
391
原创 Android7 U盘插拔链路源码全解析(三)Native层Vold与NetlinkManage
本文是Android存储系统系列分析的第三篇,聚焦Native层的vold与NetlinkManager。vold作为用户态首个感知U盘插入的守护进程,负责接收内核uevent事件、解析设备信息、管理存储卷,并桥接Java层。文章详细剖析了vold的五大核心模块架构,包括NetlinkManager(监听内核事件)、VolumeManager(管理存储对象)、CommandListener(处理Java层命令)等,并深入源码分析了vold启动流程和事件处理机制,揭示了从内核事件到用户态存储管理的完整链路。
2026-06-23 19:04:26
211
1
Fragment切换动画
2016-04-26
闪屏页ShapeDemo
2016-08-30
选择本地图片
2016-05-17
选择本地照片
2016-04-26
JNA开发的jna.jar以及.so库文件
2017-09-04
获取webview内容并解析
2016-10-12
Android性能测试工具Emmagee
2017-02-20
多渠道打包
2016-10-11
TabLayout控件
2017-03-30
安卓6.0权限申请
2017-01-07
SpringMvc简单demo05
2017-01-17
SpringMvc框架
2017-01-14
SaveScreen
2016-12-27
属性动画的基本使用
2016-09-11
SpringMvc简单demo03
2017-01-16
安卓JS交互
2016-10-09
SpringMvc简单demo04
2017-01-16
SpringMvc简单demo
2017-01-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅