乐于分享
好东西不私藏

Android插件化江湖:从DroidPlugin到Shadow的技术演进

Android插件化江湖:从DroidPlugin到Shadow的技术演进

📚 Android插件化:Shadow深度剖析 · 第1/4篇

从原理到实战,腾讯Shadow插件化框架全解

👉 第1篇:Android插件化江湖:从DroidPlugin到Shadow的技术演进(本篇)

📝 第2篇:Shadow核心原理:壳子Activity与代理机制的精妙设计

📝 第3篇:Shadow Transform:编译期的魔法——字节码替换实战

📝 第4篇:Shadow实战接入与生产落地:从零搭建到稳定运行

📰 科技要闻 · 5月18日

• Google I/O 2026 明天(5月19日)正式开幕,Android 17 "Adaptive Everywhere" 将融合 Android/ChromeOS/XR,Gemini 4 同步发布。

• The Android Show I/O Edition 已提前发布重磅消息:Googlebook 笔记本品牌亮相,带来 AI Magic Pointer 光标、手机 App 直接运行等创新。

• Android 2026 全面接入 Gemini 智能体:应用自动化覆盖 DoorDash/Uber 等场景,Auto Browse 将于6月面向 Android 12+ 设备全量上线。

一段尘封的代码引发的回忆

上个月做代码考古,翻到一个2017年的老项目——里面赫然躺着DroidPlugin的集成代码。那是我第一次接触Android插件化,当时觉得这技术简直是魔法:一个APK不用安装就能跑起来?Activity、Service全都能用?黑科技莫过于此。

但今天再看那段代码,五味杂陈。满屏的反射调用、精心构造的Hook点、针对每个Android版本的兼容patch……就像一座精美但脆弱的纸牌屋——Android每升一个大版本,它就抖三抖。到了Android 14时代,那个项目的插件化代码早已被整段删除,换成了组件化方案。

从2015年到2026年,Android插件化走过了三代技术范式。每一代都试图解决同一个问题:如何在不修改系统的前提下,让一个未安装的APK像正常App一样运行。但方法论截然不同——从暴力Hook到优雅代理,是一部精彩的技术进化史。今天就来完整梳理这条演进线,看Shadow如何成为当前公认的「终极方案」。

插件化的三大核心诉求

在拆解技术方案之前,先明确一件事:为什么需要插件化?不是为了炫技,而是工程层面有三个刚需。

诉求一:动态发布

Google Play审核动辄一两天,国内渠道更新也要走发版流程。但业务等不起——运营想明天上个活动页、PM想紧急修个线上Bug、老板想A/B Test三个方案。插件化让你可以像Web一样"发布即上线",无需用户手动更新。

诉求二:包体瘦身

一个超级App动辄上百MB,但80%的用户可能只用20%的功能。把低频功能做成插件、按需下载,主包可以瘦一半以上。微信的小程序、支付宝的小程序本质上也是这个思路的产物。

诉求三:模块解耦

大型团队协作最怕的就是代码耦合。A团队改了个公共类,B团队的编译就挂了。插件化天然做到了进程级隔离——每个插件有自己的ClassLoader、自己的资源域,想耦合都难。这对百人以上的大团队是救命稻草。

第一代:Hook派——暴力美学的巅峰与落幕

2015-2017年是Hook派的黄金时代。代表框架:360的DroidPlugin、滴滴的VirtualAPK、以及360的RePlugin。

核心思路

Android的四大组件(Activity/Service/BroadcastReceiver/ContentProvider)必须在AndroidManifest.xml中注册才能被系统识别。但插件APK没有被安装,它的Manifest信息系统不知道。怎么办?

Hook派的答案简单粗暴:骗系统

具体而言,通过反射和动态代理,Hook住AMS(ActivityManagerService)和Instrumentation等系统关键节点。当插件要启动一个未注册的Activity时,先把Intent中的目标替换成宿主中预注册的"占坑"Activity(欺骗AMS的校验),等系统走完启动流程后,再在合适的时机把真正的插件Activity换回来。

// Hook派的典型套路(简化版)
// 1. 宿主Manifest中预注册占坑Activity
//    <activity name=".StubActivity1"/>
//    <activity name=".StubActivity2"/>
//    ... 注册几十个以备不时之需

