Подтвердить что ты не робот

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

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

`Could not find property 'processManifest' on com.and[email protected]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')
        }
    }
4b9b3361

Ответ 1

В соответствии с документацией для разделов 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/Library
  • getZipAlign

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

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

Ответ 2

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

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

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

Ответ 3

Я не смог найти решение проблемы, но просто обходной путь. Плагин 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"]
        }
     }
    

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

Ответ 4

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. Думайте, что это может быть полезно.

Ответ 5

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