Android应用Small组件化实例

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

  • 完美内置所有插件支持内置于宿主包中

  • 高度透明插件编码、布局编写方式与独立应用开发无异
    插件代码调试与整包开发无异

  • 极致剪裁对插件分离所有一切能分离的公共代码、资源

  • 无缝链接通过设定URI,宿主、本地化应用插件、本地化web插件、在线网页,以及任何自定义的插件之间能够相互调起与传递参数

  • 跨平台目前已支持AndroidiOS以及html5插件。并且三者之间可以通过同一套Javascript接口进行通信。

工程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.*公共库插件工程。如:

工程目录结构
  • 1.app 宿主工程
宿主工程结构

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

bundle.json

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

  • 2.app.业务模块*

业务模块之间互相独立,通过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);
  • 3.lib.模块*

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特殊处理

  • 4.其他第三方模块和aar

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容