Small 开源项目教程:Android组件化开发的终极解决方案
2026-01-17 09:28:24作者:苗圣禹Peter
还在为Android应用体积庞大、编译缓慢、团队协作困难而烦恼吗?Small作为一款轻量级的跨平台插件化框架,为你提供了一套完整的组件化解决方案。本文将带你从零开始,全面掌握Small的使用技巧和最佳实践。
什么是Small?
Small是一个轻量级的跨平台插件化框架,支持Android和iOS平台。它能够将一个完整的APK应用拆分为多个独立的插件模块,包括:
- *app.模块 - 业务功能模块
- *lib.模块 - 公共库模块
- *web.模块 - Web应用模块
Small的核心优势
mindmap
root((Small优势))
编译加速
增量编译
并行构建
缓存机制
体积优化
按需加载
资源分离
代码精简
团队协作
模块解耦
独立开发
灵活部署
动态更新
热修复
灰度发布
A/B测试
环境准备与项目搭建
1. 安装Small模板
cd Android
cp -r templates /Applications/Android\ Studio.app/Contents/plugins/android/lib/
2. 创建宿主工程
使用Android Studio创建新项目时,选择@Small模板:
// 根目录build.gradle配置
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'net.wequick.tools.build:gradle-small:1.5.0'
}
}
apply plugin: 'net.wequick.small'
small {
aarVersion = '1.5.0'
}
3. 创建插件模块
模块命名规范:
- 业务模块:
app.main,app.detail,app.home - 库模块:
lib.utils,lib.style,lib.analytics - Web模块:
web.about,web.settings
包名必须包含对应的域名空间:
.app.- 业务模块.lib.- 库模块.web.- Web模块
核心配置详解
路由配置(bundle.json)
{
"version": "1.0.0",
"bundles": [
{
"uri": "main",
"pkg": "com.example.mysmall.app.main"
},
{
"uri": "detail",
"pkg": "com.example.mysmall.app.detail"
},
{
"uri": "home",
"pkg": "com.example.mysmall.app.home"
}
]
}
Application配置
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Small.preSetUp(this);
}
}
启动配置
public class LaunchActivity extends Activity {
@Override
protected void onStart() {
super.onStart();
Small.setBaseUri("http://example.com/");
Small.setUp(this, new Small.OnCompleteListener() {
@Override
public void onComplete() {
Small.openUri("main", LaunchActivity.this);
}
});
}
}
编译与构建
1. 构建基础库
./gradlew buildLib -q
2. 打包所有组件
./gradlew buildBundle -q
3. 单独编译模块
./gradlew -p app.main assembleRelease
./gradlew -p lib.utils assembleRelease
高级特性与最佳实践
模块间通信
// 启动其他模块的Activity
Small.openUri("detail", MainActivity.this);
// 传递参数
Bundle bundle = new Bundle();
bundle.putString("id", "123");
Small.openUri("detail?from=main", MainActivity.this, bundle);
资源访问
// 访问宿主资源
getResources().getIdentifier("app_name", "string", getPackageName());
// 访问插件资源
Small.getContext("com.example.mysmall.app.main")
.getResources()
.getIdentifier("main_title", "string", "com.example.mysmall.app.main");
依赖管理
| 依赖类型 | 配置方式 | 示例 |
|---|---|---|
| 宿主依赖 | app模块build.gradle | compile 'com.android.support:appcompat-v7:27.1.1' |
| 插件私有依赖 | 插件模块build.gradle | compile 'com.squareup.retrofit2:retrofit:2.4.0' |
| 公共库依赖 | lib模块 + 插件依赖 | compile project(':lib.utils') |
混淆配置
# small-rules.pro
-keep class net.wequick.small.** { *; }
-keep class **.R$* { *; }
-keepclassmembers class * {
public <init>(android.content.Context);
}
实战案例:电商应用组件化
flowchart TD
A[宿主App] --> B[用户模块 app.user]
A --> C[商品模块 app.product]
A --> D[订单模块 app.order]
A --> E[支付模块 app.payment]
A --> F[工具库 lib.utils]
A --> G[样式库 lib.style]
B --> H[登录功能]
B --> I[注册功能]
B --> J[个人中心]
C --> K[商品列表]
C --> L[商品详情]
C --> M[搜索功能]
D --> N[订单列表]
D --> O[订单详情]
D --> P[售后处理]
模块拆分策略
| 模块类型 | 模块名称 | 功能描述 | 开发团队 |
|---|---|---|---|
| 宿主 | app | 入口和基础配置 | 架构组 |
| 业务模块 | app.user | 用户相关功能 | 用户组 |
| 业务模块 | app.product | 商品相关功能 | 商品组 |
| 业务模块 | app.order | 订单相关功能 | 订单组 |
| 业务模块 | app.payment | 支付相关功能 | 支付组 |
| 公共库 | lib.utils | 通用工具类 | 基础组 |
| 公共库 | lib.style | 样式和主题 | UI组 |
常见问题与解决方案
1. 编译错误处理
# 清理缓存重新编译
./gradlew clean
./gradlew buildLib
./gradlew buildBundle
2. 资源冲突解决
<!-- 在插件模块的build.gradle中 -->
android {
resourcePrefix "module_prefix_"
}
3. 版本兼容性问题
// 统一配置版本号
ext {
compileSdkVersion = 27
buildToolsVersion = "27.0.3"
minSdkVersion = 16
targetSdkVersion = 27
supportVersion = "27.1.1"
}
性能优化建议
1. 编译速度优化
// gradle.properties配置
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.caching=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m
2. 包体积优化
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
3. 运行时性能
// 延迟加载非核心模块
public void onFeatureNeeded(String feature) {
if (!Small.isLoadable(feature)) {
Small.loadBundle(feature, new Small.OnCompleteListener() {
@Override
public void onComplete() {
Small.openUri(feature, CurrentActivity.this);
}
});
} else {
Small.openUri(feature, CurrentActivity.this);
}
}
总结与展望
Small作为一款成熟的Android组件化框架,为大型应用开发提供了完整的解决方案。通过本文的学习,你应该能够:
- ✅ 理解Small的核心概念和架构设计
- ✅ 掌握Small的环境搭建和项目配置
- ✅ 熟练使用Small进行模块开发和编译
- ✅ 解决实际开发中遇到的常见问题
- ✅ 应用最佳实践优化项目性能
随着移动应用复杂度的不断提升,组件化开发已经成为必然趋势。Small以其轻量级、易用性和强大的功能,为Android开发者提供了理想的组件化方案。
立即开始你的Small之旅,体验组件化开发带来的高效与便捷!
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
532
3.75 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
336
178
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
886
596
Ascend Extension for PyTorch
Python
340
405
暂无简介
Dart
772
191
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
986
247
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
416
4.21 K
React Native鸿蒙化仓库
JavaScript
303
355