Skip to content

Commit

Permalink
fix ResourceSet not found in AGP3.1
Browse files Browse the repository at this point in the history
  • Loading branch information
yangzhiqian committed Jul 27, 2020
1 parent 28a94be commit 31ceff8
Showing 1 changed file with 6 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,34 @@ package com.ss.android.ugc.bytex.gradletoolkit
*/

import com.android.build.gradle.tasks.MergeResources
import com.android.ide.common.resources.ResourceSet
import java.io.File

//todo fix reflection
fun MergeResources.resourceSetList(): List<File> {
val resourceSets = try {
resourceSetList1()
} catch (e: Exception) {
resourceSetList2()
}
return resourceSets.flatMap { it.sourceFiles }.toSet().toList()
return resourceSets.flatMap { it!!.javaClass.getMethod("getSourceFiles").invoke(it) as List<File> }.toSet().toList()
}


fun MergeResources.resourceSetList1(): Iterable<ResourceSet> {
private fun MergeResources.resourceSetList1(): Iterable<*> {

val computeResourceSetListMethod = MergeResources::class.java.declaredMethods
.find { it.name == "computeResourceSetList" && it.parameterCount == 0 }!!

val oldIsAccessible = computeResourceSetListMethod.isAccessible
try {
computeResourceSetListMethod.isAccessible = true
return computeResourceSetListMethod.invoke(this) as Iterable<ResourceSet>
return computeResourceSetListMethod.invoke(this) as Iterable<*>
} finally {
computeResourceSetListMethod.isAccessible = oldIsAccessible
}
}

fun MergeResources.resourceSetList2(): Iterable<ResourceSet> {
private fun MergeResources.resourceSetList2(): Iterable<*> {
val getConfiguredResourceSets = MergeResources::class.java.declaredMethods
.find { it.name == "getConfiguredResourceSets" && it.parameterCount == 1 }!!

Expand All @@ -44,7 +44,7 @@ fun MergeResources.resourceSetList2(): Iterable<ResourceSet> {
try {
getConfiguredResourceSets.isAccessible = true
getPreprocessor.isAccessible = true
return getConfiguredResourceSets.invoke(this, getPreprocessor.invoke(this)) as Iterable<ResourceSet>
return getConfiguredResourceSets.invoke(this, getPreprocessor.invoke(this)) as Iterable<*>
} finally {
getConfiguredResourceSets.isAccessible = getConfiguredResourceSetsAccess
getPreprocessor.isAccessible = getPreprocessorAccess
Expand Down

0 comments on commit 31ceff8

Please sign in to comment.