android gradle android-studio android-gradle build.gradle

No se pudo encontrar la propiedad ''processManifest'' en com.android.build.gradle.internal.api.ApplicationVariantImpl



android-studio android-gradle (5)

Actualmente estoy tratando de actualizar Android Studio a 1.0.0-RC. Esto parece requerir el complemento de Android gradle 1.0.0-rc1. Después de la actualización, comencé a tener el siguiente error:

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

Con algunas excavaciones, parece que processManifest es una de las propiedades obsoletas que se eliminaron en la versión 0.14.3 . ¿Alguna idea de cuál es el nombre de la nueva propiedad? La misma guía del usuario no se ha actualizado para la nueva versión, por lo que no puedo encontrar ninguna documentación para ella.

EDITAR: Aquí está el código que necesita la propiedad. Lo uso para inyectar algunos valores de tiempo de construcción en el manifiesto:

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


De acuerdo con la documentación para las divisiones de APK ( http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits ) este método se ha movido a VariantOutput (disponible a través de variant.outputs ):

Advertencia de desuso : la variante actual API contiene algunos métodos que se han movido bajo sus salidas. El método aún está allí, pero fallará si hay más de 2 salidas. Serán eliminados completamente en 1.0 Estos son:

  • get / setOutputFile
  • getProcessResources
  • getProcessManifest
  • getPackageApplication / Library
  • getZipAlinear

Métodos adicionales en VariantOutput

  • Cadena getAbiFilter ()
  • Cadena getDensityFilter ()
  • Tarea getAssemble ()
  • Cadena getName ()
  • Cadena getBaseName ()
  • Cadena getDirName
  • set / getVersionOverride // override opcional de VersionCode
  • int getVersionCode () // devuelve el reemplazo de versionCode desde la salida o el versionCode desde la propia variante

En mi caso, estaba recibiendo este error porque había una dependencia en una carpeta de biblioteca especificada en mi configuración . Esa carpeta tenía muchas configuraciones defectuosas aparentemente. Tan pronto como lo eliminé de settings.gradle, el proyecto se compiló bien.


No he podido encontrar una solución al problema, sino simplemente una solución alternativa. La versión 0.11 del complemento Android Gradle introduce una nueva API llamada fusión de Manifest . Permite lograr lo mismo que mi hack me permitió hacer.

Aquí están los cambios necesarios:

  • Rodee cualquier variable que inyecte en su manifiesto con "${GOOGLE_MAPS_KEY}"
  • Defina un mapa manifestPlaceholders en cada BuildType. Es decir:

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

¡Eso es! El complemento reemplazará automáticamente esas variables en su Manifiesto. ¡Con buena pinta!


También recibí este error después de actualizar a Android Studio 1.0.0 en el canal Beta. Sin embargo, no pude encontrar ninguna referencia en mis propios archivos de gradle para procesar Manifest. Después de algunas búsquedas, me di cuenta de que necesitaba un nuevo plugin Robolectric gradle:

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

El uso de la versión 0.14.0 de Robolectric Gradle Plugin (y la versión 2.4 de Robolectric) resolvió el error para mí.


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

}

Lo cambié de esta manera, que acaba de agregar una nueva capa fuera de la anterior. Esto funciona porque processManifest ahora está en el campo de outputs . Creo que esto podría ser útil.