我在项目中使用了很多模块(本地和在线模块,大多数情况下> 20),并且可以说,通常其中的任何模块都必须检查或重新编译。我可以将它们全部都包含为.jar文件,这可以加快构建时间,但我更喜欢以下内容:

  • 设置了一些东西,我定义了gradle应该为我所有的模块构建一个.jar并重用它们
  • 如果需要,我只是禁用此设置并构建我的项目(完全干净的构建即可做到)
  • 我希望能够在项目中编辑我的模块,这就是为什么我不想直接将它们作为.jar文件包括在内。

  • 我想要更快的构建时间,但是我不想构建.jar文件并将其手动添加到我的项目中。

    关于如何以及是否有可能的任何想法?我可以通过一些设置或通过gradle任务或类似工具来实现吗?

    最佳答案

    让我考虑一下.jar中存在的验证库,我们应该下载该库。在其他情况下,您可以提供几种类型的产品口味。然后,只需为您的工作选择Build Flavors。

    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')
    
    }
    

    |更新|

    因此,经过一些解决方法后,我看到Gradle将库收集到某些缓存中,在这里可以看到源代码。但是我仍然在寻找使用项目配置的正确验证库的方法。

    现在,我编写了用于从Gradle缓存位置收集文件的脚本。并将其复制到新位置,我们可以在其中使用构建样式。这确实非常快(对于200个库,不到7秒),但是仍然需要改进(请参见上文)。

    如果我没有时间,请在下一次更新中填写扩展解决方案。感谢您的理解。
    // 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
            }
        }
    }
    

    10-07 19:36
    查看更多