-
Notifications
You must be signed in to change notification settings - Fork 43
/
UseLocalPlugin.gradle
61 lines (52 loc) · 2.19 KB
/
UseLocalPlugin.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import groovy.json.JsonSlurper
apply plugin: UseLocalPlugin
class UseLocalPlugin implements Plugin<Settings> {
@Override
void apply(Settings settings) {
// Gradle初始化,此时可以获取到Settings对象
settings.gradle.settingsEvaluated {
// 加载useLocal.json文件
def useLocalFile = new File(settings.getRootDir(), "useLocal.json")
if (!useLocalFile.exists()) {
println("useLocal.json文件不存在")
return
}
def useLocalText = useLocalFile.text
// 解析JSON文本
def jsonSlurper = new JsonSlurper()
def useLocalData = jsonSlurper.parseText(useLocalText)
// include
useLocalData.each { item ->
if (item.useLocal) {
settings.include(":${item.moduleName}")
settings.project(":${item.moduleName}").projectDir = new File(item.modulePath)
}
println("item.useLocal: ${item.useLocal}")
println("item.moduleName: ${item.moduleName}")
println("item.modulePath: ${item.modulePath}")
println("item.moduleGav: ${item.moduleGav}")
}
// 依赖替换
SwitchAarToCode(settings.gradle, useLocalData)
}
}
def SwitchAarToCode(gradle, useLocalData) {
// 所有Project对象evaluate完毕之后,会回调gradle.projectsEvaluated
gradle.projectsEvaluated {
gradle.allprojects { pro ->
// 这个app可以根据你的项目名称来判断
if (pro.name == "app") {
pro.configurations.all { configuration ->
configuration.resolutionStrategy.dependencySubstitution { substitutions ->
useLocalData.each { item ->
if (item.useLocal) {
substitute module(item.moduleGav) using substitutions.project(":${item.moduleName}")
}
}
}
}
}
}
}
}
}