gpt4 book ai didi

android - Gradle - 选择性模块编译(否则重用 jar)

转载 作者:可可西里 更新时间:2023-11-01 18:47:22 24 4
gpt4 key购买 nike

我在我的项目中使用了很多模块(本地和在线模块,大部分时间超过 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
}
}
}

关于android - Gradle - 选择性模块编译(否则重用 jar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40395337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com