alibaba / freeline

A super fast build tool for Android, an alternative to Instant Run
https://www.freelinebuild.com/
BSD 3-Clause "New" or "Revised" License
5.48k stars 623 forks source link

不能真正判断文件是否改变的. #676

Closed Guaidaodl closed 7 years ago

Guaidaodl commented 7 years ago

项目中用到了 GreenDao, 为了方便, 每次 Build 之前都会重新生成一次代码. 大部分时候代码是不会有变化. 只是文件的创建时间变了.

FreeLine 每次都会认为文件改变. 然后因为改变的文件个数太多导致触发全量编译.

lomanyong commented 7 years ago

@Guaidaodl 必然的,freeline只根据时间戳进行判断,而不是文件的md5。不过,你配置的文件生成目录是否有问题呢?通常来说如果文件生成在build目录下的话,freeline是不会去检查那里的文件变化的。

如果可以给出sample工程,或者工程的配置的话,应该可以帮助你解决这个问题

Guaidaodl commented 7 years ago

原因我明白. 只是希望改进一下.

lomanyong commented 7 years ago

@Guaidaodl 这个不好做改动,为了增加扫描效率所以使用了时间戳判断。按理说,如果处理的好的话,GreenDao生成的文件应该都不会在正常的sourceSets里,应该在build目录下,不会被扫描的...

如果要真的做改动的话,只能加入文件监听watchman,就目前来说主要还是增加了工程的复杂度,不利于快速集成,不是很值得这么去处理。

Guaidaodl commented 7 years ago

@lomanyong 不要加入监听啊, 第一次生成的时候写入 md5, 然后一样用 mtime 判断, mtime 不一样的情况下再用 md5 值确定一下是否发生改变就好了.这样应该基本只会影响第一次的效率.

只是我个人想法啊. 看了一下源码, 最初也有考虑 md5, 不过后来抛弃了. 应该还有一些我不知道的原因. FreeLine 还是很好用的.