无法找到属性' processManifest'在com.android.build.gradle.internal.api.ApplicationVariantImpl上

时间:2014-12-04 20:01:07

标签: android gradle android-studio android-gradle build.gradle

我目前正在尝试将Android Studio更新为1.0.0-RC。这似乎需要gradle Android插件1.0.0-rc1。更新后,我开始出现以下错误:

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

通过一些挖掘,似乎processManifest0.14.3 version中已删除的已弃用属性之一。知道新的属性名称是什么?新版本的相同用户指南尚未更新,因此我无法找到相关文档。

编辑:这是需要该属性的代码。我用它将一些构建时值注入清单:

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')
        }
    }

5 个答案:

答案 0 :(得分:51)

在Beta频道上更新到Android Studio 1.0.0后,我也遇到了此错误。但是,我在自己的gradle文件中找不到processManifest的任何引用。经过一番搜索,我意识到我需要一个新的Robolectric gradle插件:

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

使用版本0.14.0的Robolectric Gradle插件(以及Robolectric的2.4版本)为我解决了错误。

答案 1 :(得分:10)

我无法找到问题的解决方案,只是解决方法。 Android Gradle插件版本0.11引入了一个名为Manifest merger的新API。它允许实现我的黑客允许我做的同样的事情。

以下是所需的更改:

  • 使用"${GOOGLE_MAPS_KEY}"
  • 包围您在清单中注入的任何变量
  • 在每个BuildType中定义manifestPlaceholders地图。那就是:

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

就是这样!该插件将自动替换您的Manifest中的那些变量。非常整洁!

答案 2 :(得分:8)

根据APK拆分(http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits)的文档,此方法已移至VariantOutput(可通过variant.outputs获得):

弃用警告:当前变体API包含一些已在其输出下移动的方法。该方法仍然存在,但如果有2+输出则会失败。它们将在1.0中完全删除 这些是:

  • GET / setOutputFile
  • getProcessResources
  • getProcessManifest
  • getPackageApplication /库
  • getZipAlign

VariantOutput

上的其他方法
  • String getAbiFilter()
  • String getDensityFilter()
  • 任务getAssemble()
  • String getName()
  • String getBaseName()
  • String getDirName
  • set / getVersionOverride //可选的versionCode覆盖
  • int getVersionCode()//返回输出中的versionCode覆盖或变体本身的versionCode

答案 3 :(得分:6)

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字段中。 认为这可能会有所帮助。

答案 4 :(得分:0)

在我的情况下,我收到此错误,因为我的 settings.gradle 中指定的库文件夹存在依赖关系。那个文件夹显然有很多错误的配置。因此,只要我从settings.gradle中删除它,项目编译就好了。