web-dev-qa-db-fra.com

Compiler, fourni, APK - Android scope de dépendance

Lors de l'ajout de nouvelles dépendances à Android en particulier dans Android Studio dans Dependencies il y a trois options de portée Compiler/Fourni/APK.

Quels sont les effets du choix de chacun, quand devrions-nous les utiliser? Outre ce que le nom dit.

MODIFIER:

"Gérez correctement les étendues" fournies "et" package "pour faire ce qu'elles devraient faire." Fournies "et" package "ne peuvent pas être utilisées avec les bibliothèques Android, et génèreront une erreur" .. cela vient de http://tools.Android.com/tech-docs/new-build-system

43
Jacob
  • provided - dépendance de compilation uniquement
  • package - dépendance au moment du package uniquement
  • compile - dépendance à la compilation et à la compilation

provided est couramment utilisé pour les bibliothèques basées sur le traitement des annotations. Habituellement, ces bibliothèques sont séparées en deux artefacts - "annotation" et "compilateur". "compilateur" est une dépendance provided car vous n'avez pas besoin de l'utiliser dans l'application, uniquement pour la compilation; et "annotation" est une dépendance compile - elle est utilisée dans le code d'application et donc compile. Ou le code généré peut nécessiter des dépendances supplémentaires, contrairement à votre application. Par exemple. configuration des dépendances de dague:

compile 'com.squareup.dagger:dagger:1.2.2'
provided 'com.squareup.dagger:dagger-compiler:1.2.2'
42
Kirill Boyarshinov

Ces propriétés proviennent de maven scopes .

Ils indiquent simplement comment traiter des dépendances particulières à chaque étape du processus de génération.

  1. compile - une approche par défaut, cela signifie simplement que toutes les dépendances doivent être disponibles au moment de la compilation. Les dépendances de compilation sont disponibles dans tous les chemins de classe d'un projet. En outre, ces dépendances sont propagées aux projets dépendants. Une dépendance à la compilation est généralement requise lors de l'exécution.

  2. package - déclare une configuration supplémentaire pour la construction d'une application. Vous pouvez répertorier les plugins qui ajoutent des fonctionnalités supplémentaires au processus de génération.

  3. provided - cela signifie que l'environnement d'exécution a ces dépendances incluses. Par exemple, lorsque vous examinez Android.jar internes de la bibliothèque, vous verrez Java.lang.RuntimeException: Stub! dans chaque corps de méthode.

    Cela a des conséquences:
    • Vous pouvez développer des applications Android localement, sans avoir l'environnement complet Android.
    • Votre APK, vous devez l'exécuter sur un Android ou un émulateur car ils fournissent la mise en œuvre de ces méthodes.
    • Vos applications qui référencent les classes SDK se construiront correctement, car le bocal fournit les métadonnées de classe.
    • Sauf si vous utilisez une bibliothèque qui fournit des artefacts (par exemple Robolectric ), vous devez exécuter des tests sur votre émulateur/appareil.

provided et package ne peuvent pas être utilisés avec Android Libraries, et génèreront une erreur.

Voici à quoi ressemble sourceSet:

enter image description here

Plus d'informations sur le système de construction: https://www.youtube.com/watch?v=LCJAgPkpmR

Un article génial sur Gradle: http://www.sinking.in/blog/provided-scope-in-gradle/

35
Kamil Lelonek

Xavier parle ici de la portée [~ # ~] apk [~ # ~] .

dans le Android, l'équivalent (en quelque sorte) du runtime s'appelle apk. Vous pouvez faire

dépendances {fichiers apk ('libs/foo.jar')}

et il sera seulement empaqueté mais ne sera pas sur le chemin de classe de compilation.

16
aows