// 2. Hook Instrumentation
val activityThread = Class
    .forName("android.app.ActivityThread")
val sCurrentAT = activityThread
    .getDeclaredField("sCurrentActivityThread")
sCurrentAT.isAccessible = true
val currentAT = sCurrentAT.get(null)

val mInstruField = activityThread
    .getDeclaredField("mInstrumentation")
mInstruField.isAccessible = true
val original = mInstruField.get(currentAT)
    as Instrumentation

// 替换为自定义Instrumentation,拦截execStartActivity
mInstruField.set(currentAT,
    PluginInstrumentation(original))

DroidPlugin:全量Hook的极致

DroidPlugin是Hook派的极致代表——它试图让插件APK完全像独立App一样运行,不修改插件任何代码。为此它Hook了近20个系统服务:AMS、PMS、INotificationManager、IContentProvider……几乎把Framework层翻了个遍。

效果确实惊艳:随便拿一个第三方APK丢进去就能跑。但代价也很惊人——每个Android版本升级都是一次灾难。Google重构了某个系统类的内部实现?DroidPlugin就得跟着改Hook点。新增了一个隐藏API限制?又要找绕过方案。

VirtualAPK:滴滴的务实选择

相比DroidPlugin的"全量虚拟化",滴滴的VirtualAPK走了一条更务实的路:只Hook必要的点,插件和宿主可以共享代码和资源。Hook点收敛到Instrumentation和AMS两处,大幅降低了兼容性风险。

但本质没变——依然是靠反射拿系统内部字段、靠Hook骗过系统校验。只要这个根基不变,就永远在和系统升级赛跑。

致命一击:Android 9的Hidden API限制

2018年,Google在Android 9(API 28)中祭出了杀手锏:限制非公开SDK接口访问。具体来说,系统维护了一份隐藏API名单,分为白名单、浅灰名单、深灰名单和黑名单。应用通过反射访问黑名单API会直接抛异常,深灰名单会弹Toast警告。

这对Hook派是釜底抽薪。插件化框架依赖的那些内部字段和方法——ActivityThread.mInstrumentation、ActivityManagerNative.getDefault()、各种IXxxManager的Binder代理——很多都进了限制名单。

更可怕的是Google的态度很明确:这个限制只会越来越严,不会放松。Android 10收紧了灰名单,Android 11进一步限制,到Android 14/15,绕过方案的空间已经极其有限。社区虽然不断找到新的绕过方式(双重反射、unsafe内存操作、JNI直调等),但这些绕过本身也随时可能被封堵。

Hook派插件化框架陷入了一个死循环:每个新Android版本都要紧急适配,且没有任何稳定性保证。这不是工程方案,这是军备竞赛。

第二代:轻量Hook + 占坑派

认识到全量Hook的脆弱性后,一些框架开始收敛——RePlugin是这一阶段的代表。

RePlugin:只Hook一个点

360的RePlugin号称"只Hook了ClassLoader一个点"。它的策略是:在宿主中预注册大量占坑组件,运行时通过自定义ClassLoader把类加载重定向到插件APK。因为只改了类加载这一环,系统API变动对它的影响相对小很多。

但这个方案有自己的代价:

• 需要在宿主Manifest中预注册大量占坑Activity(通常几十上百个),按启动模式、进程分类,非常臃肿

• 插件的Activity启动必须走特定API,不能直接用标准的startActivity

• 虽然Hook点少了,但那"一个Hook点"本身(PathClassLoader的parent delegation)在某些厂商ROM上也会出兼容性问题

第二代方案是一个折中——比第一代稳定得多,但没有根本解决"依赖系统内部实现"的问题。只要有一个Hook点,就永远存在被系统升级打破的风险。

第三代:Shadow——零反射、零Hook的代理派

2019年,腾讯开源了Shadow。它的README上赫然写着一句让所有做过插件化的人都要深呼一口气的话:

"零反射无Hack实现插件技术:从理论上就已经确定无需对任何系统做兼容开发,更无任何隐藏API调用,和Google限制非公开SDK接口访问的策略完全不冲突。"

这不是营销话术——Shadow确实做到了。它的核心思路与前两代截然不同:不骗系统,而是让插件代码"乖乖配合"

