经历过模块化后,项目依赖变的错综复杂,以至于编译速度过慢,部分模块依赖不合理导致包增大等。所以清理了一些不必要的依赖及重复依赖详见 commit

commits/d374e1c36d5e7a44c3b1d817216f3b6a04a9f318

现在仍有些问题,比如 SpaceBase 依赖了 VirusEngine 等问题。

全新的依赖方式

需要那个开那个

修改项目中 module.properties 的配置, true 代表以Project 方式引入,反之则是aar方式,该配置已被忽略,只对当前工程配置有效。

如果你确实想提交修改,请使用 git add -f module.properties 命令强制添加。

1
2
3
4
5
6
7
8
9
...
isBoostengineDebug=false
isAppmgrDebug=false
isCpuDebug=false
isNotifyboxDebug=false
isHardwareDebug=false
isAntivirusDebug=false
isJunkDebug=false
isAllDebug=false// 全部 Debug,即编译Project模式

添加新的模块依赖

如果你需要添加新的模块依赖,请按照以下方法,在 module.gradle 脚本中新增 compile_* 方法,如下:

1
2
3
4
5
6
7
8
9
def compile_junk(Project projectModule){
projectModule.dependencies{
if (isAllDebug.toBoolean() || isJunkDebug.toBoolean()) {
compile project(':junk')
} else {
compile(name: 'junk', ext: 'aar')
}
}
}

然后通过闭包形式传递出去,在 module.gradle 脚本中有ext 扩展属性 ,添加如下:

1
2
3
ext {
compile_junk = this.&compile_junk
}

最终通过以下方式使用

1
compile_junk(getProject())

模块公用的Libs库

在工程目录的顶级 libs 文件夹中存放着各个模块的 aar ,如果需要更新,可以通过脚本进行
全量更新,或者各模块部分更新。

更新AAR

cleaner 工程目录下,在你每次运行程序时 update-aar.gradle会自动更新已开启模块(如isJunkDebug=true)的aar 到 公用libs库中,你所需要做的就是 commit,这样能保证各位小伙伴使用的都是较新的aar

同样的你也可以手动触发Task来更新aar,相应Task 如下:

1
2
3
task updateAAR << {
eachLibsAAR()
}

版本发布

如果需要全部通过 Project 形式构建版本发布,只需添加动态参数 isAllDebug=true ,比如:

1
./gradlew -PisAllDebug=true hello

同样的可以添加更多的模块参数,来表示某些模块通过 Project 形式构建,比如:

1
./gradlew -PisAppmgrDebug=true -PisJunkDebug=true hello

注意: 默认都是以引入aar 形式构建(除SpaceBase),所以如果不添加参数,需要及时更新aar

更新日志

2017/4/21 优化Gradle编译速度,最快3s。

1、修改isAllDebug 作用域,由原存放在module.properties 修改存放在gradle.properties中。
2、可选模块include,只有在module.properties配置文件中开关为true 的模块,才会被Android Studio 所include
3、新增task 耗时监听,方便查看耗时task,在Gradle Console 中输出。
4、区分测试开发输出,新增dev productFlavors,同时关闭一些不用的productFlavors,其中dev 用于测试Jenkins 输出apk flavorsbuildVersion 用于研发本地输出apk,minSdkVersion=21,关闭fabricbuildVersion 中上报初始化,同时也优化了其他模块的依赖。
5、本地默认只有buildVersionflavors,只有在isAllDebug=true的情况,才会开启其他的flavors。以便获得更好的编译体验。还有修改完gradle配置文件后记得点build syncAlt text进行同步一下。

2017/5/27 添加自动合并多语言task

1 、使用Python脚本自动化合入多语言的task,所以在使用前需要有Python环境,相应代码块如下:

1
2
3
4
5
6
task mergeLanguage(type: Exec) {
workingDir './'
commandLine "python", "merge_strs.py",
"/home/silver/ssd/AndroidStudioProjects/cleaner_module/spaceplus_android/junk/src/main/res/",
"/home/silver/桌面/清理缓存0502-多语言/"
}

其中第一个参数是需要添入多语言模块文件目录,第二个参数是存放多语言文件目录。修改参数 执行mergeLanguage task即可合并多语言。
Alt text

2017/5/31 Auto Update Librarys AAR

1 、quartz-robot会在每周一至周五(8,12,16,20h)准时自动更新aar到git repos。

2017/5/1 更新说明

以上是模块化后解决过渡时期编译速度慢,方便开发调试等各种便利的方案,各位研发大拿体验
下,感受如丝般顺滑,如有问题及时沟通。