Android开发

Android应用Small组件化实例

2016-08-16  本文已影响189人  chsasaw

Small插件化方案适用于将一个APK拆分为多个公共库插件、业务模块插件的场景。

工程build.gradle中引入small,目前已发布gradle插件1.0.0-beta7版本,small组件1.1.0-beta4.

buildscript {    
    ...
    dependencies {        
          classpath 'com.android.tools.build:gradle:2.1.2'        
          classpath 'net.wequick.tools.build:gradle-small:1.0.0-beta7'      
          .... 
    }
}
...
apply plugin: 'net.wequick.small'

small {    
      aarVersion = '1.1.0-beta4'
}

工程结构包括宿主工程app,业务模块插件app.*,以及lib.*公共库插件工程。如:

工程目录结构 宿主工程结构

宿主工程中仅仅应用入口HostApp,启动首屏展示LoadingActivity(不包含任何网络加载逻辑,广告图片加载逻辑放在业务插件app.launch中)。build.gradle中包含signingConfigs、buildTypes等,插件公共依赖可放到dependencies中,不会打包到插件中。

bundle.json

记得在assets中bundle.json文件配置插件包名和路由rules,否则small将找不到对应插件。

业务模块之间互相独立,通过small来管理跳转和fragment的获取。业务模块包含自己的APIService(网络请求使用lib.net,底层是retroifit+okhttp)、UI(Activity、Fragment、View、Adapter)、Model、Application。

Small Activity跳转

Small.openUri("main", LaunchActivity.this);

Small获取Fragment

BaseFragment fragment = (BaseFragment)Small.createObject("fragment-v4", "community/community", MainActivity.this);

lib模块的引用最好在宿主工程中也保留一份,这样不会打包到插件中,可以使最后只保留一份引用。Account也可以做成lib,供其他app插件调用。

lib.*模块

lib.style中包含通用的动画、颜色、规格、尺寸、主题。

lib.utils放置一些通用help、utils,依赖style(dialog主题)。

lib.config 应用的配置信息,版本号、包名、系统信息等。

lib.constant 暂时放置一些常量、枚举、key、id等。

lib.analytics统计API

lib.net 网络请求框架,retroifit+okhttp,处理token错误等全局错误。

lib.base放置Activity、Application、Fragment等的基类。

lib.router Small的uri特殊处理

其他依赖最好通过私有maven仓库管理。

jni_plugin用来存放一些so文件,以及jni接口。

jsbridge--webview和native交互的一个库,参考
https://github.com/gzsll/WebViewJavascriptBridge

上一篇 下一篇

猜你喜欢

热点阅读