下一代秒拍组件化构思

code · 2018-10-31

目前阶段的秒拍工程已经有了一套成熟的组件化体系,不过仍然很多问题等待解决。

1.组件化完全依赖于工程的一些配置文件,导致没有一定经验的开发人员不能合理的把控好开闭原则。
2.当时提出的构想(组建一键切换为插件)仍然没有实现
3.繁琐的配置会容易出错。

为了解决这些问题,所以将提出下一代组件化的框架。

1.基本思路
主工程到底应该依赖什么?

现阶段的主工程,都是通过gradle的dependence直接compile引入gradle工程内部的project,如果可以更换一种方式,比如通过 "compile远程依赖",来引入其他工程,内部的module也都加上版本控制,这样会大大增加工程的稳定性。

主工程配置如下

MpAppWrapperConfig {
  localMavenDir = "mpLocalMaven"
  exclude['yxplayer']
}

其中,localMavenDir ,为指定的一个本地maven目录。通过此方法,构建一个本地的maven。然后其他工程publish到此maven目录下,可以增加编译的速度。

module怎样定义最好?

现在控制是否为单独编译模式存在着很大的隐患,配置文件都是通过明显的配置项在gradle.properties中配置。完全可以通过gradle plugin的方式来控制这些东西

module 中的config如下

MpCompConfig {
  moduleName = "com.yixia.module.player"
  debugDir = ['src/debug/java']
  debugResDir = ['src/debug/res']
  launcherActivity = "com.yixia.module.player.DebugActivity"
  app = "com.yixia.module.player.PYApplication"
  localMavenDir = "mpLocalMaven"
}

这里的配置项比较多,依次列举。

  • moduleName指定独立编译期间的包名。
  • debugDir,独立APP模式下的目录,在Module会剔除这项。
  • debugResDir,独立模式下的res目录。
  • launcherActivity ,独立模式下的主Debug用Activity。
  • app ,此工程的独立app,如编译进主工程会自动打包进入application。
  • localMavenDir输出的maven地址。
组件化 Android transform gradle
Theme Jasmine by Kent Liao