核心设计哲学

Shadow的思路可以用一句话概括:用编译期字节码替换,把插件中的Android组件调用替换为Shadow自定义的代理组件调用

具体而言:

1. 壳子Activity代理

宿主中注册真正的HostActivity(这是一个合法的、系统认可的Activity)。当插件要启动"PluginMainActivity"时,实际启动的是HostActivity。HostActivity内部持有一个PluginActivity实例,把生命周期事件一一转发给它。

关键区别:HostActivity是正儿八经注册在Manifest中的,AMS认可它的存在。不需要骗任何人。

2. 编译期字节码Transform

插件代码中写的是标准的Android API——extends Activity、调用setContentView()、调用startActivity()。Shadow在编译期通过Gradle Transform + ASM字节码操作,把这些调用全部替换:

• extends Activity → extends ShadowActivity

• setContentView(R.layout.xxx) → shadowSetContentView(R.layout.xxx)

• startActivity(intent) → shadowStartActivity(intent)

开发者写的还是标准Android代码,插件源码可以独立安装运行(这点极其重要——意味着调试和测试都很方便)。只有打包成插件时,Transform才会介入做替换。

3. 全动态化

Shadow把插件框架本身(Loader、Manager)也做成了动态下发的插件。这意味着:

• 宿主中只嵌入极少量代码(约15KB,160个方法数)

• 插件框架的Bug可以随插件一起热修,不用发宿主版本

• 不同插件可以用不同版本的框架,互不干扰

三代方案对比一览

对比维度 → Hook派(DroidPlugin/VirtualAPK) | 轻Hook派(RePlugin) | 代理派(Shadow)

━━━━━━━━━━━━━━━━━━━━━━

反射/Hook数量 → 10-20+个系统服务 | 1个ClassLoader | 0个

隐藏API依赖 → 大量 | 少量 | 无

系统兼容性 → 每版本必须适配 | 偶尔需适配 | 理论上永久兼容

插件侵入性 → 低(不改插件代码)| 中(需用特定API)| 低(源码不改,编译期替换)

插件可独立运行 → 是 | 否 | 是

宿主体积增量 → 大(几百KB)| 中 | 极小(15KB)

框架可热更 → 否 | 否 | 是(全动态)

Google Play合规 → 风险高 | 有风险 | 合规

线上验证规模 → 中等 | 大(360全系产品)| 大(腾讯亿级用户)

Shadow为什么能做到"零Hook"

很多人第一次看到Shadow的宣传会想:真有这么神?不Hook怎么可能实现插件化?

关键在于思维方式的转变:

Hook派的思路是"不改插件,改系统"——让系统以为插件的组件是合法的。这必然要深入系统内部。

Shadow的思路是"不改系统,改插件"——在编译期把插件代码中的系统API调用替换成Shadow的API调用。系统根本不知道有插件的存在,它看到的就是一个普通的宿主App在正常调用标准API。

打个比方:

• Hook派像是伪造通行证蒙混过关——通行证格式变了就得重新造

• Shadow像是找一个有真通行证的人(HostActivity),让他代替你去办事——不管通行证格式怎么变,真证永远能通过

这就是为什么Shadow能"从理论上确定无需做任何系统兼容"——它不触碰系统内部实现,自然不怕系统内部实现变化。

Shadow的整体架构速览

为后续三篇打好基础,先看Shadow的宏观架构:

Shadow 插件化框架 · 整体架构

零反射 · 全动态 · 宿主增量仅15KB

🟢 宿主 App(Host)

🏠

HostActivity

壳子Activity
代理转调插件

已注册组件

⚙️

HostService

壳子Service
代理转调插件

已注册组件

📦

极小的引导代码

加载动态框架层
仅15KB / 160方法

入口逻辑

动态加载

🔵 动态下发的框架层(也是插件)

🔄

PluginLoader

ClassLoader管理
资源加载

🔧

PluginManager

下载/版本管理
生命周期调度

Transform

字节码编辑
AOP父类替换

📋

Runtime

运行时环境
Activity基类

加载 & 转调

🟣 业务插件(Plugin APK)

📱

Plugin Activity

编译期父类被替换
可独立安装运行

🗂️

Plugin Service

支持跨进程调用
透明代理机制

🎨

