Skip to content

Latest commit

 

History

History
34 lines (32 loc) · 1.48 KB

微信在android工程中应用到的pins隔离.md

File metadata and controls

34 lines (32 loc) · 1.48 KB

之前在业务迭代过程中,发现随着需求不断增多,原来按照细粒度划分的模块逐渐臃肿,加之维护人员比较多,不再清晰的模块划分会导致开发人员将新增的类没有规则的放置,之前还合理的修改,可能过几个月就看不懂了。当时有人提出了将现有的module拆分出更小的几个module,但是这些业务又存在关联,拆分出来可能会交叉依赖,而且也会增加工程的编译速度。

在这种情况下,我们就找到一个比较合适且大厂也在应用的方案,微信的pins隔离,它主要是以p_xx的文件夹将module内更内聚的业务以及资源放在一起,形成显示隔离,方便维护,如下图所示: pins隔离工程结构图

整体实现上也比较简单,依赖于强大的gralde构建,下面主要记录下gradle的修改:

android {
	sourceSets {
		main {
			def src_dir = new File(projectDir, "src")
			def dirs = src_dir
					.listFiles()
					.toList()
					.stream()
					.filter(new Predicate<File>() {
						@Override
						boolean test(File file) {
							return file.getName().startsWith("p_")
						}
					})
					.map {
						return it.getName()
					}
					.collect(Collections.toList())
			println("pins-module: " + dirs)
			dirs.each { dirs ->
					java.srcDir("src/$dir/java")
					java.srcDir("src/$dir/res")
			}
		}
	}
}