¿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.
- Google Sign-in siempre falla en GoogleSignInResult
- TestCompile resultados en el estudio de Android no resolver las dependencias
- ¿Cómo usar Git correctamente en Android Studio?
- ViewPager demasiado lento al desplazar (con Picasso)
- ExpandableListView lista expandible no expandir cuando su altura es wrap contenido, y algo está por debajo de él
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:
-
¿Cómo puedo elegir qué componentes de la aplicación (permisos, actividades, …) se ignorarán cuando se fusionen automáticamente?
-
¿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?
-
¿Hay una manera de desactivar completamente la fusión automática para los archivos de manifiesto?
-
¿Qué sucede con los manifiestos de dependencias que están dentro de los repositorios? ¿Se fusionan también?
-
¿Hay tutoriales / muestras / videos con respecto a esta nueva característica (bien nueva para mí)?
-
¿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.
- Android Studio pm install aborted
- Problema de imagen borrosa en vista de imagen
- Android Studio: java.io.IOException: Una conexión existente fue forzadamente cerrada por el host remoto
- Android cómo cambiar el tamaño (escala) de un icono de vector xml mediante programación
- Android Studio: No se puede obtener el resultado de 'versión de adb'
- Cobertura del código Jacoco en el estudio android
- ¿Cómo usar el ProGuard en Android Studio?
- Actividad no registrada en el manifiesto Aviso de pelusa
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.
- Eg http://www.myandroidsolutions.com/2014/04/10/android-gradle-manifest-merge/
- La documentación de fusión manifiesta (enlace a continuación).
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
- Acceso a contenidos de R.string usando una variable para representar el nombre del recurso
- Cómo centrar el texto y las imágenes en un CompoundDrawable?