Plugin Resources

资源隔离加载
自定义Theme

15KB

宿主增量

~160

方法数

0

反射调用

0

非公开API

四个关键角色:

• Host(宿主):只包含壳子组件和极少的引导代码(15KB级别),负责在Manifest中注册合法组件供系统调度

• Manager(管理器):动态下发的插件之一,负责插件包的下载、解压、版本管理

• Loader(加载器):动态下发的插件之一,负责ClassLoader创建、资源加载、组件生命周期转发

• Plugin(业务插件):你的业务代码,编译期经过Transform处理

2026年回看:插件化还有必要吗?

这是很多人会问的问题。毕竟Google自己推出了App Bundle + Dynamic Feature Module(动态功能模块),Play Store原生支持按需下载模块。是不是不再需要第三方插件化方案了?

答案是:取决于你的场景

Dynamic Feature适合:

• 只走Google Play分发的海外App

• 不需要热更能力(模块更新要走Play Store审核)

• 模块拆分粒度较粗(按功能模块)

插件化(Shadow)仍然不可替代:

• 国内市场(无Google Play,无法使用Dynamic Feature的按需下载)

• 需要真正的热发布能力(不经过应用市场审核,分钟级上线)

• 超级App的生态(如微信/支付宝,需要加载第三方开发的"小程序")

• 需要故障隔离(插件崩溃不影响宿主)

• 多团队大规模协作的解耦诉求

特别是在国内,插件化依然是大型App的刚需。而在所有插件化方案中,Shadow是目前唯一一个不依赖系统隐藏API、理论上永久免维护的方案。这就是它被称为"终极方案"的原因。

本系列的规划

这个系列将用4篇文章把Shadow从原理到实战讲透:

• 第1篇(本篇):技术流派全景——为什么Shadow是必然的演进方向

• 第2篇:核心原理——壳子Activity如何代理插件Activity?生命周期怎么同步?ClassLoader怎么隔离?深入源码级细节

• 第3篇:Transform魔法——Gradle Transform + ASM如何在编译期完成字节码替换?四大组件各自的替换策略是什么?

• 第4篇:实战落地——从零搭建Shadow工程、把一个独立App改造为插件、性能调优、稳定性保障、生产踩坑总结

每篇都会有完整的代码示例和工程实践,不是泛泛而谈的概述文。如果你正在为App的动态化方案选型,或者想深入理解Android插件化的底层原理,这个系列值得跟完。

📌 本篇小结

• 插件化解决三大工程刚需:动态发布、包体瘦身、模块解耦

• 第一代Hook派(DroidPlugin/VirtualAPK)效果惊艳但与系统升级为敌

• Android 9的Hidden API限制是Hook派的致命一击

• 第二代轻Hook派(RePlugin)收敛Hook点但未根本解决问题

• Shadow用编译期Transform + 运行时代理实现零反射零Hook

• 核心思维转变:不改系统改插件,用真通行证代替伪造通行证

• 2026年国内大型App的插件化仍是刚需,Shadow是最合规的选择

— 「Android插件化:Shadow深度剖析」系列 · 第1篇完 —

下一篇:Shadow核心原理——壳子Activity与代理机制的精妙设计

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-21 06:52:45 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/639798.html
  2. 运行时间 : 0.095298s [ 吞吐率:10.49req/s ] 内存消耗:4,769.73kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=58f8c9f9c64f4899d74122bb141e2a82
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000357s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000569s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000272s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000269s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000500s ]
  6. SELECT * FROM `set` [ RunTime:0.000187s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000487s ]
  8. SELECT * FROM `article` WHERE `id` = 639798 LIMIT 1 [ RunTime:0.000591s ]
  9. UPDATE `article` SET `lasttime` = 1781995965 WHERE `id` = 639798 [ RunTime:0.010001s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000280s ]
  11. SELECT * FROM `article` WHERE `id` < 639798 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000443s ]
  12. SELECT * FROM `article` WHERE `id` > 639798 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001581s ]
  13. SELECT * FROM `article` WHERE `id` < 639798 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000603s ]
  14. SELECT * FROM `article` WHERE `id` < 639798 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001110s ]
  15. SELECT * FROM `article` WHERE `id` < 639798 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002689s ]
0.096939s