¿Por qué los tipos de construcción son distintos de los tipos de productos?


Prefacio: esta no es una pregunta sobre cómo usar tipos de compilación y tipos de productos en una aplicación de Android. Entiendo los conceptos básicos involucrados. Esta pregunta se trata más bien de tratar de entender qué configuración debe especificarse en un tipo de compilación, qué configuración debe especificarse en un tipo de producto y si es realmente necesaria alguna distinción.

Esta semana, he estado aprendiendo más sobre la configuración de gradle para aplicaciones Android. Inicialmente pensé que tenía un buen manejo de los tipos de compilación frente a los tipos de productos, pero cuanto más profundizaba en la documentación, más me daba cuenta de que la distinción entre los dos no estaba clara para mí en absoluto.

Dado que hay una jerarquía bien definida (en el sentido de que las propiedades especificadas en los tipos de compilación tienen prioridad sobre las especificadas en los tipos de productos), no entiendo por qué hay una necesidad de distinguir entre los tipos de compilación y los tipos de productos en absoluto. No sería mejor combinar todas las propiedades y métodos en el objeto DSL de tipo de producto, y luego simplemente tratar el tipo de compilación como una dimensión de tipo (predeterminada)?

Algunos ejemplos concretos que llevaron a mi confusión:

  • La propiedad signingConfig se puede establecer tanto en tipos de compilación como en tipos de productos... pero minifyEnabled (y, supongo, shrinkResources?) solo se puede configurar en tipos de compilación.

  • applicationId solo se puede especificar en los tipos de productos... y applicationIdSuffix solo se puede especificar en tipos de compilación!?

El real pregunta(s)):

Dados los ejemplos anteriores: ¿hay una distinción clara entre los roles de los tipos de compilación y los tipos de productos?

Si es así, ¿cuál es la mejor manera de entenderlo?

Si no es así, ¿está previsto fusionar eventualmente tipos de compilación y tipos de productos en un único objeto DSL configurable?

Author: stkent, 2015-01-12

2 answers

Ampliando lo que @CommonsWare dijo en los comentarios, la idea básica es que los tipos de compilación son para diferentes compilaciones de su aplicación que no son funcionalmente diferentes if si tiene una versión de depuración y lanzamiento de su aplicación, son la misma aplicación, pero una contiene código de depuración, tal vez más registros, etc., y el otro es aerodinámico y optimizado y posiblemente ofuscado a través de ProGuard. Con sabores, la intención es que la aplicación es notablemente diferente de alguna manera. El ejemplo más claro sería una versión gratuita frente a una versión de pago de tu aplicación, pero los desarrolladores también pueden diferenciar en función de dónde se está distribuyendo (lo que podría afectar el uso de la API de facturación en la aplicación).

Hay desarrolladores que hacen muchas, muchas versiones diferentes de una aplicación similar para diferentes clientes an un ejemplo podría ser una aplicación simple que abre una página web en una vista web, con diferentes URL y marcas para cada versión this este es un buen uso de sabores.

Para reiterar, si es "la misma aplicación", modulo algunas diferencias que no son importantes para el usuario final, y especialmente si todas las variantes excepto una son para su propio uso de pruebas y desarrollo y solo se implementará una variante para los usuarios finales, entonces es un buen candidato para los tipos de compilación. Si se trata de una aplicación" diferente " y se implementarían múltiples variantes para los usuarios, entonces tal vez sea un candidato para un tipo de producto.

Ya has visto que hay algunas diferencias de funcionalidad entre los tipos de compilación y los tipos, en que algunas opciones son compatibles con una pero no con la otra. Pero los conceptos son diferentes a pesar de que son similares, y no hay un plan para fusionarlos.

 126
Author: Scott Barta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-12 17:57:12

BuildType configurar cómo empaquetamos nuestra aplicación

  • Reducir los recursos
  • progaurdFile
  • etc.

Flavor configura diferentes clases y recursos.

  • En Flavor1 tu MainActivity puede hacer algo, y en Flavor2 diferentes implementaciones

  • Nombre diferente de la aplicación

  • Etc.

Cada sabor de producto puede tener sus propios valores de las siguientes propiedades, entre otros, que se basan en las mismas propiedades de defaultConfig:

  • applicationId
  • minSdkVersion
  • targetSdkVersion
  • versionCode
  • versionName
 16
Author: itzhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-15 19:21:55