forked from EastWoodYang/MicroModule
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmicro.gradle
More file actions
181 lines (149 loc) · 5.89 KB
/
micro.gradle
File metadata and controls
181 lines (149 loc) · 5.89 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
import com.android.manifmerger.ManifestMerger2
import com.android.manifmerger.MergingReport
import com.android.manifmerger.XmlDocument
import com.android.utils.ILogger
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.android.tools.build:manifest-merger:25.3.0"
}
}
def aidlSrcDirs = []
def assetsSrcDirs = []
def javaSrcDirs = []
def jniSrcDirs = []
def jniLibsSrcDirs = []
def manifestSrcFiles = []
def resSrcDirs = []
def logger = new ILogger() {
@Override
void error(Throwable t, String msgFormat, Object... args) {
}
@Override
void warning(String msgFormat, Object... args) {
}
@Override
void info(String msgFormat, Object... args) {
}
@Override
void verbose(String msgFormat, Object... args) {
}
};
def mainMicroAndroidManifestFile;
def microModuleHandler = { ->
File moduleDir = new File("$projectDir");
String[] microModuleDirs = moduleDir.list();
if (!microModuleDirs.toString().contains('main')) {
throw new GradleException('without micro-module with name \'main\'')
}
def collection = files { moduleDir.listFiles() }
collection.each { File microModuleDir ->
if (!microModuleDir.isDirectory()) return
// check [micro.properties] exists or not
File microModulePropertiesFile = new File(microModuleDir.absolutePath + '\\micro.properties');
if (!microModulePropertiesFile.exists()) return
// read micro module properties
def microModuleProperties = new Properties()
microModulePropertiesFile.withInputStream { microModuleProperties.load(it) }
microModuleProperties = new ConfigSlurper().parse(microModuleProperties)
def enable = microModuleProperties.getProperty('enable')
if (enable.size() != 0 && !enable.toBoolean()) return
def microModuleName = microModuleDir.getName();
// add aidl.srcDir
def aidlSrcDir = microModuleProperties.getProperty('aidl.srcDir')
if (aidlSrcDir.size() == 0) {
aidlSrcDir = microModuleName + "\\src\\main\\aidl";
}
aidlSrcDir = aidlSrcDir.toString()
if (!aidlSrcDirs.contains(aidlSrcDir)) {
aidlSrcDirs << aidlSrcDir
}
// add assets.srcDir
def assetsSrcDir = microModuleProperties.getProperty('assets.srcDir')
if (assetsSrcDir.size() == 0) {
assetsSrcDir = microModuleName + "\\src\\main\\assets";
}
assetsSrcDir = assetsSrcDir.toString()
if (!assetsSrcDirs.contains(assetsSrcDir)) {
assetsSrcDirs << assetsSrcDir
}
// add jni.srcDir
def jniSrcDir = microModuleProperties.getProperty('jni.srcDir')
if (jniSrcDir.size() == 0) {
jniSrcDir = microModuleName + "\\src\\main\\jni";
}
jniSrcDir = jniSrcDir.toString()
if (!jniSrcDirs.contains(jniSrcDir)) {
jniSrcDirs << jniSrcDir
}
// add jniLibs.srcDir
def jniLibsSrcDir = microModuleProperties.getProperty('jniLibs.srcDir')
if (jniLibsSrcDir.size() == 0) {
jniLibsSrcDir = microModuleName + "\\src\\main\\jniLibs";
}
jniLibsSrcDir = jniLibsSrcDir.toString()
if (!jniLibsSrcDirs.contains(jniLibsSrcDir)) {
jniLibsSrcDirs << jniLibsSrcDir
}
// add java.srcDir
def javaSrcDir = microModuleProperties.getProperty('java.srcDir')
if (javaSrcDir.size() == 0) {
javaSrcDir = microModuleName + "\\src\\main\\java";
}
javaSrcDir = javaSrcDir.toString()
if (!javaSrcDirs.contains(javaSrcDir)) {
javaSrcDirs << javaSrcDir
}
// add res.srcDir
def resSrcDir = microModuleProperties.getProperty('res.srcDir')
if (resSrcDir.size() == 0) {
resSrcDir = microModuleName + "\\src\\main\\res";
}
resSrcDir = resSrcDir.toString()
if (!resSrcDirs.contains(resSrcDir)) {
resSrcDirs << resSrcDir
}
// add manifest.srcFile
def manifestSrcFile = microModuleProperties.getProperty('manifest.srcFile')
if (manifestSrcFile.size() == 0) {
manifestSrcFile = microModuleName + "\\src\\AndroidManifest.xml";
}
manifestSrcFile = manifestSrcFile.toString()
if (microModuleName == 'main') {
mainMicroAndroidManifestFile = manifestSrcFile
} else if (!manifestSrcFiles.contains(manifestSrcFile)) {
manifestSrcFiles << manifestSrcFile
}
}
File mainManifestFile = new File("$projectDir\\" + mainMicroAndroidManifestFile);
ManifestMerger2.MergeType mergeType = ManifestMerger2.MergeType.APPLICATION
XmlDocument.Type documentType = XmlDocument.Type.MAIN;
ManifestMerger2.Invoker invoker = new ManifestMerger2.Invoker(mainManifestFile, logger, mergeType, documentType);
for (int i = 0; i < manifestSrcFiles.size(); i++) {
File microManifestFile = new File("$projectDir\\" + manifestSrcFiles[i]);
if (microManifestFile.exists()) {
invoker.addLibraryManifest(microManifestFile)
}
}
def mergingReport = invoker.merge()
def moduleAndroidManifest = mergingReport.getMergedDocument(MergingReport.MergedManifestKind.MERGED)
new File("$buildDir").mkdirs()
def file = new File("$buildDir\\AndroidManifest.xml")
file.createNewFile()
file.write(moduleAndroidManifest)
android.sourceSets.main.aidl.srcDirs = aidlSrcDirs
android.sourceSets.main.assets.srcDirs = assetsSrcDirs
android.sourceSets.main.java.srcDirs = javaSrcDirs
android.sourceSets.main.jni.srcDirs = jniSrcDirs
android.sourceSets.main.jniLibs.srcDirs = jniLibsSrcDirs
android.sourceSets.main.res.srcDirs = resSrcDirs
android.sourceSets.main.manifest.srcFile "$buildDir\\AndroidManifest.xml"
}
task microModuleTask {
microModuleHandler()
}
preBuild.doFirst {
microModuleHandler()
}