返回 Reg OPC 作品
REG OPC / ENGINEERING CASE / TEMPLATE

从一个 APK,
到可配置加载的插件。

把原本需要反复手工改代码、整理资源和打包的步骤,交给自动化构建。Template 基于 Shadow,将已有应用接入插件工程,再由宿主承载业务。

自动处理 APK

反编译、资源接入、字节码处理与重编译。

串联完整构建

自定义 Gradle 插件组织任务,集成 Shadow 产物。

减少重复工作

减少人工改码和打包投入,便于重复执行与维护。

01系统如何协同

构建端负责把 APK 变成宿主可加载的插件;运行端负责准备插件、加载运行环境,并启动其中的业务页面。

图表可左右滑动;也可聚焦图表后用方向键查看,或打开原图放大。

Template · 系统架构把 APK 处理、插件构建与宿主集成,串成一套自动化流程。Template · 系统架构把 APK 处理、插件构建与宿主集成,串成一套自动化流程。01 构建时:从现有 APK 到宿主交付包02 运行时:由宿主承载插件业务输入 APK代码、资源、Manifest放入指定目录Template 构建编排自定义 Gradle 插件反编译 / 字节码编辑Shadow 插件化编译期字节码转换Loader / Runtime插件包 → 宿主 APK组装插件和运行组件集成至宿主构建产物加载策略配置下发与业务开关:作者说明远端配置协议需单独验证宿主应用启动入口承载业务界面Plugin Manager安装插件、管理加载绑定插件进程服务Loader + Runtime加载插件模块桥接组件与生命周期插件业务界面启动插件 Application映射并启动 ActivityTemplate:处理与集成自动化 / Shadow:基础插件化能力源码可见的结构 / 调用关系作者说明的配置策略 · 需运行验证结构示意 · 依据源码与生成模板整理;配置策略依据作者说明。

绿色为构建链,青色为运行链,黄色虚线为作者说明的加载策略。

打开架构图原图 ↗

我负责的部分:Template 的自动化处理、字节码编辑、构建编排和宿主集成。基础插件化能力来自 Shadow。

技术路线:Shadow 采用零 Hook 插件化路线,减少对系统内部实现的依赖。零 Hook 描述插件化机制,工程中仍可使用反射完成组件连接。

02放入 APK,交给构建流程

拆解 APK 后,工程会整理 Manifest、资源和字节码,接入插件模块。自定义 Gradle 插件把基于 ASM 的字节码编辑纳入构建过程,结合 Shadow 的插件化转换完成打包,最后集成到宿主产物中。

图表可左右滑动查看完整内容。

Template · 自动化构建流程人工准备输入并执行构建;后续步骤由 Gradle 任务与插件协同完成。Template · 自动化构建流程人工准备输入并执行构建;后续步骤由 Gradle 任务与插件协同完成。自动化构建步骤 · 包含 Gradle 任务间的依赖关系01 · INPUT准备输入 APK放入指定目录02 · COMMAND执行宿主构建任务Gradle 串联依赖任务03 · DECODE反编译与解包解析 Manifest、代码、资源04 · BYTECODE重建字节码输入Smali → DEX → JAR05 · INTEGRATE接入插件工程资源映射 / 组件与权限适配06 · TRANSFORMShadow 转换与编译字节码转为插件运行模型07 · PACKAGE组装插件包业务插件 + Loader / Runtime08 · HOST集成宿主插件和管理组件纳入资产09 · OUTPUT生成构建产物宿主 APK,等待安装验证工程价值:减少重复修改代码、整理资源和手动打包,让处理过程可重复执行。源码流程示意 · APK 适配范围与节省工时需按项目验证,不能保证任意 APK 无改造转换。

省下的是重复处理时间:应用处理、组件适配和打包步骤集中在构建流程中,减少逐个项目手动操作。

字节码编辑:通过 ASM 读取类文件、访问并修改字节码,再写回构建产物。它与反编译、资源接入共同组成自动化处理流程;Shadow 提供插件化转换和运行时支持。

处理的对象:反编译后处理 Smali、DEX、JAR 和资源文件,再接入插件模块;这一过程不等于还原完整的原始 Java/Kotlin 工程。

03宿主承载,插件按需加载

按项目的加载策略,应用先展示宿主,再由配置决定是否加载目标插件。下图用虚线说明这项产品策略,用实线展开源码中的插件安装、运行环境加载和业务页面启动。

配置策略依据作者说明,远端配置及条件分支需结合具体版本验证;实线加载链依据源码与生成模板整理。

图表可左右滑动查看完整内容。

Template · 运行时加载流程上半部分说明产品如何选择展示内容;下半部分展示源码可见的插件加载链。Template · 运行时加载流程上半部分说明产品如何选择展示内容;下半部分展示源码可见的插件加载链。A 展示策略 · 作者说明,配置分支需结合具体版本验证启动宿主应用配置决定是否加载目标插件加载目标插件?配置下发:需验证继续展示宿主不加载目标插件进入插件加载链展示目标插件业务B 源码可见的加载链 · 部分入口由模板生成准备启动参数本地插件包路径目标插件模块安装插件解析插件包准备运行产物加载运行环境绑定进程服务加载 Runtime / Loader启动业务界面加载插件 / Application转换 Intent → Activity异常处理:入口记录异常,管理器可抛出异常;源码未确认自动回退宿主的行为。源码可见的结构 / 调用关系作者说明的配置策略 · 需运行验证加载主链路使用本地插件包;可选下载能力与远端配置服务分别验证。源码流程示意 · 宿主与插件的切换效果,需结合具体版本验证。
技术说明与适用范围

本案例依据 Template 源码、生成模板与作者说明整理。Template 负责自动化处理、构建编排和宿主集成,Shadow 提供基础插件化能力。图解展示工程结构与处理流程,具体 APK 的适配、Android 兼容范围及配置服务需按项目验证。

有类似的 Android 工程需求?

可以从现有应用、重复工作和希望改进的流程聊起。

邮件聊聊项目