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
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0245- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python05
项目优选
收起
deepin linux kernel
C
27
13
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
641
4.19 K
Ascend Extension for PyTorch
Python
478
579
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
934
841
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
386
272
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.51 K
866
暂无简介
Dart
884
211
仓颉编程语言运行时与标准库。
Cangjie
161
922
昇腾LLM分布式训练框架
Python
139
162
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21