Gradle – compilation du module sélectif (réutilisation du pot autrement)

J'utilise beaucoup de modules dans mon projet (locaux et en ligne,> 20 la plupart du temps) et je peux dire que normalement aucun d'entre eux doit être vérifié ou recompilé. Je pourrais les inclure tous comme des fichiers .jar qui accéléreront le temps de construction mais je préférerais suivre:

  • Configurer quelque chose où je définis que gradle devrait construire un .jar pour tous mes modules et les réutiliser
  • Si nécessaire, je désactive simplement cette configuration et je construis mon projet (une compilation impeccable pourrait faire cela)
  • Je veux pouvoir modifier mes modules dans le projet, c'est pourquoi je ne veux pas les inclure directement comme fichiers .jar .

Je veux des temps de compilation plus rapides, mais je ne veux pas avoir à créer les fichiers .jar et les ajouter manuellement à mon projet.

  • Comment déplacer la mise en page lorsque le clavier doux est affiché Android
  • Quelle est la différence entre `opencv.android.JavaCameraView` et` opencv.android.NativeCameraView`
  • Réparez l'animation d'un ViewPager circulaire
  • Puis-je définir un drapeau BuildConfig qui renvoie si oui ou non un apk est construit avec la tâche gradled `connectedAndroidTest`?
  • Ajout de champs Cc, Bcc et Sujet à un message dans une application Android d'envoi de messagerie
  • Télécharger Android Progress
  • Des idées sur comment et si cela est possible? Puis-je me rendre compte que via une configuration ou par une tâche de gradle ou similaire?

  • Quand le getItem de FragmentPagerAdapter est-il appelé?
  • Comment déterminer la taille d'une vue Android en pixels?
  • Emulateur Android - Problème de création de comptes utilisateur
  • API manquant & auth> Applications enregistrées dans Google cloud console / Comment puis-je obtenir la clé de l'API GCM?
  • Lancez le gestionnaire SDK Android - Le répertoire Outils n'existe pas? Mac
  • Pourquoi OnClickListener sur un ViewHolder ne fonctionne pas?
  • 2 Solutions collect form web for “Gradle – compilation du module sélectif (réutilisation du pot autrement)”

    Permettez-moi de penser aux bibliothèques de vérification, qui existent en .jar et que nous devrions télécharger. Dans d'autres cas, vous pouvez fournir plusieurs types de saveurs de produits. Et après cela, sélectionnez simplement Build Flavors pour votre travail.

     productFlavors { fastDebug { applicationIdSuffix ".jar" } regularDegub { applicationIdSuffix ".regular" } .... // Other Configuration } dependencies { ... // Jar Debug by adding only Jar fastDegubCompile fileTree(dir: 'libs', include: '*.jar') fastDegubCompile 'com.android.support:support-v4:23.1.1' ... // Regular Debug with downloading all libraries // Including only specific from project files regularDegubCompile 'com.squareup.picasso:picasso:2.5.2' regularDegubCompile 'com.android.support:support-v4:23.1.1' regularDegubCompile files('libs/specific1.jar', 'libs/specific2.jar') } 

    | MISE À JOUR |

    Donc, après quelques contournements, je vois que Gradle regroupe des bibliothèques dans un cache, où je peux voir la source. Mais je recherche toujours la manière de corriger les bibliothèques de vérification avec la configuration du projet.

    Pour l'instant, j'ai écrit un script pour la collecte des fichiers depuis l'emplacement du cache de Gradle. Et les copier dans un nouvel emplacement, où nous pouvons utiliser des saveurs de construction ,. Cela fonctionne très vite (moins de 7 secondes pour 200 bibliothèques), mais il faut encore des améliorations (voir ci-dessus).

    Si je n'ai pas le temps, pour la prochaine mise à jour, complétez-vous pour étendre la solution. Merci de votre compréhension.

     // Task for calling from Gradle Scripts // ----------------------------------- task gatheringJarFilesTask << { println("Gathering Jars Start...") gatheringJarFiles(gradleCacheLocation, foundedJarsList) println("------------------------------") println("Gathering Jars End! Start copying!") copyFiles(projectJarsLocation, foundedJarsList) } // Constants, which might be optimized too // ----------------------------------- def gradleCacheLocation = '/home/kasyangenka/.gradle/caches/modules-2/files-2.1' def projectJarsLocation = '/home/kasyangenka/Projects/GradleScriptsTest/app/libs' List<String> foundedJarsList = [] // Main Script Methods // ----------------------------------- def gatheringJarFiles(baseDirPath, gatheredList) { new File(baseDirPath).eachFile {file -> println("-> Current file: " + file.getName()) if (file.isDirectory()) { gatheringJarFiles(file.getAbsolutePath(), gatheredList) } def containsLib = (file.getName().contains(".jar") || file.getName().contains(".aar")); if (containsLib) { println("->> Adding Jar file: " + file.getAbsolutePath()) gatheredList.add(file.getAbsolutePath()) } } } def copyFiles (destiny, List sourceList) { sourceList.each {filePath -> copy { from filePath into destiny } } } 

    Je pense que la fonctionnalité de Continuous build introduite à partir de Gradle 2.5 tente de résoudre le problème de ce que vous rencontrez, mais ce n'est pas exactement ce dont vous avez besoin. Pass -t ou --continuous à la commande gradlew pour l'utiliser, suit la description de l'option -t .

     -t, --continuous Permet la construction continue.  Gradle ne quitte pas et ré-exécute les tâches lorsque les entrées du fichier de tâches changent.  [Incubation]
    

    Et cité du document:

     Le support de compilation incrémentale de Gradle garantit que seules les tâches qui sont effectivement affectées par la modification sont exécutées.
    

    Voir: https://docs.gradle.org/current/userguide/continuous_build.html

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.