1717
1818import com .reandroid .app .AndroidManifest ;
1919import com .reandroid .arsc .chunk .xml .AndroidManifestBlock ;
20- import com .reandroid .arsc .chunk .xml .ResXmlAttribute ;
2120import com .reandroid .arsc .chunk .xml .ResXmlElement ;
2221import com .reandroid .utils .StringsUtil ;
23- import com .reandroid .utils .collection .ArrayCollection ;
2422import com .reandroid .utils .collection .CollectionUtil ;
2523import com .reandroid .xml .XMLPath ;
2624
2725import java .util .Iterator ;
28- import java .util .List ;
2926import java .util .Set ;
3027
3128public class AndroidManifestBlockMerger {
3229
3330 private boolean mEnabled ;
34- private boolean mBuildFusedModules ;
3531 private AndroidManifestBlockSplitSanitizer mSplitSanitizer ;
3632
37- private final List <String > fusedModuleNameList ;
3833 private final Set <XMLPath > excludePaths ;
3934
4035 private AndroidManifestBlock baseManifest ;
4136
4237 public AndroidManifestBlockMerger () {
4338 this .mEnabled = true ;
44- this .mBuildFusedModules = true ;
4539 this .mSplitSanitizer = new AndroidManifestBlockSplitSanitizer ();
4640
47- this .fusedModuleNameList = new ArrayCollection <>();
4841 this .excludePaths = CollectionUtil .asHashSet (
49- XMLPath .compile ("/manifest/uses-split" ),
50- XMLPath .compile ("/manifest/uses-split" )
42+ AndroidManifest .PATH_MANIFEST .element (AndroidManifest .TAG_uses_split )
5143 );
5244 }
5345
@@ -56,8 +48,6 @@ public AndroidManifestBlockMerger initializeBase(AndroidManifestBlock base) {
5648 throw new IllegalArgumentException ("Base manifest already initialized" );
5749 }
5850 this .baseManifest = base ;
59- addFusedModuleName ("base" );
60- this .addFusedModules (base );
6151 AndroidManifestBlockSplitSanitizer sanitizer = getSplitSanitizer ();
6252 if (sanitizer != null ) {
6353 sanitizer .sanitize (base );
@@ -69,10 +59,6 @@ public AndroidManifestBlockMerger setEnabled(boolean enabled) {
6959 this .mEnabled = enabled ;
7060 return this ;
7161 }
72- public AndroidManifestBlockMerger setBuildFusedModules (boolean buildFusedModules ) {
73- this .mBuildFusedModules = buildFusedModules ;
74- return this ;
75- }
7662 public AndroidManifestBlockMerger exclude (XMLPath xmlPath ) {
7763 this .excludePaths .add (xmlPath );
7864 return this ;
@@ -83,16 +69,12 @@ public AndroidManifestBlockMerger setSplitSanitizer(AndroidManifestBlockSplitSan
8369 }
8470 public AndroidManifestBlockMerger reset () {
8571 this .baseManifest = null ;
86- this .fusedModuleNameList .clear ();
8772 return this ;
8873 }
8974
9075 public boolean isEnabled () {
9176 return mEnabled ;
9277 }
93- public boolean isBuildFusedModules () {
94- return mBuildFusedModules ;
95- }
9678 public AndroidManifestBlock getBaseManifestBlock () {
9779 return baseManifest ;
9880 }
@@ -108,11 +90,7 @@ public boolean merge(AndroidManifestBlock split) {
10890 if (split == base ) {
10991 return false ;
11092 }
111- boolean fusedUpdated = addFusedModules (split );
11293 boolean result = mergeManifestElement (split .getManifestElement ());
113- if (fusedUpdated ) {
114- commitFusedModules ();
115- }
11694 AndroidManifestBlockSplitSanitizer sanitizer = getSplitSanitizer ();
11795 if (sanitizer != null ) {
11896 result = sanitizer .sanitize (base ) || result ;
@@ -142,8 +120,6 @@ private boolean mergeNamedChild(ResXmlElement application) {
142120 ResXmlElement element = iterator .next ();
143121 if (element .hasAttribute (AndroidManifest .ID_name )) {
144122 result = addNamedElement (element ) || result ;
145- } else {
146-
147123 }
148124 }
149125 return result ;
@@ -195,52 +171,6 @@ private AndroidManifestBlock requireBaseManifestInitialized() {
195171 }
196172 return baseManifest ;
197173 }
198- private void commitFusedModules () {
199- if (!isBuildFusedModules ()) {
200- return ;
201- }
202- List <String > fusedModuleNameList = this .fusedModuleNameList ;
203- int size = fusedModuleNameList .size ();
204- if (size == 0 || (size == 1 && fusedModuleNameList .contains ("base" ))) {
205- return ;
206- }
207- ResXmlElement element = getBaseManifestBlock ()
208- .getOrCreateNamedElement (XMLPath .compile ("/manifest/application/meta-data" ),
209- AndroidManifest .VALUE_com_android_dynamic_apk_fused_modules );
210- ResXmlAttribute attribute = element .getOrCreateAndroidAttribute (
211- AndroidManifest .NAME_value ,
212- AndroidManifest .ID_value );
213- attribute .setValueAsString (StringsUtil .join (fusedModuleNameList , "," ));
214- }
215- private boolean addFusedModules (AndroidManifestBlock manifestBlock ) {
216- boolean result = false ;
217- if (isBuildFusedModules ()) {
218- result = addFusedModuleName (manifestBlock .getSplit ());
219- result = addFusedModuleNames (manifestBlock .getFusedModuleNames ()) || result ;
220- }
221- return result ;
222- }
223- private boolean addFusedModuleNames (String [] names ) {
224- boolean result = false ;
225- if (names != null ) {
226- for (String name : names ) {
227- result = addFusedModuleName (name ) || result ;
228- }
229- }
230- return result ;
231- }
232- private boolean addFusedModuleName (String name ) {
233- if (StringsUtil .isEmpty (name )) {
234- return false ;
235- }
236- if (name .indexOf (',' ) >= 0 ) {
237- return addFusedModuleNames (StringsUtil .split (name , ',' ));
238- } else if (!fusedModuleNameList .contains (name )) {
239- fusedModuleNameList .add (name );
240- return true ;
241- }
242- return false ;
243- }
244174 private static boolean containsNamedManifestChild (String tag ) {
245175 return AndroidManifest .TAG_application .equals (tag ) ||
246176 AndroidManifest .TAG_queries .equals (tag );
0 commit comments