¿Cómo usar la nueva fusión de manifiesto (de Android Studio y Gradle)?

Fondo

En el pasado, cuando Eclipse y ADT eran las herramientas oficiales para desarrollar Android, simplemente podía usar " manifestmerger.enabled = true " dentro del proyecto " project.properties " del proyecto de la aplicación y lo consiguió fusionando todos los manifiestos de las bibliotecas automáticamente (Y he publicado sobre él aquí ).

Esto funcionaba, a veces. Tenía muchos problemas raros, y siempre preferí evitar usarlo, y poner manualmente lo que se necesita en el archivo de manifiesto principal.

El problema

En algún lugar de 2014, Google anunció que el nuevo Android-Studio (0.1 creo), junto con Gradle, le permitirá elegir exactamente cómo realizar la fusión de los componentes de las bibliotecas.

Sin embargo, las nuevas instrucciones (enlace aquí ) son muy complejas y realmente (realmente) traté de entender cómo usarlas, y tampoco encontré muestras de cómo usarlas.

No es que no haya entendido nada, pero no sé si lo he entendido bien.

Lo que he encontrado

En el lado positivo, he descubierto que la fusión se realiza de forma totalmente automática, por lo que si tiene un BroadcastReceiver en el manifiesto de la biblioteca (y como una clase, por supuesto), se agregará al proyecto de la aplicación que lo utiliza.

La pregunta

No puedo simplemente pedir que todo sea explicado. Creo que será suficiente para hacer esas preguntas:

  1. ¿Cómo puedo elegir qué componentes de la aplicación (permisos, actividades, …) se ignorarán cuando se fusionen automáticamente?

  2. ¿Cómo puedo señalar los componentes de la sustitución de la aplicación (de la biblioteca) (en el proyecto de la aplicación)? Por ejemplo el tema de las actividades?

  3. ¿Hay una manera de desactivar completamente la fusión automática para los archivos de manifiesto?

  4. ¿Qué sucede con los manifiestos de dependencias que están dentro de los repositorios? ¿Se fusionan también?

  5. ¿Hay tutoriales / muestras / videos con respecto a esta nueva característica (bien nueva para mí)?

  6. ¿Hay alguna cosa que debo tener en cuenta al usar la auto-fusión?

Espero que esas preguntas sean lo suficientemente representativas, informativas, pero no demasiado difíciles de responder para las personas que lo saben.

1. Elementos de desactivación

Siempre puede deshabilitar explícitamente los permisos y las funciones del manifiesto de su aplicación y anular los valores de la biblioteca. Y descubrí que puedes deshabilitar elementos de la biblioteca .

Ejemplo

Considere el siguiente código del enlace anterior:

<activity-alias android:name=”foo.bar.alias”> <meta-data android:name=”zoo” tools:node=”remove”/> </activity-alias> 

Al tener este código dentro de su manifiesto, asegúrese de que la fusión encuentre cualquier elemento <activity-alias> con el atributo android:name="foo.bar.alias" y elimine un elemento <meta-data> si tiene el android:name="zoo" Atributo android:name="zoo" . Elimina sólo los metadatos "zoo". No es el alias de la actividad. Si especificas esto en tu manifiesto principal, será efectivo en cualquier elemento que se haya fusionado hasta el momento (elementos de bibliotecas).

Ejemplo # 2

Puesto que usted pidió un ejemplo con actividades, esto es lo que he venido con:

 <activity android:name="com.example.ui.MyActivity" tools:node="remove"/> 

Esta línea hará que la fusión elimine cualquier actividad con el atributo android:name="com.example.ui.MyActivity" que se han fusionado hasta ahora. Por lo tanto, si especifica esto en su manifiesto principal, eliminará efectivamente todas com.example.ui.MyActivity entradas com.example.ui.MyActivity que pudieran haber sido fusionadas de las bibliotecas.

2. Sobreescribir atributos de la biblioteca

El orden en que se fusionan los valores se describe aquí en la sección Ordenación de archivos de manifiesto. Básicamente va como esto: las bibliotecas, a continuación, el manifiesto principal, a continuación, los sabores y tipos de construcción se manifiesta si se utilizan los. ¿Cómo anular los atributos de la biblioteca?

¿Qué son los tipos de construcción?

El valor predeterminado es "depurar" y "liberar". Puede definir su propia y anular configuraciones como firmar o proguard . Para sus propósitos se podría decir que es el equivalente a ejecutar configuraciones.

Funciona de esta manera: usted pone sus valores predeterminados y compartidos dentro del manifiesto main . Luego, en los manifiestos de sabor , anula los valores que necesita. Google "gradle sabores" para más información.

3. Desactivar la fusión manifiesta por completo

Deshabilitar Fusión de manifiesto en Android Gradle Build

 android.applicationVariants.all { variant -> variant.processResources.manifestFile = file('src/main/AndroidManifest.xml') variant.processManifest.enabled=false } 

¿En qué archivo pone esto?

Al final de su módulo (no proyecto raíz) build.gradle .

4. ¿Se fusionan los manifiestos de las dependencias?

Sí, son (son bibliotecas).

¿Hay una manera de bloquear la fusión de ciertos manifiestos de la biblioteca?

No que yo sepa, lo siento.

5. ¿Tutoriales?

Depende de lo que intentes lograr. Hasta ahora siempre funcionó para mí fuera de la caja.

No sé si hay videos.

6. ¿Algo que debo saber?

Puede comprobar el manifiesto generado si se sospecha acerca de permisos adicionales, etc. Se encuentra en el project/module/build/intermediates/manifests/full/[flavor]/build-type/AndroidManifest.xml .

Salsa: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

  • Cómo pasar un parámetro al código Java en la configuración de ejecución / depuración de Android Studio
  • Construir variantes en Gradle para un proyecto de biblioteca en Android
  • Configuración de Android Annotations v3.0.1 con Android Studio (Beta) 0.8.4
  • Cómo mostrar errores de compilación en android studio
  • Manera correcta de declarar para los teléfonos solamente en el manifiesto
  • / Dev / HAX falta cada vez que reinicio mi equipo
  • Error de generación de Proguard con la biblioteca de anotaciones de Lombok
  • error: no hay identificador de recurso para el atributo 'srcCompat'
  • Configuración con nombre 'default' no encontrado - HoloGraphLibrary
  • Gradle sync failed, 'debugCompile' directamente no está permitido
  • No se permite el atributo de manifiesto de Android aquí
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.