it-roy-ru.com

Не удалось найти свойство 'outputFile' на com.Android.build.gradle.internal.api.ApplicationVariantImpl

После обновления до AS 1.0 RC 1 и плагина 0.14.4 у меня возникают проблемы с переименованием части моего build.gradle:

applicationVariants.all { variant ->
            def file = variant.outputFile
            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
        }

бросает сейчас:

Error:(78, 0) Could not find property 'outputFile' on com.And[email protected]67e7625f.

а также я не могу перейти к классу ApplicationVariantImpl, чтобы посмотреть, как свойство могло быть переименовано. Кто-нибудь знает обходные пути для этого?

48
ligi

попробуй это

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def file = output.outputFile
        output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
    }
}
83
Oleg Khalidov

Более подробно:

applicationVariants.all { variant ->
    variant.outputs.each  { output ->
        output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
    }
}
21
Chris

Это может произойти по нескольким причинам:

1.) Сначала, как было сказано ранее @Khalidov , попробуйте

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        output.outputFile = ...
    }
}

2.) Вторая попытка обновить все остальные плагины. 

Например, я получил эту проблему для Spoon , которая решена обновлением Spoon до: 

classpath 'com.stanfy.spoon:spoon-gradle-plugin:0.14.1'
6
cosic

Или где есть только один вариант:

def apk = outputs[0].outputFile

Вместо

def apk = variant.outputFile
5
Ollie C

Убедитесь, что вы используете последнюю версию Gradle (не плагин, а Gradle самостоятельно).

Проверьте свой gradle-wrapper.properties. Вы работаете в Gradle 2.1?

Подробнее о совместимости: http://tools.Android.com/tech-docs/new-build-system/version-compatibility

1
Pedro Loureiro

Мне удалось решить следующим образом:

старый:

buildTypes { 
libertação {

    runProguard false  // esta linha tem que ser mudado

    proguardFiles getDefaultProguardFile ( 'Android.txt proguard-' ),  'proguard-rules.pro' 
} 

}

новые:

buildTypes { 
libertação {

    minifyEnabled false  // nova versão

    proguardFiles getDefaultProguardFile ( 'Android.txt proguard-' ),  'proguard-rules.pro' 
} 

}

отредактировано в файле build.gradle вашего проекта, как описано в этом сообщении ruan65 Ошибка: (26, 0) Метод Gradle DSL не найден: 'runProguard ()'

и после правки тоже эта строка:

applicationVariants . all { variant -> 
variant . outputs . each { output -> 
    def file = output . outputFile 
    output . outputFile =  new  File ( file . parent , file . name . replace ( ".apk" ,  "-"  + defaultConfig . versionName +  ".apk" )) 
} 

}

как было сказано там .. Это меня устроило!

0
Williaan Lopes