首页
/ Small 开源项目教程:Android组件化开发的终极解决方案

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组件化框架,为大型应用开发提供了完整的解决方案。通过本文的学习,你应该能够:

  1. ✅ 理解Small的核心概念和架构设计
  2. ✅ 掌握Small的环境搭建和项目配置
  3. ✅ 熟练使用Small进行模块开发和编译
  4. ✅ 解决实际开发中遇到的常见问题
  5. ✅ 应用最佳实践优化项目性能

随着移动应用复杂度的不断提升,组件化开发已经成为必然趋势。Small以其轻量级、易用性和强大的功能,为Android开发者提供了理想的组件化方案。

立即开始你的Small之旅,体验组件化开发带来的高效与便捷!

登录后查看全文
热门项目推荐
相关项目推荐