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

В настоящее время я пытаюсь обновить Android Studio до 1.0.0-RC. Это, похоже, требует плагина Android 1.0.0-rc1. После обновления у меня появилась следующая ошибка:

`Could not find property 'processManifest' on com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@b9da89c.` 

С некоторым копанием кажется, что processManifest является одним из устаревших свойств, которые были удалены в версии 0.14.3 . Любая идея, что такое новое имя свойства? Это же руководство пользователя не было обновлено для новой версии, поэтому я не могу найти для него никакой документации.

EDIT: Вот код, который нуждается в свойстве. Я использую его для ввода некоторых значений времени сборки в манифест:

 applicationVariants.all { variant -> variant.processManifest << { def manifestOutFile = variant.processManifest.manifestOutputFile def newFileContents = manifestOutFile.getText('UTF-8') .replace("{GOOGLE_MAPS_KEY}", variant.buildType.ext.google_maps_key) manifestOutFile.write(newFileContents, 'UTF-8') } } 

Solutions Collecting From Web of "Не удалось найти свойство processManifest на com.android.build.gradle.internal.api.ApplicationVariantImpl"

Согласно документации для VariantOutput APK ( http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits ) этот метод переместился в VariantOutput (доступный через variant.outputs ):

Предупреждение о устаревании : API текущего варианта содержит некоторые методы, которые перемещаются под его выходы. Метод все еще существует, но будет работать, если есть 2+ выхода. Они будут полностью удалены в 1.0. Это:

  • прибудете / setOutputFile
  • getProcessResources
  • getProcessManifest
  • getPackageApplication / Библиотека
  • getZipAlign

Дополнительные методы для VariantOutput

  • Строка getAbiFilter ()
  • Строка getDensityFilter ()
  • Задача getAssemble ()
  • Строка getName ()
  • Строка getBaseName ()
  • String getDirName
  • Set / getVersionOverride // опция versionCode override
  • Int getVersionCode () // возвращает либо переопределение версии Code из выходного, либо codeCode из самого варианта

Я получил эту ошибку и после обновления до Android Studio 1.0.0 на бета-канале. Тем не менее, я не мог найти ссылку в моих собственных файлах gradle для processManifest . После некоторых поисков я понял, что мне нужен новый плагин Robolectric gradle:

https://github.com/robolectric/robolectric-gradle-plugin/releases

Использование версии 0.14.0 Robolectric Gradle Plugin (и версии 2.4 Robolectric) разрешило ошибку для меня.

Я не смог найти решение проблемы, но просто обходным путем. Плагин Android Gradle версии 0.11 представляет новый API, называемый Manifest merger . Это позволяет добиться того же, что и мой хак позволил мне сделать.

Вот необходимые изменения:

  • Окружайте любую переменную, которую вы вводите в манифест, с помощью "${GOOGLE_MAPS_KEY}"
  • Определите карту manifestPlaceholders в каждом BuildType. То есть:

     buildTypes { debug { manifestPlaceholders = [GOOGLE_MAPS_KEY: "xxxxxxxxxxxxxxxxxxxx"] } release { manifestPlaceholders = [GOOGLE_MAPS_KEY: "xxxxxxxxxxxxxxxxxxxx"] } } 

Это оно! Плагин автоматически заменит эти переменные в вашем манифесте. Довольно аккуратно!

 android.applicationVariants.all{ variant -> variant.outputs.each { output -> output.processManifest.doLast{ def manifestFile = output.processManifest.manifestOutputFile def updatedContent =manifestFile.getText('UTF-8').replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}") manifestFile.write(updatedContent, 'UTF-8') } } 

}

Я изменил его таким образом, который просто добавляет новый слой за пределы старого. Это работает, потому что processManifest теперь находится в поле outputs . Думайте, это может быть полезно.

В моем случае я получал эту ошибку, потому что была зависимость от папки библиотеки, указанной в моих настройках.gradle . По-видимому, в этой папке было много ошибочных конфигураций. Поэтому, как только я удалил его из settings.gradle, проект был составлен просто отлично.