1+ import com.android.manifmerger.ManifestMerger2
2+ import com.android.manifmerger.MergingReport
3+ import com.android.manifmerger.XmlDocument
4+ import com.android.utils.ILogger
5+
6+ buildscript {
7+ repositories {
8+ jcenter()
9+ }
10+ dependencies {
11+ classpath " com.android.tools.build:manifest-merger:25.3.0"
12+ }
13+ }
14+
115def aidlSrcDirs = []
216def assetsSrcDirs = []
317def javaSrcDirs = []
@@ -6,31 +20,29 @@ def jniLibsSrcDirs = []
620def manifestSrcFiles = []
721def resSrcDirs = []
822
9- def mainMicroAndroidManifestFile;
23+ def logger = new ILogger () {
24+ @Override
25+ void error (Throwable t , String msgFormat , Object ... args ) {
1026
11- def filterManifest = { manifest ->
12-
13- def from = manifest. indexOf(" <application>" ) + " <application>" . length()
14- def end = manifest. indexOf(" </application>" )
15- def body = manifest. substring(from, end). trim();
16- if (body == " " ) return " "
17-
18- def packageNamePattern = ' package=\" .*\" '
19- def packageNameMatcher = manifest. substring(0 , from) =~ packageNamePattern
20- packageNameMatcher. matches()
21- def packageName = packageNameMatcher[0 ]. substring(packageNameMatcher[0 ]. indexOf(" \" " ) + 1 , packageNameMatcher[0 ]. length() - 1 )
22-
23- def namePattern = ' android:name=\" .*\" '
24- def nameMatcher = body =~ namePattern
25- nameMatcher. matches()
26- nameMatcher. each {
27- def name = it. substring(it. indexOf(" \" " ) + 1 , it. length() - 1 );
28- if (name[0 ] == " ." ) {
29- body = body. replaceAll(" \" " + name + " \" " , " \" " + packageName + name + " \" " )
30- }
3127 }
32- return body
33- }
28+
29+ @Override
30+ void warning (String msgFormat , Object ... args ) {
31+
32+ }
33+
34+ @Override
35+ void info (String msgFormat , Object ... args ) {
36+
37+ }
38+
39+ @Override
40+ void verbose (String msgFormat , Object ... args ) {
41+
42+ }
43+ };
44+
45+ def mainMicroAndroidManifestFile;
3446
3547def microModuleHandler = { ->
3648
@@ -45,7 +57,7 @@ def microModuleHandler = { ->
4557 if (! microModuleDir. isDirectory()) return
4658
4759 // check [micro.properties] exists or not
48- File microModulePropertiesFile = new File (microModuleDir. absolutePath + ' / micro.properties' );
60+ File microModulePropertiesFile = new File (microModuleDir. absolutePath + ' \\ micro.properties' );
4961 if (! microModulePropertiesFile. exists()) return
5062
5163 // read library properties
@@ -61,7 +73,7 @@ def microModuleHandler = { ->
6173 // add aidl.srcDir
6274 def aidlSrcDir = microModuleProperties. getProperty(' aidl.srcDir' )
6375 if (aidlSrcDir. size() == 0 ) {
64- aidlSrcDir = microModuleName + " / src/ main/ aidl" ;
76+ aidlSrcDir = microModuleName + " \\ src\\ main\\ aidl" ;
6577 }
6678 aidlSrcDir = aidlSrcDir. toString()
6779 if (! aidlSrcDirs. contains(aidlSrcDir)) {
@@ -71,7 +83,7 @@ def microModuleHandler = { ->
7183 // add assets.srcDir
7284 def assetsSrcDir = microModuleProperties. getProperty(' assets.srcDir' )
7385 if (assetsSrcDir. size() == 0 ) {
74- assetsSrcDir = microModuleName + " / src/ main/ assets" ;
86+ assetsSrcDir = microModuleName + " \\ src\\ main\\ assets" ;
7587 }
7688 assetsSrcDir = assetsSrcDir. toString()
7789 if (! assetsSrcDirs. contains(assetsSrcDir)) {
@@ -81,7 +93,7 @@ def microModuleHandler = { ->
8193 // add jni.srcDir
8294 def jniSrcDir = microModuleProperties. getProperty(' jni.srcDir' )
8395 if (jniSrcDir. size() == 0 ) {
84- jniSrcDir = microModuleName + " / src/ main/ jni" ;
96+ jniSrcDir = microModuleName + " \\ src\\ main\\ jni" ;
8597 }
8698 jniSrcDir = jniSrcDir. toString()
8799 if (! jniSrcDirs. contains(jniSrcDir)) {
@@ -91,7 +103,7 @@ def microModuleHandler = { ->
91103 // add jniLibs.srcDir
92104 def jniLibsSrcDir = microModuleProperties. getProperty(' jniLibs.srcDir' )
93105 if (jniLibsSrcDir. size() == 0 ) {
94- jniLibsSrcDir = microModuleName + " / src/ main/ jniLibs" ;
106+ jniLibsSrcDir = microModuleName + " \\ src\\ main\\ jniLibs" ;
95107 }
96108 jniLibsSrcDir = jniLibsSrcDir. toString()
97109 if (! jniLibsSrcDirs. contains(jniLibsSrcDir)) {
@@ -101,7 +113,7 @@ def microModuleHandler = { ->
101113 // add java.srcDir
102114 def javaSrcDir = microModuleProperties. getProperty(' java.srcDir' )
103115 if (javaSrcDir. size() == 0 ) {
104- javaSrcDir = microModuleName + " / src/ main/ java" ;
116+ javaSrcDir = microModuleName + " \\ src\\ main\\ java" ;
105117 }
106118 javaSrcDir = javaSrcDir. toString()
107119 if (! javaSrcDirs. contains(javaSrcDir)) {
@@ -111,7 +123,7 @@ def microModuleHandler = { ->
111123 // add res.srcDir
112124 def resSrcDir = microModuleProperties. getProperty(' res.srcDir' )
113125 if (resSrcDir. size() == 0 ) {
114- resSrcDir = microModuleName + " / src/ main/ res" ;
126+ resSrcDir = microModuleName + " \\ src\\ main\\ res" ;
115127 }
116128 resSrcDir = resSrcDir. toString()
117129 if (! resSrcDirs. contains(resSrcDir)) {
@@ -121,7 +133,7 @@ def microModuleHandler = { ->
121133 // add manifest.srcFile
122134 def manifestSrcFile = microModuleProperties. getProperty(' manifest.srcFile' )
123135 if (manifestSrcFile. size() == 0 ) {
124- manifestSrcFile = microModuleName + " / src/ AndroidManifest.xml" ;
136+ manifestSrcFile = microModuleName + " \\ src\\ AndroidManifest.xml" ;
125137 }
126138 manifestSrcFile = manifestSrcFile. toString()
127139 if (microModuleName == ' main' ) {
@@ -132,25 +144,19 @@ def microModuleHandler = { ->
132144
133145 }
134146
135- def microModuleManifest = ' '
147+ File mainManifestFile = new File (" $projectDir \\ " + mainMicroAndroidManifestFile);
148+
149+ ManifestMerger2.MergeType mergeType = ManifestMerger2.MergeType . APPLICATION
150+ XmlDocument.Type documentType = XmlDocument.Type . MAIN ;
151+ ManifestMerger2.Invoker invoker = new ManifestMerger2.Invoker (mainManifestFile, logger, mergeType, documentType);
136152 for (int i = 0 ; i < manifestSrcFiles. size(); i++ ) {
137- def srcFilePath = manifestSrcFiles[i]. toString()
138- def name = srcFilePath. subSequence(0 , srcFilePath. indexOf(" /" ))
139- File manifestFile = new File (" $projectDir " + " /" + srcFilePath)
140- if (! manifestFile. exists()) continue
141- def body = filterManifest(manifestFile. getText())
142- if (body == " " ) continue
143- microModuleManifest + = " <!-- MICRO MODULE START: " + name + " -->\n " + body + " \n <!-- MICRO MODULE END: " + name + " -->\n\n " ;
153+ File microManifestFile = new File (" $projectDir \\ " + manifestSrcFiles[i]);
154+ if (microManifestFile. exists()) {
155+ invoker. addLibraryManifest(microManifestFile)
156+ }
144157 }
145-
146- def mainMicroAndroidManifest = file(mainMicroAndroidManifestFile). getText(). toString(). trim()
147- def applicationPattern = ' </\\ s{0,}application\\ s{0,}>'
148- def applicationMatcher = mainMicroAndroidManifest =~ applicationPattern
149- applicationMatcher. matches()
150- def from = mainMicroAndroidManifest. indexOf(applicationMatcher[0 ])
151- def moduleAndroidManifest = mainMicroAndroidManifest. substring(0 , from). toString(). trim() + " \n\n "
152- moduleAndroidManifest + = microModuleManifest
153- moduleAndroidManifest + = " " + mainMicroAndroidManifest. substring(from, mainMicroAndroidManifest. length()). toString(). trim()
158+ def mergingReport = invoker. merge()
159+ def moduleAndroidManifest = mergingReport. getMergedDocument(MergingReport.MergedManifestKind . MERGED )
154160
155161 new File (" $buildDir " ). mkdirs()
156162 def file = new File (" $buildDir \\ AndroidManifest.xml" )
@@ -163,7 +169,7 @@ def microModuleHandler = { ->
163169 android. sourceSets. main. jni. srcDirs = jniSrcDirs
164170 android. sourceSets. main. jniLibs. srcDirs = jniLibsSrcDirs
165171 android. sourceSets. main. res. srcDirs = resSrcDirs
166- android. sourceSets. main. manifest. srcFile " $buildDir / AndroidManifest.xml"
172+ android. sourceSets. main. manifest. srcFile " $buildDir \\ AndroidManifest.xml"
167173}
168174
169175task microModuleTask {
0 commit comments