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之旅,体验组件化开发带来的高效与便捷!
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00
热门内容推荐
最新内容推荐
Degrees of Lewdity中文汉化终极指南:零基础玩家必看的完整教程Unity游戏翻译神器:XUnity Auto Translator 完整使用指南PythonWin7终极指南:在Windows 7上轻松安装Python 3.9+终极macOS键盘定制指南:用Karabiner-Elements提升10倍效率Pandas数据分析实战指南:从零基础到数据处理高手 Qwen3-235B-FP8震撼升级:256K上下文+22B激活参数7步搞定机械键盘PCB设计:从零开始打造你的专属键盘终极WeMod专业版解锁指南:3步免费获取完整高级功能DeepSeek-R1-Distill-Qwen-32B技术揭秘:小模型如何实现大模型性能突破音频修复终极指南:让每一段受损声音重获新生
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
567
3.83 K
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
892
667
Ascend Extension for PyTorch
Python
376
445
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
349
200
昇腾LLM分布式训练框架
Python
116
145
暂无简介
Dart
797
197
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.37 K
777
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
1.13 K
271
React Native鸿蒙化仓库
JavaScript
308
359