tools studio paquete nombre merger failed cambiar authorities application aplicacion android android-studio android-manifest manifest-merging

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



package id android (2)

Fondo

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

Esto funcionó, a veces. Tenía muchos problemas extraños, y siempre preferí simplemente evitar usarlo y poner manualmente lo que se necesita en el archivo principal de manifiesto.

El problema

En algún lugar del 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 here ) son muy complejas y realmente (realmente) traté de entender cómo usarlas, y tampoco encontré muestras de cómo usarlas.

No es que no entendiera nada, pero no estoy seguro de haberlo entendido bien.

Lo que he encontrado

En el lado positivo, descubrí que la fusión se realiza de forma completamente automática, por lo que si tiene un BroadcastReceiver en el manifiesto de la biblioteca (y como 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 hacer esas preguntas:

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

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

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

  4. ¿Qué pasa 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 (bueno para mí)?

  6. ¿Hay alguna cosa que deba tener en cuenta al utilizar la fusión automática?

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


1. Elementos incapacitantes.

Siempre puede deshabilitar explícitamente los permisos y las funciones en el manifiesto de su aplicación y anular cualquier valor de biblioteca. Y encontré 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, se asegura de que la fusión encuentre cualquier elemento <activity-alias> con el atributo android:name="foo.bar.alias" y elimina un elemento <meta-data> si tiene el android:name="zoo" Atributo del android:name="zoo" . Sólo elimina los metadatos del "zoo". No es el alias de actividad. Si especifica esto en su manifiesto principal, será efectivo en todo lo que se haya fusionado hasta ahora (elementos de las bibliotecas).

Ejemplo # 2

Ya que solicitó un ejemplo con actividades, esto es lo que he encontrado:

<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 ha fusionado hasta el momento. Por lo tanto, si especifica esto en su manifiesto principal, eliminará de manera efectiva cualquier entrada com.example.ui.MyActivity que pueda haberse fusionado desde las bibliotecas.

2. Anulando atributos de la biblioteca

El orden en que se fusionan los valores se describe here en la sección Ordenación de archivos de manifiesto. Básicamente, funciona de la siguiente manera: bibliotecas, luego el manifiesto principal, luego los sabores y los tipos de compilación se manifiestan si los usa. ¿Cómo anular los atributos de la biblioteca?

¿Qué son los tipos de construcción?

Los predeterminados son "depurar" y "liberar". Puede definir su propia configuración y anularla, como la firma o la programación . Para tus propósitos, podrías decir que es el equivalente a ejecutar configuraciones.

Funciona así: coloca sus valores predeterminados y compartidos dentro del manifiesto main . Luego, en los manifiestos de sabor , anula los valores que necesitas. Google "Gradle Fours" para más información.

3. Deshabilitar la fusión manifiesta por completo

Deshabilitar la fusión manifiesta en Android Gradle Build

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

¿En qué archivo pones esto?

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

4. ¿Se fusionan los manifiestos de las dependencias?

Sí lo son (son bibliotecas).

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

No que yo sepa, lo siento.

5. ¿Algún tutorial?

Depende de lo que estés tratando de lograr. Hasta ahora siempre ha funcionado para mí fuera de la caja.

No sé sobre ningún video.

6. ¿Algo de lo que deba estar enterado?

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

Salsa: here