107 votes

Android studio : pourquoi minSdkVersion et targetSdkVersion sont-elles spécifiées à la fois dans AndroidManifest.xml et build.gradle ?

Je viens de découvrir quelque chose d'étrange à propos d'Android studio : il dispose de certaines options de configuration dans la section build.gradle qui remplacent ce qui est spécifié dans le fichier AndroidManifest.xml fichier.

Par exemple, j'avais les lignes suivantes dans build.gradle :

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 10
    }
...
}

qui remplaçait la balise correspondante dans AndroidManifest.xml :

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="8"/>

Je n'aime pas vraiment que les mêmes paramètres soient répartis dans deux fichiers différents, et je me demande donc si je peux les supprimer en toute sécurité soit de build.gradle o AndroidManifest.xml et où il est plus judicieux de le conserver.

113voto

mar3kk Points 424

Gradle remplace les valeurs du manifeste, et je préfère mettre à jour le fichier build.gradle plutôt que le manifeste. C'est probablement la bonne façon d'utiliser Gradle. Gradle supporte des saveurs de produit qui peuvent être contrôlées via un IDE et ces saveurs de produit peuvent changer beaucoup de choses dans notre manifeste comme le nom du paquet, le code de version, le nom de la version, le SDK cible et beaucoup d'autres. Ensuite, en un clic dans Android Studio, vous pouvez modifier de nombreuses propriétés et générer un autre apk.

Vous pouvez laisser le manifeste tel quel et effectuer toute la configuration dans le fichier build.gradle . Vous pouvez retirer en toute sécurité

<uses-sdk></uses-sdk>

du manifeste ainsi que des codes de version.

3 votes

Pour ceux qui se posent la question, si vous utilisez apktool pour décompresser un APK construit comme ceci, vous ne verrez pas la minSdkVersion dans le AndroidManifest. Je ne sais pas où il va, mais il fait la bonne chose (j'ai confirmé en téléchargeant sur Google Play) !

6 votes

Étrange. Il semble que Google décide du minSDK en fonction de l'API que notre application appelle. Bien que mon app/build.gradle spécifie que le minSDK est Android 2.2, dans Google Play il est indiqué minSDK = Android 1.6. Et oui, le AndroidManifest.xml décompilé ne contient aucune information sur le minSDK. Je pense que c'est un problème, car cela nous "oblige" à prendre également en charge les appareils Android 1.6.

1 votes

La barre latérale ici : developer.Android.com/guide/topics/manifest/ suggère que Play utilise toujours le manifeste d'une manière ou d'une autre. Peut-être est-il réinséré dans les coulisses par gradle avant la construction de l'APK ?

0voto

TALE Points 68

Dans la documentation Android :

Remarque : si votre application définit la version de l'application directement dans l'élément, les valeurs de version dans le fichier de construction Gradle remplaceront les paramètres du manifeste. En outre, la définition de ces paramètres dans les fichiers de construction Gradle vous permet de spécifier des valeurs différentes pour les différentes versions de votre application. Pour une plus grande flexibilité et pour éviter un écrasement potentiel lorsque le manifeste est fusionné, vous devez supprimer ces attributs de l'élément et définir vos paramètres de version dans les fichiers de construction Gradle.

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

1 votes

Je pense que cette partie parlait de versionCode . Vous auriez dû citer le suivant dans Specify API level requirements section

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X