@@ -5,29 +5,48 @@ package com.ss.android.ugc.bytex.gradletoolkit
55 */
66
77import com.android.build.gradle.tasks.MergeResources
8+ import com.android.ide.common.resources.ResourceSet
89import java.io.File
910
1011fun MergeResources.resourceSetList (): List <File > {
12+ val resourceSets = try {
13+ resourceSetList1()
14+ } catch (e: Exception ) {
15+ resourceSetList2()
16+ }
17+ return resourceSets.flatMap { it.sourceFiles }.toSet().toList()
18+ }
19+
20+
21+ fun MergeResources.resourceSetList1 (): Iterable <ResourceSet > {
1122
1223 val computeResourceSetListMethod = MergeResources ::class .java.declaredMethods
13- .firstOrNull { it.name == " computeResourceSetList" && it.parameterCount == 0 }
14- ? : return emptyList()
24+ .find { it.name == " computeResourceSetList" && it.parameterCount == 0 }!!
1525
1626 val oldIsAccessible = computeResourceSetListMethod.isAccessible
1727 try {
1828 computeResourceSetListMethod.isAccessible = true
29+ return computeResourceSetListMethod.invoke(this ) as Iterable <ResourceSet >
30+ } finally {
31+ computeResourceSetListMethod.isAccessible = oldIsAccessible
32+ }
33+ }
1934
20- val resourceSets = computeResourceSetListMethod.invoke(this ) as ? Iterable <* >
21- ? : return emptyList()
35+ fun MergeResources.resourceSetList2 (): Iterable <ResourceSet > {
36+ val getConfiguredResourceSets = MergeResources ::class .java.declaredMethods
37+ .find { it.name == " getConfiguredResourceSets" && it.parameterCount == 1 }!!
2238
23- return resourceSets.mapNotNull { resourceSet ->
24- val getSourceFiles = resourceSet?.javaClass?.methods?.find { it.name == " getSourceFiles" && it.parameterCount == 0 }
25- val files = getSourceFiles?.invoke(resourceSet)
26- @Suppress(" UNCHECKED_CAST" )
27- files as ? Iterable <File >
28- }.flatten()
39+ val getPreprocessor = MergeResources ::class .java.declaredMethods
40+ .find { it.name == " getPreprocessor" && it.parameterCount == 0 }!!
2941
42+ val getConfiguredResourceSetsAccess = getConfiguredResourceSets.isAccessible
43+ val getPreprocessorAccess = getPreprocessor.isAccessible
44+ try {
45+ getConfiguredResourceSets.isAccessible = true
46+ getPreprocessor.isAccessible = true
47+ return getConfiguredResourceSets.invoke(this , getPreprocessor.invoke(this )) as Iterable <ResourceSet >
3048 } finally {
31- computeResourceSetListMethod.isAccessible = oldIsAccessible
49+ getConfiguredResourceSets.isAccessible = getConfiguredResourceSetsAccess
50+ getPreprocessor.isAccessible = getPreprocessorAccess
3251 }
3352}
0 commit comments