Estudio de Android: ¿por qué se especifican minSdkVersion y targetSdkVersion en AndroidManifest.xml y build.gradle?

Acabo de descubrir algo extraño sobre Android studio: tiene algunas opciones de configuración en el archivo build.gradle que anulan lo especificado en el archivo AndroidManifest.xml .

Por ejemplo, tenía las siguientes líneas en build.gradle :

 android { compileSdkVersion 18 buildToolsVersion "18.1.1" defaultConfig { minSdkVersion 10 targetSdkVersion 10 } ... } 

que estaba anulando la etiqueta correspondiente en AndroidManifest.xml :

  

Realmente no me gusta tener la misma configuración dividida en dos archivos diferentes, así que me pregunto si puedo eliminarla de forma segura desde build.gradle o AndroidManifest.xml y donde tiene más sentido guardarla.

Gradle reemplaza los valores de manifiesto, y prefiero actualizar el archivo build.gradle lugar del manifiesto. Probablemente esta es la forma correcta de usar Gradle. Gradle admite sabores de productos que se pueden controlar a través de un IDE y esos sabores de productos pueden cambiar muchas cosas en nuestro Manifiesto, como el nombre del paquete, el código de versión, el nombre de la versión, el SDK de destino y muchos otros. Luego, con un clic en Android Studio puede cambiar muchas propiedades y generar otro apk.

Puede dejar el manifiesto tal como está y realizar toda la configuración en build.gradle . Puedes eliminar de forma segura

  

desde manifiestos y códigos de versión.

De los documentos de Android:

Nota: si su aplicación define la versión de la aplicación directamente en el elemento, los valores de la versión en el archivo de construcción de Gradle anularán la configuración en el manifiesto. Además, la definición de estas configuraciones en los archivos de comstackción Gradle le permite especificar diferentes valores para diferentes versiones de su aplicación. Para una mayor flexibilidad y para evitar posibles sobreescrituras cuando se combina el manifiesto, debe eliminar estos atributos del elemento y definir la configuración de la versión en los archivos de comstackción de Gradle.

https://developer.android.com/studio/publish/versioning.html#appversioning