web-dev-qa-db-fra.com

gradle - la bibliothèque se duplique dans les dépendances

J'ai un projet avec Android avec gradle. Le problème est le suivant: Dans la vue project, je vois quelques versions de support-v4 bibliothèques, par exemple support-v4-21.0.3 et support-v4-22.2.0.

Mais en build.gradle Je n'ai pas support-v4 du tout.

Mais j'ai ~ 10 autres dépendances dans build.gradle. Par exemple appcompat-v7:22.2.0. Je peux suggérer que appcompat-v7:22.2.0 dépend de support-v4-22.2.0 dans les dépendances maven et le tire implicitement. Mais je n'ai aucune idée qui tire support-v4-21.0.3.

Autant que je sache, toutes ces librairies seront emballées dans mon APK et augmenteront le poids de l'APK.

J'ai donc les prochaines questions:

  1. Comment éviter les doublons de bibliothèque?
  2. Comment voir les dépendances maven dans Android Studio?
  3. Comment détecter quelle bibliothèque nécessite cette bibliothèque? Par exemple, quelle bibliothèque nécessite support-v4-21.0.3 dans mon projet?
47
anber

Pour rechercher les dépendances en double ou les dépendances requises , vous pouvez visualiser les dépendances de la bibliothèque dans une arborescence. Exécutez la commande gradle comme ci-dessous.

gradle -q dependencies yourProject:dependencies --configuration compile

Notez que, exécutez gradlew dans Windows comme ci-dessous.

gradlew -q dependencies yourProject:dependencies --configuration compile

Le résultat de la commande vous montrera la hiérarchie arborescente lisible par l’homme de toutes les dépendances comme ci-dessous.

compile - Classpath for compiling the main sources.
+--- org.androidannotations:androidannotations-api:3.2
+--- com.Android.support:support-annotations:22.1.1
+--- com.squareup:otto:1.3.6
+--- in.srain.cube:grid-view-with-header-footer:1.0.10
+--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
+--- com.github.chrisbanes.photoview:library:1.2.3
+--- org.simpleframework:simple-xml:2.7.1
+--- com.google.Android.gms:play-services-base:6.5.+ -> 6.5.87
+--- project :yourProject
|    +--- com.loopj.Android:android-async-http:1.4.6
|    +--- org.Apache.httpcomponents:httpmime:4.2.5
|    |    \--- org.Apache.httpcomponents:httpcore:4.2.4
|    \--- com.google.code.gson:gson:2.3.1
+--- project :facebook
|    \--- com.Android.support:appcompat-v7:22.1.1
|         \--- com.Android.support:support-v4:22.1.1
|              \--- com.Android.support:support-annotations:22.1.1 -> 22.2.0

Vous pouvez voir les dépendances surchargées et décider quelles sont celles qui doivent être évitées. Dans l'exemple ci-dessus, dernière ligne com.Android.support:support-annotations _ présente annulé de 22.1.1 à 22.2.0 en interne.

Pour éviter les doublons , vous pouvez ajouter des clauses exclude dans chaque projet build.gradle fichier.

compile('com.github.chrisbanes.photoview:library:1.2.3') {
    exclude group: 'com.Android.support'
}
compile('org.simpleframework:simple-xml:2.7.1') {
    exclude module: 'stax'
    exclude module: 'stax-api'
    exclude module: 'xpp3'
}
compile('com.google.Android.gms:play-services-base:6.5.+')
        {
            exclude module: 'support-v4'
        }

Pour plus d'informations, vous pouvez consulter le tutoriel à l'adresse suivante: https: //docs.gradle.org/current/userguide/userguide_single.html#sec: listing_dependencies

85
Youngjae