когда плагин android gradle обновляется до 3.1.0 с 3.0.1, произошла ошибка, код gradle предназначен для идентификатора фиксированных ресурсов

avatar
Lotus Yang
8 апреля 2018 в 02:01
838
1
1

предыдущий код (это public-xml.gradle для идентификатора фиксированных ресурсов public.xml)

afterEvaluate {  
    for (variant in android.applicationVariants) {  
        def scope = variant.getVariantData().getScope()  
        String mergeTaskName = scope.getMergeResourcesTask().name  
        def mergeTask = tasks.getByName(mergeTaskName)  

        mergeTask.doLast {  
            copy {  
                int i=0  
                from(android.sourceSets.main.res.srcDirs) {  
                    include 'values/public.xml'  
                    rename 'public.xml', (i++ == 0? "public.xml": "public_${i}.xml")  
                }  

                into(mergeTask.outputDir)  
            }  
        }  
    }  
}

теперь ошибка

No signature of method: com.android.build.gradle.internal.scope.VariantScopeImpl.getMergeResourcesTask()is applicable for argument types: () values: []
Possible solutions: getMergeJavaResourcesTask()

Я проверяю код для VariantScopeImp.java и обнаруживаю, что в 3.0.1 код

 @Nullable private AndroidTask<MergeResources> mergeResourcesTask;    

в 3.1.0 код

@Nullable private MergeResources mergeResourcesTask;    

когда я меняю код public-xml.gradle на

def scope = variant.getVariantData().getScope()
def mergeTask = scope.mergeResourcesTask    

новая ошибка

Cannot invoke method doLast() on null object    

Что мне для этого сделать? спасибо

Источник

Ответы (1)

avatar
KFJK
22 августа 2018 в 12:27
1

попробуйте: def mergeTask = variant.getMergeResources() работа для 3.1.4